Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 通过VBA中的嵌套标记名获取元素_Excel_Vba - Fatal编程技术网

Excel 通过VBA中的嵌套标记名获取元素

Excel 通过VBA中的嵌套标记名获取元素,excel,vba,Excel,Vba,我想获取网页链接和嵌套标记的元素: <a href='/cacti/graph.php?action=view&amp;local_graph_id=279&amp;rra_id=all'><img class='graphimage' id='graph_279' src='/cacti/graph_image.php?local_graph_id=279&amp;rra_id=0&amp;view_type=tree&amp;grap

我想获取网页链接和嵌套标记的元素:

<a href='/cacti/graph.php?action=view&amp;local_graph_id=279&amp;rra_id=all'><img class='graphimage' id='graph_279' src='/cacti/graph_image.php?local_graph_id=279&amp;rra_id=0&amp;view_type=tree&amp;graph_start=1482822537&amp;graph_end=1482908937' border='0' alt='ARD-Besat-MKT450G  - Bandwidth 16 Mb- ether3-Link to PTMP'></a>
我在VBA中的功能是:

Function WebPageLinks(internet, tagname As String)
Dim internetdata As HTMLDocument
Dim internetlink As Object
Dim internetinnerlink As Object
Set internetdata = internet.document
Set internetlink = internetdata.getElementsByTagName(tagname)
For Each internetinnerlink In internetlink
Sheets("Sheet1").Select
Sheets(1).Cells(linkcount, 1) = internetinnerlink.href' true
Sheets(1).Cells(linkcount, 2) = internetinnerlink.innerhtml' true
Sheets(1).Cells(linkcount, 3) =internetinnerlink.src ' error
Sheets(1).Cells(linkcount, 4) = internetinnerlink.alt' error
linkcount = linkcount + 1
Next internetinnerlink
End Function`
函数WebPageLinks2(internet,标记名为字符串,innerlinkcount)
将td设置为MSHTML.IHTMLElementCollection
Dim tr作为MSHTML.IHTMLElementCollection
将trObj设置为MSHTML.htmlgenericeElement
将tdObj设置为MSHTML.htmlgenericement
将标志变暗为布尔值
flag=False
Set tr=internet.document.getElementsByTagName(“a”)
对于tr中的每个trObj
Set td=trObj.getElementsByClassName(“图形图像”)
对于td中的每个tdObj
'对每个td对象执行某些操作'
如果(InStr(CStr(tdObj.alt),“Agg”)0或(InStr(CStr(tdObj.alt),“ether1”)0或(InStr(CStr(tdObj.alt),“ether1”)0),则
表(1).单元格(innerlinkcount,7)=tdObj.src
表(1).单元格(innerlinkcount,6)=tdObj.alt
'Debug.Print tdObj.alt
'Debug.Print tdObj.src
flag=True
调用SaveGraphimageFromURL(表(5)。单元格(17,3)。值,表(1)。单元格(innerlinkcount,7)。值_
ToPathOfImages&“\”和Sheets(1).单元格(innerlinkcount,1).值和工作表(1).单元格(innerlinkcount,3).值和工作表(1).单元格(innerlinkcount,6).值和“.png”_
表格(5)。单元格(18,3)。数值,表格(5)。单元格(19,3)。数值)
工作表(1).Hyperlinks.Add范围(“g”和innerlinkcount),hyperlinkAddress
退出
如果结束
下一个
如果InStr(trObj.href,“xport”)和标志
表(1).单元格(innerlinkcount,5)=trObj.href
flag=False
调用SaveGraphimageFromURL(表(5).单元格(17,3).值,表(1).单元格(innerlinkcount,5).值_
表格(5).单元格(20,3).数值和表格(1).单元格(innerlinkcount,1).数值和表格(1).单元格(innerlinkcount,3).数值和表格(1).单元格(innerlinkcount,6).数值和“.csv”_
表格(5)。单元格(18,3)。数值,表格(5)。单元格(19,3)。数值)
调用csvimport((表(5).单元格(20,3).值))
调用tahlil(innerlinkcount)
调用move_文件(CStr((表(5).Cells(20,3).Value)),CStr(ToPath))
'Debug.Print trObj.href
“Debug.Print”(调试打印)
退出
如果结束
下一个
根=根+1
端函数

问题究竟是什么?我不知道如何在innerhtml元素中添加元素:(问题只在于注释有错误的两行?这些行的预期结果是什么?您能否展示您将使用此元素类型的示例源代码?最后,我可以通过替换来解决:
Function WebPageLinks(internet, tagname As String)
Dim internetdata As HTMLDocument
Dim internetlink As Object
Dim internetinnerlink As Object
Set internetdata = internet.document
Set internetlink = internetdata.getElementsByTagName(tagname)
For Each internetinnerlink In internetlink
Sheets("Sheet1").Select
Sheets(1).Cells(linkcount, 1) = internetinnerlink.href' true
Sheets(1).Cells(linkcount, 2) = internetinnerlink.innerhtml' true
Sheets(1).Cells(linkcount, 3) =internetinnerlink.src ' error
Sheets(1).Cells(linkcount, 4) = internetinnerlink.alt' error
linkcount = linkcount + 1
Next internetinnerlink
End Function`
Function WebPageLinks2(internet, tagname As String, innerlinkcount)

Dim td As MSHTML.IHTMLElementCollection
Dim tr As MSHTML.IHTMLElementCollection
Dim trObj As MSHTML.HTMLGenericElement
Dim tdObj As MSHTML.HTMLGenericElement
Dim flag As Boolean

flag = False

Set tr = internet.document.getElementsByTagName("a")
For Each trObj In tr
    Set td = trObj.getElementsByClassName("graphimage")
    For Each tdObj In td
        'do something with each td object'
         If (InStr(CStr(tdObj.alt), "Agg") <> 0) Or (InStr(CStr(tdObj.alt), "ether1") <> 0) Or (InStr(CStr(tdObj.alt), "Ether1") <> 0) Then
             Sheets(1).Cells(innerlinkcount, 7) = tdObj.src
             Sheets(1).Cells(innerlinkcount, 6) = tdObj.alt
             'Debug.Print tdObj.alt
             'Debug.Print tdObj.src
             flag = True
             Call SaveGraphImageFromURLs(Sheets(5).Cells(17, 3).Value, Sheets(1).Cells(innerlinkcount, 7).Value, _
             ToPathOfImages & "\" & Sheets(1).Cells(innerlinkcount, 1).Value & Sheets(1).Cells(innerlinkcount, 3).Value & Sheets(1).Cells(innerlinkcount, 6).Value & ".png", _
             Sheets(5).Cells(18, 3).Value, Sheets(5).Cells(19, 3).Value)
             Sheets(1).Hyperlinks.Add Range("g" & innerlinkcount), hyperlinkAddress
             Exit For
        End If
    Next
    If InStr(trObj.href, "xport") And flag Then
       Sheets(1).Cells(innerlinkcount, 5) = trObj.href
       flag = False
       Call SaveGraphImageFromURLs(Sheets(5).Cells(17, 3).Value, Sheets(1).Cells(innerlinkcount, 5).Value, _
       Sheets(5).Cells(20, 3).Value & Sheets(1).Cells(innerlinkcount, 1).Value & Sheets(1).Cells(innerlinkcount, 3).Value & Sheets(1).Cells(innerlinkcount, 6).Value & ".csv", _
       Sheets(5).Cells(18, 3).Value, Sheets(5).Cells(19, 3).Value)
       Call csvimport((Sheets(5).Cells(20, 3).Value))
       Call tahlil(innerlinkcount)
       Call move_files(CStr((Sheets(5).Cells(20, 3).Value)), CStr(ToPath))
       'Debug.Print trObj.href
       'Debug.Print " \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
       Exit For
    End If
Next

root = root + 1

End Function