我正在使用Microsoft VBA进行编程。首先,我需要在宏的帮助下生成一个QueryTable(我已经得到了代码),然后在宏的帮助下,我需要应用使用QueryTable中数据的公式。我面临的问题是QueryTable只出现在其代码已经完成工作的Sub之后。这意味着我不能包含生成公式的代码,因为没有数据可以生成公式。
现在的想法是编写一个运行其他模块的模块:
Sub moduleController()
Run "Module1"
Run "Module2"
End Sub
这给出了错误:
运行时错误1004 - 无法运行宏“macroname”。宏可能在此工作簿中不可用,或者可能禁用所有宏。
可能是什么解决方案?也许我的QueryTable加载问题还有另一种解决方案吗?
答案 0 :(得分:17)
只要有问题的宏位于同一工作簿中并验证名称是否存在,就可以按名称而不是模块从任何其他模块调用这些宏。
因此,如果在Module1中有两个宏Macro1和Macro2,而在Module2中你有Macro3和Macro4,那么在另一个宏中你可以全部调用它们:
Sub MasterMacro()
Call Macro1
Call Macro2
Call Macro3
Call Macro4
End Sub
答案 1 :(得分:3)
“Module1”是否包含“moduleController”的同一工作簿?
如果没有,您可以使用Application.Run someWorkbook.xlsm!methodOfModule
调用公共方法“Module1”。
答案 2 :(得分:1)
感谢Artiso,我刚学到了新东西。我在属性框中为每个模块命名。这些名字也是我在模块中声明的名称。当我试图调用我的第二个模块时,我一直收到错误:编译错误:预期的变量或过程,而不是模块
在阅读上面关于不具有相同名称的Artiso评论之后,我重命名了我的第二个模块,从第一个模块开始调用,问题解决了。有趣的东西!感谢Artiso!
的信息如果我的经历不清楚:
模块名称:AllFSGroupsCY Public Sub AllFSGroupsCY()
模块名称:AllFSGroupsPY Public Sub AllFSGroupsPY()
来自AllFSGroupsCY()
Public Sub FSGroupsCY()
AllFSGroupsPY 'will error each time until the properties name is changed
End Sub