gpt4 book ai didi

vba - 如何在 VBA 中将字符串求值为对象?

转载 作者:行者123 更新时间:2023-12-02 18:56:54 25 4
gpt4 key购买 nike

在我之前的问题中,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

在这种情况下,当针对 Worksheets("RAW DATA").Range("A1").QueryTable 进行评估时,GetObject 应返回一个 QueryTable。 。 VBA中是否有任何东西可以代替SomeFunction从上面的例子来看?

最佳答案

事件脚本引擎可以帮助您。实例化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

如果您使用的是 64 位 Office,this answer可能会帮助您让 ScriptControl 正常工作。

关于vba - 如何在 VBA 中将字符串求值为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com