具有多个属性级别的CallByName

时间:2018-12-05 21:53:17

标签: html vba callbyname

我想在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,但对我的情况没有帮助。有什么主意吗?

2 个答案:

答案 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