在单元格中build立方法命令并在vba中运行它

我有以下命令运行正确,如果放在一个macros在vba中:

Set elements = doc.getElementsByClassName("media-body") 

我尝试在从单元内获取信息的同时运行此命令。 因此我放置

 doc.getElementsByClassName("media-body") 

在单元格D5,但是当我运行: Set elements = evaluate("Range(""D5"")" )它会引发错误(运行时错误'424':对象需要。

有没有办法解决它?

不,没有办法解决这个问题。 Excel.Application.Evaluate仅适用于Excel对象的子集。 从文档 :

备注

这种方法可以使用Microsoft Excel中的以下types的名称:

公式。 A1式参考。 您可以使用对A1风格表示法的单个单元格的任何引用。 所有参考文献都被认为是绝对参考文献。

范围。 您可以使用范围,相交和联合运算符(分别为冒号,空格和逗号)和引用。 定义的名字。 您可以用macros的语言指定任何名称。

外部参考。 你可以用! 运算符来引用一个单元格或另一个工作簿中定义的名称? 例如Evaluate(“[BOOK1.XLS] Sheet1!A1”)。

图表对象。 您可以指定任何图表对象名称,例如“图例”,“绘图区域”或“系列1”,以访问该对象的属性和方法。 例如,Charts(“Chart1”)。Evaluate(“Legend”)。Font.Name返回图例中使用的字体的名称。

您得到错误424的原因是因为doc是您尝试从单元格运行的代码中的对象引用。 Evaluate不知道doc 什么,因为没有办法将其设置为单元格内的实例。

对问题中的单元格内容做任何有意义的唯一方法是parsing单元中的代码,并基本上通过VBA-VBA解释器运行它。

编辑

如果我正确地理解了你之后的内容(请参阅评论),那么您真正喜欢的是一种基于名称和types来一般searchHTML元素的方法。 我会通过select如何基于types参数search元素名称来解决这个问题。 下面的例子假定目标单元格(在sourceRowsourceCol )包含元素名称,即“media-body”,右边的单元格包含它的types,即“ClassName”。

 Public Function GetElement(targetSheet As Worksheet, doc As HTMLDocument, _ sourceRow As Long, sourceCol As Long) As IHTMLElement With targetSheet 'Get the element name from the passed cell. Dim elementName As String elementName = .Cells(sourceRow, sourceCol) 'Get the element type from the adjacent cell. Dim elementType As String elementType = .Cells(sourceRow, sourceCol + 1) Select Case elementType Case "ClassName" Set GetElement = doc.getElementsByClassName(elementName) Case "Id" Set GetElement = doc.getElementById(elementName) Case "Name" Set GetElement = doc.getElementsByName(elementName) '... End Select End With End Function 

在单个单元格中使用逗号分隔的string就可以轻松实现这一点,比如“media-body,ClassName”或者其他几种方法,但这是我所要做的。

replace你的:

 Set elements = evaluate("Range(""D5"")") 

附:

 Set elements = Evaluate("D5")