1

我想在 VBA 中使用 CallByName 从此类网页中读取特定数据。这些网页具有不同的 html 结构。就我而言,有一个元素需要引用 2 或 3 个父节点并获取带有 or 标记的元素。见代码:

我命名的所有网页中的元素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 不支持多级属性。我在这里阅读了类似的主题,但这对我的情况没有帮助。有什么想法吗?

4

2 回答 2

1

为什么不是这个?

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
于 2018-12-05T22:41:59.773 回答
0
Function PropDotVal(wObjName$, PropNa$)

将 wObj 调暗为对象:设置 wObj = ObjFromStr(wObjName)

' 模块中的 ObjFromStr 具有类似的行 ' 必须有一个不需要很多案例函数的内置 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

万一

PropDotVal = CallByName(wObj, NaA(Si), VbGet) 不可用:

结束功能

enter code here
于 2020-10-27T01:16:18.487 回答