从 VBA IDE 运行 VBA 例程?

Posted

技术标签:

【中文标题】从 VBA IDE 运行 VBA 例程?【英文标题】:Run a VBA routine from VBA IDE? 【发布时间】:2021-12-21 20:43:11 【问题描述】:

我想从 VBA 项目中获取例程列表,然后运行用户选择的宏。

下图显示了原生的“宏”框。我想将此功能扩展到跨多个文档的多个宏。

我发现这个link 解决了问题的第一部分。现在我有了列表,如何按名称运行选定的例程?

【问题讨论】:

Application.Run? 哦,有趣。这看起来像一个 Excel 的东西,我正在 Autodesk Inventor 中编写,但我已经添加了 excel 库,所以它有点工作。但是 - Application.Run 似乎适用于函数,但不适用于子例程......有什么建议吗? 它可以运行 Sub(至少在 excel 中),但我不确定是否在 Autodesk Inventor 中使用。 否 - Application.Run "TestSub" 导致运行时错误 1004(宏不可用) 我认为它不起作用,因为宏不在 Excel 实例中,所以很遗憾,这不适用于您的情况。 【参考方案1】:

您好,欢迎来到 SO

以下是如何使用代码执行 VBA 宏的代码示例。您需要添加一些表单来选择要执行的文档和宏。这取决于您的实现。


Sub RunMacroUsingCode()
    Dim vbaProjectName As String
    vbaProjectName = "InventorVBA"
    
    Dim vbaModuleName As String
    vbaModuleName = "m_Tests"
    
    Dim vbaMacroName As String
    vbaMacroName = "RunMultipleMacrosTestCall"
    
    Dim vbaProject As InventorVBAProject
    For Each vbaProject In ThisApplication.VBAProjects
        If vbaProject.name = vbaProjectName Then Exit For
    Next
    
    Dim vbaModule As InventorVBAComponent
    For Each vbaModule In vbaProject.InventorVBAComponents
        If vbaModule.name = vbaModuleName Then Exit For
    Next
    
    'Using result is optional
    Dim result As Variant
    Call vbaModule.InventorVBAMembers(vbaMacroName).Execute(result)
    
End Sub

Function RunMultipleMacrosTestCall()
    Call MsgBox("TEST")
    RunMultipleMacrosTestCall = True
End Function

【讨论】:

太完美了——谢谢!

以上是关于从 VBA IDE 运行 VBA 例程?的主要内容,如果未能解决你的问题,请参考以下文章

从 VBA 中的另一个子例程中抑制 MsgBox

从 VBA 中的不同模块调用子例程

如何让 VBA 子例程调用将数组传递给子例程中的另一个函数的函数

使用函数获取变量的值(将变量从函数传递到子例程)[重复]

在子例程中保留 VBA 函数值

VBA筛选和复制-较短的例程?