Get attribute string value from html
12,594
Set imgObj = tdObj.getElementsByTagName("img")
returns a collection of images (even if there's only one to be found), so you can address a specific image using (eg):
dataArray(i, j) = imgObj(0).getAttribute("title")
Author by
Yeqing Zhang
Updated on June 08, 2022Comments
-
Yeqing Zhang almost 2 years
I am building a macro to extract data from website using vba. Currently I can easily get value from table content using element syntax like
obj.getElementsByTagName("td").innerText
. However, when there are some non-innerText data in some cells, I am getting trouble. It's like this:<img src="/images/amber_pending.gif" border="0" alt="Pending" title="Pending">
I attempted to extract the attribute value from "title" using syntax I found from others:
For Each tbObj In doc.getElementsByClassName("report removeTdBorder") i = 1 For Each trObj In tbObj.getElementsByTagName("tr") If i >= 3 Then j = 1 For Each tdObj In trObj.getElementsByTagName("td") If j = 1 Then Set imgObj = tdObj.getElementsByTagName("img") dataArray(i, j) = imgObj.getAttribute("title") Debug.Print imgObj.getAttribute("title") ActiveCell.Offset(0, j) = dataArray(i, j) ActiveCell.Offset(0, j).WrapText = False Else dataArray(i, j) = tdObj.innerText Debug.Print i & ", " & j & ": " & dataArray(i, j) ActiveCell.Offset(0, j) = dataArray(i, j) ActiveCell.Offset(0, j).WrapText = False End If j = j + 1 Next tdObj ActiveCell.Offset(1, 0).Activate End If i = i + 1 Next trObj Next tbObj
But this code goes error every time and it said "Run-time error '438': Object doesn't support this property or method" at the line
dataArray(i, j) = imgObj.getAttribute("title")
. Could some one help me? -
Yeqing Zhang over 11 yearsthanks for helping. however, it seems this one not working as well. it said "Run-time error '91': Object variable or With block variable not set" for dataArray(i, j) = imgObj(1).getAttribute("title"). is there any other reason?
-
barrowc over 11 yearsI think that IXMLDOMNodeList is zero-based so
imgObj(0).getAttribute("title")
should work -
Yeqing Zhang over 11 yearsThanks @barrowc!! this works!! and thanks @Tim Williams for your awesome solution as well!