如何在VBA中将字符串计算为对象?

时间:2009-11-16 22:59:07

标签: excel vba excel-vba

在我之前的问题How do I assign a value to a property where the property name is supplied at runtime in VBA?中,我学会了使用CallByName在运行时在类中设置属性。

但是,这一次,我试图弄清楚如何从字符串中获取运行时的对象。

例如,假设我有一个包含以下数据的字符串:Worksheets("RAW DATA").Range("A1").QueryTable

以下数据是下面strParam的输入,我可能会尝试这样做:

Function GetObject(strParam As String) As Object
    GetObject = SomeFunction(strParam)
End Function

在这种情况下,GetObject应在针对Worksheets("RAW DATA").Range("A1").QueryTable进行评估时返回QueryTable。 VBA中有什么可以取代上面例子中的SomeFunction吗?

3 个答案:

答案 0 :(得分:3)

Active Scripting Engine可以为您提供帮助。实例化ScriptControl ActiveX,使用.AddObject()方法将对Excel Application对象的引用添加到脚本控件的执行环境中,将第三个参数设置为True以使所有Application成为.Eval()我的成员也可以访问。然后只需使用Application方法来评估任何属性或方法,即Worksheets()的成员。以下示例显示了Sub TestQueryTable() Dim objQueryTable As QueryTable Dim strEvalContent As String strEvalContent = "Worksheets(""RAW DATA"").Range(""A1"").QueryTable" Set objQueryTable = EvalObject(strEvalContent) objQueryTable.Refresh MsgBox objQueryTable.Connection End Sub Function EvalObject(strEvalContent As String) As Object With CreateObject("ScriptControl") .Language = "VBScript" .AddObject "app", Application, True Set EvalObject = .Eval(strEvalContent) End With End Function 属性的评估:

ScriptControl

如果您使用的是64位Office,this answer可能会帮助您class JsonTable(models.Model): data = JSONField() type = models.IntegerField() 工作。

答案 1 :(得分:1)

这次你运气不好。没有相当于eval的VBA(不管是在Excel中......还是在Access VBA中)。

(Application.Evaluate()将字符串计算为Excel表达式,而不是VBA代码。)

答案 2 :(得分:-1)

有“评估”方法(或[]括号)。我认为它不会完全符合您的预期 - 就像在字符串中找到的运行VBA代码一样。您可以在VBA帮助菜单中查找。