首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多级属性的CallByName

具有多级属性的CallByName
EN

Stack Overflow用户
提问于 2018-12-06 05:53:17
回答 2查看 51关注 0票数 1

我想在VBA中使用CallByName从这样的网页中读取特定的数据。这些网页具有不同的html结构。在我的例子中,有一个元素,我需要引用2个或3个父节点,并获得一个带有或标记的元素。请参阅代码:

元素添加到所有我命名为MyElem的网页中

在一个网页中,我需要这样的代码:

代码语言:javascript
复制
MsgBox MyElem.parentElement.parentElement.parentElement.getelementsbytagname("tr")(3).innertext

在另一个网页上,我需要这样的代码:

代码语言:javascript
复制
MsgBox MyElem.parentElement.parentElement.getelementsbytagname("div")(2).innertext

以此类推。

我想用VBA编写,如下所示:

代码语言:javascript
复制
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,但它对我的情况没有帮助。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-12-06 06:42:00

为什么不是这个呢?

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2020-10-27 09:16:18

代码语言:javascript
复制
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,则

代码语言:javascript
复制
  ' 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函数

代码语言:javascript
复制
enter code here
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53641324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档