【问题标题】:Conditionally run VBA code有条件地运行 VBA 代码
【发布时间】:2017-08-15 04:52:34
【问题描述】:

是否可以有多个按钮,比如说“按钮 1”和“按钮 2”运行相同的 VBA 代码,但根据按下的按钮产生不同的结果?

例如,当我按下按钮 1 时,我希望它转到网站,加载数据并将其放到工作表 1 上。但是当我按下按钮 2 时,它会转到同一个站点并将其加载到工作表 2。

我知道我可以拥有相同 VBA 代码(具有不同名称)的多个实例,但是我希望简化代码并防止其过于复杂。

【问题讨论】:

标签: vba excel


【解决方案1】:

如果您使用Forms 按钮,您可以分配相同的宏并使用Application.Caller 返回调用按钮的名称/ID。

Sub Test()
MsgBox Application.Caller & " was pressed"
End Sub

【讨论】:

    【解决方案2】:

    创建一个 sub 来完成这项工作并将工作表名称作为参数传递给该 sub。我是用字符串变量来做的,但你也可以用工作表变量来做。

       Sub Button1_Click()
    
          LoadWebsiteToSheet "Sheet1"
    
       End Sub
    
       Sub Button2_Click()
    
          LoadWebsiteToSheet "Sheet2"
    
       End Sub
    
       Sub LoadWebsiteToSheet(sName as String) 
    
            '... code to load website to Worksheets(sName)
    
       End Sub
    

    【讨论】:

    • 我收到一条错误消息,指出“未定义子或函数”我复制并粘贴了您提供的代码,更改了命名,即 Button1/Button2 为 Weel1/Week2。
    • @user1664305 查看我的编辑。我忘记了最后一部分的名字的一部分。另外,在我有评论的地方添加你的代码。
    • 对不起,我没有看到那个编辑!试了一下,它就像一个魅力!感谢您的帮助!
    • @user1664305 - 我刚刚根据您的评论进行了编辑! :) 很高兴它有效 :)
    【解决方案3】:

    我也更倾向于 brettdj 的解决方案

    如果将同一个宏分配给多个按钮,则会根据按钮名称得到不同的结果。

    您可以将按钮命名为您想要的工作表。练习这个。添加几个按钮并将此代码分配给它们。点击每个按钮看看会发生什么。

    Sub GetButtonName()
        Dim Btn As String
    
        Btn = ActiveSheet.Shapes(Application.Caller).Name
        MsgBox Btn
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多