【问题标题】:Run macros assigned to many Excel sheets of a workbook with one click一键运行分配给工作簿的多个 Excel 工作表的宏
【发布时间】:2015-03-26 03:19:56
【问题描述】:

我有一本包含 8 个工作表的工作簿。
我为每个工作表分配了一个宏。
我想一键从一个工作表中运行所有 8 个宏(通过单击一个按钮,运行所有 8 个宏)。
如何执行此操作?

更新这是我的代码

Sub cf1()
Application.Run "v1"
Application.Run "a1"
Application.Run "t1"
Application.Run "p1"
Application.Run "k1"
Application.Run "k2"
Application.Run "k3"
Application.Run "m1"
End Sub


Sub v1()

End Sub

.
.
.

Sub m1()

End sub

【问题讨论】:

    标签: vba excel outlook


    【解决方案1】:

    创建一个运行所有宏的新 Sub 并将其分配给 Form Control Button
    类似这样的:

    Sub RunAll()
        Application.Run "MacroForSheet1"
        Application.Run "MacroForSheet2"
        .
        .
        Application.Run "MacroForSheet8"
    End Sub
    

    字符串参数是宏的macro namesub procedure name
    我使用Application.Run Method,这样你就可以调用所有的宏,无论你在哪里写它们。
    如果你用Module写它们,你也可以像这样显式:

    Application.Run "Module1.MacroForSheet1"
    

    如果您将它们写在Sheet 中,那么您可以像这样明确表示:

    Application.Run "Sheet1.MacroForSheet1"
    

    其中Sheet1 是在属性窗口中看到的对象代号。
    如果这对您不起作用,请澄清并为您的问题添加上下文。

    Edit1:如果你把它写在Thisworkbook对象中,那么你应该这样做:

    Application.Run "Thisworkbook.MacroForSheet1"
    

    或者在你的情况下,

    Application.Run "v1"
    

    并将其放入Module。通过 VBE > 插入 > 模块插入它。
    顺便说一句,你可以像@thienkhoi tran 发布的那样做。
    这也适用于您的情况。
    我建议Application.Run 这样你就可以在任何位置运行宏,PublicPrivate

    【讨论】:

    • 我按照你的建议做了我得到以下错误 Run Time Error 1004 'Application Defined or Object Defined Error'
    • @Adrian 什么错误和什么行?你在哪里写你的宏?模块,表?他们是公开的吗?
    • @Adrian 酷!不要全部发布,只发布其中重要的sn-p。顺便说一句,请回答我之前的问题。
    • @Adrian Ok 发布示例代码。我怀疑它是事件驱动的?
    • @Adrian Nah,我很好。我发布了一个编辑。同样,您需要在 Module 中编写 cf1 宏。
    【解决方案2】:

    您必须创建一个子程序才能运行所有宏子程序。 你有:

    Sub macro1()   
       // code 1
    End Sub
    Sub macro2()   
       // code 2
    End Sub
    Sub macro3()   
       // code 3
    End Sub
    

    你应该创建一个宏:

    Sub totalMcr()
      macro1
      macro2
      macro3
    End Sub
    

    并且只对所有宏运行 totalMcr()。
    对于自定义 UI(ribon 按钮或上下文菜单...),您可以使用工具 Office 自定义 UI 编辑器

    【讨论】:

    • 你应该只使用 v1 而不是 Application.Run "v1"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2022-11-09
    相关资源
    最近更新 更多