2014-02-19 2 views
1

여기에 Mr Tim Williams에 대한 절차가 제공되어 실제로 우리가 원하는 것의 Immediate window에 인쇄합니다. 나는 original copy에서 일부 미니 수정을했고 나는 그들에게 MODIFICATION 옆에 주석 단어가VBA 프로시 저는 선언하고 재사용 할 다양한 문자열 변수를 출력합니다.

Sub MAGAZINE() 

    Dim IE As InternetExplorer ' MODIFICATION 
    Dim els, el, colDocLinks As New Collection 
    Dim lnk 
    Dim Ticker As String ' MODIFICATION 

    Set IE = New InternetExplorer 'MODIFICATION 

    IE.Visible = True 

    Ticker = Worksheets("Sheet1").Range("A1").Value 'MODIFICATION 

    loadpage IE, "https://www.sec.gov/cgi-bin/browse-edgar?" & _ 
        "action=getcompany&CIK=" & Ticker & "&type=10-Q" & _ 'MODIFICATION by putting the Ticker String Variable and then Concatenate accordingly 
        "&dateb=&owner=exclude&count=20"      

    Set els = IE.Document.getelementsbytagname("a") 
    For Each el In els 
     If Trim(el.innertext) = "Documents" Then 
      colDocLinks.Add el.href 
     End If 
    Next el 

    For Each lnk In colDocLinks 
     loadpage IE, CStr(lnk) 
     For Each el In IE.Document.getelementsbytagname("a") 
      If el.href Like "*[0-9].xml" Then    'MODIFICATION 
       Debug.Print el.innertext, el.href 
      End If 
     Next el 
    Next lnk 

End Sub 

Sub loadpage(IE As Object, url As String) 
    IE.Navigate url 
    Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE 
     DoEvents 
    Loop 
End Sub 
당신은 사람이 단순히 셀 A1에 주식 시세를 입력하고 해고 할 수있는 네 번째 수정/추가 알 수

코드

Ticker = Worksheets("Sheet1").Range("A1").Value 'MODIFICATION 

이제 것은 우리가 다른 주식 시세 표시기를 넣어 경우 우리가 직접 실행 창에 인쇄 라인의 수를 다른 수 있다는 것입니다. A1 셀의 시세 CRR을 입력하여 예를 들어

우리가 얻을 11 개 결과 이제 우리는 우리가 14 개 결과

MSFT

을 얻을 A1 셀의 시세 MSFT를 입력하면

CRR

이제 문제의 핵심은이 문자열 값을 RIFLE macro에 삽입해야하고 모든 루프 반복에서 값을 얻을 수는 있지만 문자열 변수 내 마음 속에서 원숭이 렌치를 던지는 이유는 MAGAZINE macro이 논리적 인 것입니다. 에는 직접 실행 창에 정확한 행 수가 인쇄되어 있지 않습니다. MAGAZINE macro 말 6 개 라인의 결과가있는 경우 당신은 어떻게 그것이 가능하다 ... 앞의 두 사진에서 실제로


을 것을 볼 수 있습니다; 이것들은 6 개의 문자열 변수에 할당되고 30 개의 문자열 변수를 갖지 않기 때문에 항상 메모리에 혼란을 가져 왔고 그 결과가 14 개의 라인 인 경우; 이것들은 14 개의 문자열 변수에 할당됩니다.

소총이 항상 올바른 라운드 수를로드 할 수 있도록 어떻게 실행 시간을 조정할 수 있습니까?

나는 거기서 멈추지 않을 것이기 때문에; 그럼 난 RIFLE macrouser2140261 제공하고 다음과 같이 이러한 문자열 변수를 연결하는 계획을 가지고 ...

Sub RIFLE() 
Dim strXMLSite As String 
Dim objXMLHTTP As MSXML2.XMLHTTP 
Dim objXMLDoc As MSXML2.DOMDocument 
Dim objXMLNodexbrl As MSXML2.IXMLDOMNode 
Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode 

Set objXMLHTTP = New MSXML2.XMLHTTP 
Set objXMLDoc = New MSXML2.DOMDocument 

strXMLSite = "http://www.sec.gov/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml" 

objXMLHTTP.Open "POST", strXMLSite, False 
objXMLHTTP.send 
objXMLDoc.LoadXML (objXMLHTTP.responseText) 

Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("xbrl") 

Set objXMLNodeDIIRSP = objXMLNodexbrl.SelectSingleNode("us-gaap:DebtInstrumentInterestRateStatedPercentage") 

Worksheets("Sheet1").Range("A1").Value = objXMLNodeDIIRSP.Text 
End Sub 

당신은 소총 문자열 변수에 MAGAZINE 매크로 나오는 문자열 값의 변동 수를 연결 할 수 있다면 조산사가 전체 문제를 일으키는 매크로.

여기 RIFLE 매크로는 원래 형식 인 strXMLSite 문자열 Variabe을 사용합니다.

UPDATE 나는 현재 배열로로드하려고 노력하고 언로드 ...

답변

2

여기에 하나 개의 제안입니다 오전 :

Sub MAGAZINE() 

    Dim IE As InternetExplorer ' MODIFICATION 
    Dim els, el, colDocLinks As New Collection 
    Dim lnk, res 
    Dim Ticker As String ' MODIFICATION 
    Dim colXMLPaths As New Collection '<<<EDIT 

    Set IE = New InternetExplorer 'MODIFICATION 

    IE.Visible = True 

    Ticker = Worksheets("Sheet1").Range("A1").Value 'MODIFICATION 

    LoadPage IE, "https://www.sec.gov/cgi-bin/browse-edgar?" & _ 
        "action=getcompany&CIK=" & Ticker & "&type=10-Q" & _ 
        "&dateb=&owner=exclude&count=20" 

    Set els = IE.Document.getelementsbytagname("a") 
    For Each el In els 
     If Trim(el.innertext) = "Documents" Then 
      colDocLinks.Add el.href 
     End If 
    Next el 

    For Each lnk In colDocLinks 
     LoadPage IE, CStr(lnk) 
     For Each el In IE.Document.getelementsbytagname("a") 
      If el.href Like "*[0-9].xml" Then 
       Debug.Print el.innertext, el.href 
       colXMLPaths.Add el.href '<<<EDIT 
      End If 
     Next el 
    Next lnk 

    'EDIT: ADDED 
    For Each lnk In colXMLPaths 
     res = RIFLE(CStr(lnk)) 
     With Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 
      .NumberFormat = "@" 
      .Value = Ticker 
      .Offset(0, 1).Value = lnk 
      .Offset(0, 2).Value = res 
     End With 
    Next lnk 

End Sub 

Function RIFLE(sURL As String) 
    Dim strXMLSite As String 
    Dim objXMLHTTP As New MSXML2.XMLHTTP 
    Dim objXMLDoc As New MSXML2.DOMDocument 
    Dim objXMLNodexbrl As MSXML2.IXMLDOMNode 
    Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode 

    RIFLE = "???" 
    objXMLHTTP.Open "GET", sURL, False '<<EDIT: GET not POST 
    objXMLHTTP.send 
    objXMLDoc.LoadXML (objXMLHTTP.responseText) 

    Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("xbrl") 

    Set objXMLNodeDIIRSP = objXMLNodexbrl.SelectSingleNode _ 
      ("us-gaap:DebtInstrumentInterestRateStatedPercentage") 

    If Not objXMLNodeDIIRSP Is Nothing Then 
     RIFLE = objXMLNodeDIIRSP.Text 
    End If 
End Function 

Sub LoadPage(IE As Object, url As String) 
    IE.Navigate url 
    Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE 
     DoEvents 
    Loop 
End Sub 
+0

이름 : Jeez! 감사!!!! 일단 우리가 그것을 공부하면 다시 얻을 것입니다 – ExoticBirdsMerchant

+0

이것은 사용자 정의를위한 주요 재료입니다! 나에게 너무 앞서 있기 때문에 소화하기까지 어느 정도 시간이 걸릴 것이다. 그러나 나는 그것이 어떻게 작동하고 진술인지 이해한다.그것은 작동합니다! 이 절차는 엉덩이를 걷어차! – ExoticBirdsMerchant

+0

자, 자정이 지나서 여기 좋았어. – ExoticBirdsMerchant

관련 문제