【问题标题】:vba Troubleshooting using VBProject.VBComponents to call macrovba疑难解答使用VBProject.VBComponents调用宏
【发布时间】:2019-07-19 12:46:50
【问题描述】:

我希望能够将字符串传递给函数并让它调用宏名称 = 传递的字符串的宏。

我使用 Excel 16 进行操作,启用了对象库和可扩展性引用,并启用了必要的信任中心设置。在下面找到我的代码:

Dim b As Object
Set b=Workbooks("PERSONAL.XLSB").VBProject.VBComponents(macroNameString)
Call b

代码在“调用 b”时因错误而停止,并出现“错误 438:对象不支持此属性或方法”。请告知您将如何解决此问题。谢谢!

【问题讨论】:

  • 尝试使用Application.Run 而不是Call。更多信息:stackoverflow.com/questions/15969796/…
  • @JustynaMK 感谢您的意见。 Application.Run 产生同样的错误。
  • 对不起,我忘了补充一点 Call 只能在从同一个工作簿运行时使用,要从另一个工作簿运行它,您需要使用 Application.Run。不知道如何将它与您的 b 参数结合起来,因为它现在是 - 我会亲自将 b 的数据类型更改为 String 并将其值设置为 b="PERSONAL.XLSB!macroNameString"
  • 根据 Shai Rado 的回答,我已经取消了前两行代码。现在我正在使用Application.Run "'PERSONAL.xlsb'!" & macroNameString,它仍然会抛出一个错误,尽管是一个不同的错误(1004)。
  • @JustynaMK 感谢您的所有帮助。我重新启动了 Excel,Shai 的解决方案有效(耸了耸肩)。我猜有时也适用于 Office 的整个“你是否将其关闭再打开”...

标签: excel vba


【解决方案1】:

正确使用的语法是:

Application.Run "'PERSONAL.xlsb'!" & macroNameString

其中macroNameString 是您要运行的Sub 的名称(而不是它所在的Module)。

【讨论】:

  • 感谢您的意见。此代码返回“运行时错误 '1004':无法运行宏 ''Personal.xlsb'!nameISent'。此工作簿中可能没有该宏,或者所有宏都可能被禁用。”作为参考,我正在处理的这个宏/函数以及我正在调用的宏/函数都是从 PERSONAL.xlsb 运行的,宏已启用,子和模块的名称相同,并且手动运行宏.
  • @questioner1001 你能把剩下的代码贴出来吗?相关部分?
  • @questioner1001 尝试更改 Sub 的名称(不要与 Module 相同)
  • 感谢您的持续帮助。我更改了潜艇的名称。 Application.Run "'PERSONAL.xlsb'!" & ModuleName 导致相同的 1004 错误,其中 ModuleName 是模块的名称。 Application.Run "'PERSONAL.xlsb'!" & macroNameString 使用 macroNameString 作为子名称会导致标准的“查看宏”列表弹出并提示您选择并运行。这个函数的重点是跳过这一步。这个输出让我相信,要么使用 Sub 名称需要增加特异性作为 VBA 的输入,要么使用 Module 名称是正确的(但存在一些潜在问题)
  • 感谢您的帮助!我重新启动了 Excel,并且您原始答案中的代码行有效。哎呀。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多