【问题标题】:Which command button called a sub?哪个命令按钮称为子?
【发布时间】:2014-05-09 19:02:51
【问题描述】:

我在同一个工作簿的许多工作表上都有相同的命令按钮,称为“输出”。所有按钮在模块 ModMain 中调用相同的“sub Output()”。我需要知道命令调用来自哪个工作表?

【问题讨论】:

  • 你可以添加一个参数来标识它。
  • 如果您单击工作表上的按钮,那么它将始终是活动工作表。所以代码类似于MsgBox ActiveSheet.Name
  • 作为替代方案(如果您在同一张工作表上有多个按钮,这很有用)您可以查看Application.Caller,它返回被点击的按钮的名称:如果您唯一地命名您的按钮,您可以然后确定如何处理呼叫。
  • 蒂姆·威廉姆斯,这就是我想要的!谢谢!我将所有按钮重命名为其选项卡的名称,现在我知道命令来自哪里,我可以使用它来告诉程序使用 for/ 找到哪个图片(图片也以它们所在的选项卡命名)工作表形状的下一个循环并将其复制到输出工作表。
  • 还值得注意的是(使用工作表上的表单按钮)您可以通过“onAction”设置传递参数,因此如果您在“宏名称”文本框中输入(例如)'TestSub "Hello", 2'(包括单引号)将调用 TestSub 并将 "Hello"2 作为参数传递。

标签: vba excel


【解决方案1】:

您可以使用的一种方法(如果您在同一张表上有多个按钮都调用相同的过程,则特别有用)是查看

的值
Application.Caller

在你调用的 Sub.这将返回被单击的按钮的名称:如果您唯一地命名您的按钮,那么您可以确定如何处理呼叫。

还值得注意的是(使用工作表上的表单按钮)您可以通过“onAction”设置传递参数,因此如果您输入(例如)

'TestSub "Hello", 2' 

进入将调用 TestSub 并将“Hello”和 2 作为参数传递的“宏名称”文本框(包括单引号)。

【讨论】:

【解决方案2】:

确保它位于每个 VBA 模块的顶部:

Option Explicit

然后改变这个:

Sub Output()

到这里:

Sub Output(strSource as String)

您已向Sub 添加了一个参数。现在您的代码将无法编译。 (不了解这部分的可以参考帮助。)

修复代码以便编译。 VBA 编辑器将引导您到每个位置。这些位置将是您的“所有相同”按钮的 VBA 程序。

每个调用Output的地方,改成Output("ThisPlace")。对于这个地方,插入一个唯一的名称作为标识符。

现在,您可以从Sub 中抓取该按钮。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2020-04-20
    • 2015-05-26
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多