我想在VBA中使用CallByName从这样的网页中读取特定的数据。这些网页具有不同的html结构。在我的例子中,有一个元素,我需要引用2个或3个父节点,并获得一个带有或标记的元素。请参阅代码:
元素添加到所有我命名为MyElem的网页中
在一个网页中,我需要这样的代码:
MsgBox MyElem.parentElement.parentElement.parentElement.getelementsbytagname("tr")(3).innertext在另一个网页上,我需要这样的代码:
MsgBox MyElem.parentElement.parentElement.getelementsbytagname("div")(2).innertext以此类推。
我想用VBA编写,如下所示:
Select Case Webpage
Case "webpage_1"
property ="parentElement.parentElement.parentElement.getelementsbytagname("tr")(3).innertext"
Case "webpage_2"
property = "parentElement.parentElement.getelementsbytagname("div")(2).innertext"
' and so on ...
End Select
MsgBox CallByName(MyElem, property, VbGet)问题是CallByName不支持多级属性。我读过类似的话题here,但它对我的情况没有帮助。有什么想法吗?
发布于 2018-12-06 06:42:00
为什么不是这个呢?
Dim res
Select Case Webpage
Case "webpage_1"
res = MyElem.parentElement.parentElement.parentElement.getelementsbytagname("tr")(3).innertext
Case "webpage_2"
res = MyElem.parentElement.parentElement.getelementsbytagname("div")(2).innertext
' and so on ...
End Select
MsgBox res发布于 2020-10-27 09:16:18
Function PropDotVal(wObjName$, PropNa$)Dim wObj As Object:设置wObj = ObjFromStr(wObjName)
‘ObjFromStr in module,如下所示:’必须有一个不需要太多case函数的内置vba函数‘str obj 'Case " sTable ":Set ObjFromStr =sTable’ShapePlus 'Case " WHCages ":Set ObjFromStr =WHCages‘spt
Dim Si%,NaA$() PropDotVal = "NA“On Error GoTo NotAvailable NaA = Split(PropNa,".")
如果UBound(NaA) >0,则
' PropNa format multi like wObj.Objb.objc etc .prop
' convert wObj as FredsFarm with PropNa as TopEnd.fill.backcolor.rgb
' to wobj as FredsFarm.TopEnd.fill.backcolor
'and Nsa(si) as "rgb" to CallByName from it
For Si = 0 To UBound(NaA) - 1
Set wObj = CallByName(wObj, NaA(Si), VbGet)
Next Si结束If
PropDotVal = CallByName(wObj,NaA(Si),VbGet) NotAvailable:
End函数
enter code herehttps://stackoverflow.com/questions/53641324
复制相似问题