0

HTMLソースコードからの大きな文字列があります(約1,000,000文字の長さ)。msinet.ocxを使用して、適切なWebサイトからのテキストを表示しています。別のキーフレーズ(「コンポーネントアクセサリマトリックス」)の直前にあるキーフレーズ(「pkid =」)を見つけるためにコードの小さなセグメントを記述しましたが、正しく機能していません。これが私が今持っているものです:

workbench = Cells(columnNumber, 1).Value
myURL = "http://beams.us.yazaki.com/Beams/ViewDetails.aspx?topic=document&pkid=" _
& workbench
Dim inet1 As Inet
Dim mypage As String

Set inet1 = New Inet
With inet1
    .Protocol = icHTTP
    .URL = myURL
    mypage = .OpenURL(.URL, icString)
End With

CAMnum = InStr(mypage, "Component Accessory Matrix")
intStart = InStrRev(mypage, "pkid=", CAMnum) + 5
newnum = Mid(mypage, intStart, 6)
Cells(columnNumber, 2).Value = newnum

問題はmypage = .OpenURL(.URL, icString);にあるようです。を実行するlen(mypage)と、約100,000の値が返されますが、約100万の値が返されます。誰かがこれを説明できますか?

4

2 に答える 2

1

HTMLDOMを使用します。

  • テキストをHTMLドキュメントにロードします。

    Dim html As Object ' MSHTML.HTMLDocument  
    Set html = CreateObject("htmlfile")  
    html.body.innerHTML = "your HTML code here"
    
  • getElementsByTagNameを使用して、td要素のコレクションを取得します。

    Dim tdElements As Object ' MSHTML.IHTMLElementCollection  
    Set tdElements = html.getElementsByTagName("td")  
    
  • 内部テキストが「ComponentAccessoryMatrix」であるものが見つかるまでそれらをループし、次に前のtd要素の内部テキストを取得します。

    Dim tdElement As Object ' MSHTML.IHTMLElement  
    Dim i As Long  
    Dim textToParse As String  
    For i = 1 to tdElements.Count  
      If tdElements.Item(i).innerText = "Component Accessory Matrix" Then  
        ' get previous <td>  
        Set tdElement = tdElements.Item(i - 1)  
        textToParse = tdElement.innerText  
        Exit For  
      End If  
    Next i  
    
  • 従来の方法を使用して文字列を解析します

結果の文字列をで分割し=て2番目の要素を取得し、次にその文字列をで分割し"て最初の要素を取得します。それはあなたに。を残します300451

必要に応じて、次の例を示します

于 2012-07-10T16:18:38.800 に答える
1

とを使用InStrしてInStrRev、文字列を見つけ、後ろを振り返ります。その位置になったら、引用文字が見つかるまでそこから先を見てください。最後に、これらの位置を使用して文字列を取得します

pos1 = InStrRev(YourXMLString, "pkid=", InStr(YourXMLString, "Component Accessory Matrix")) + 5 ' length of "pkid="
pos2 = InStr(pos1, YourXMLString, Chr(34)) ' Chr(34)="
FoundString = Mid$(YourXMLString, pos1, pos2 - pos1)

「ComponentAccessoryMatrix」が欠落しているか、その前に「pkid =」がない場合、引用符が区切り文字でない場合、またはpkid =と引用符の間にテキストが含まれている場合、コードは失敗するか、または意味のない結果を生成します。

于 2012-07-10T15:43:36.363 に答える