我想在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,但对我的情况没有帮助。有什么主意吗?
答案 0 :(得分:0)
为什么不呢?
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
答案 1 :(得分:0)
Function PropDotVal(wObjName$, PropNa$)
将wObj设为对象:设置wObj = ObjFromStr(wObjName)
'ObjFromStr在类似行的模块中 '必须有一个内置的vba函数,不需要很多case函数 'str对象 'Case“ sTable”:设置ObjFromStr = sTable'ShapePlus “案例“ WHCages”:设置ObjFromStr = WHCages'spt
Dim Si%,NaA $() PropDotVal =“ NA” 出现错误时GoTo不可用 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
如果结束
PropDotVal = CallByName(wObj,NaA(Si),VbGet) 不可用:
结束功能
enter code here