【发布时间】:2020-02-05 21:13:22
【问题描述】:
我想使用 Application.Run() 命令运行集成的 VBA 函数,例如 VBA.RGB()。此方法存储在 C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL
根据这篇 Microsoft 文章,使用 Application.run 运行存储在 DLL 中的方法应该是可行的:https://docs.microsoft.com/en-us/office/vba/api/Excel.Application.Run
但是我究竟该怎么做呢?下面的代码行都不起作用。
Sub RunFunction()
Dim ExampleValue As Variant
ExampleValue = Application.Run("RGB", 1, 1, 1)
ExampleValue = Application.Run("C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL!RGB", 1, 1, 1)
ExampleValue = Application.Run("VBE7.DLL!RGB", 1, 1, 1)
ExampleValue = Application.Run("VBE7!RGB", 1, 1, 1)
End Sub
我想避免将所有这些标准函数包装到一些模块函数中。
编辑 - 进一步说明我的问题:
最后,我想创建一个类似于 CallByName 的函数,该函数能够从作为字符串给出的函数名称运行集成的 VBA 函数。 CallByName 需要一个对象来调用方法或属性。示例:CallByName Workbooks, "Add", VbMethod 您不能以这种方式调用 VBA 方法。 CallByName VBA, "RGB", VbMethod, 1, 1, 1 不起作用。
【问题讨论】:
-
您想说.dll 中确实存在方法“RGB”吗?您是否创建了对该特定 .dll 的引用?
-
好吧,在查看对象目录时,您会看到 VBA 库存储在上述路径中。 RGB 函数是这个库的一部分。我不确定是否需要以特殊方式引用该 DLL,因为它是默认 DLL,在创建新 VBA 项目时总是会被引用。
-
你必须在讨论中引用.dll(必须有公共方法),然后你必须声明一个变量来指向dll:
Dim x As New Your_Dll。然后使用ExampleValue = x.RGB。假设这样的方法,返回的东西存在于那个特定的 dll 中。 -
这个 .dll 是
Visual Basic for Applications,确实... -
试图声明像
Dim V as VBA这样的变量不起作用,因为“VBA”不是实际的数据类型。但也许我误会了你?否则,我如何将变量声明为 DLL?我可以使用private declare function ... lib ...添加该DLL 中的每个函数,但这毫无意义,因为这些函数在默认情况下无论如何都是可用的。此外,我可以将所有这些函数包装成自己编写的模块函数,但这是我想避免的。