【问题标题】:Run basic VBA functions with Application.Run使用 Application.Run 运行基本的 VBA 函数
【发布时间】: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 中的每个函数,但这毫无意义,因为这些函数在默认情况下无论如何都是可用的。此外,我可以将所有这些函数包装成自己编写的模块函数,但这是我想避免的。

标签: excel vba


【解决方案1】:

所以,讨论中的 .dll 是 VBA,您可以简单地使用:

Dim testC As Color
   testC = RGB(1, 1, 1)

【讨论】:

  • 这不是我的问题的重点......在一天结束时,我想创建一个类似 CallByName 的函数,该函数能够从给定的函数名称运行集成的 VBA 函数一个字符串。 CallByName 需要一个对象来调用方法或属性。示例:CallByName Workbooks, "Add", VbMethod 您不能以这种方式调用 VBA 方法。 CallByName VBA, "RGB", VbMethod, 1, 1, 1 不起作用。
  • @GuidoT:我无法从你的问题中理解这一点......我不确定是否有可能。我使用CallByName 仅用于调用以字符串表示的控件方法/事件...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
相关资源
最近更新 更多