2014-05-09 45 views
0

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

+0

您可以添加一个标识它的参数。 –

+3

如果您单击工作表上的某个按钮,它将始终是活动工作表。所以代码就像'MsgBox ActiveSheet.Name' – tigeravatar

+2

作为一种替代方法(如果你在同一张表上有多个按钮,这个选项很有用),你可以看一下'Application.Caller',它返回被点击的按钮的名称:如果您唯一地命名按钮,则可以确定如何处理呼叫。 –

回答

3

确认这是在每一个VBA模块的顶部:

Option Explicit 

然后改变这:

Sub Output() 

这样:

Sub Output(strSource as String) 

您所添加的参数Sub。现在你的代码将无法编译。 (如果您不知道这部分,请参阅帮助。)

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

其中每个呼叫Output,将其更改为Output("ThisPlace")。对于这个地方,插入一个唯一的名称作为标识符。

现在按钮的标识方式可以从Sub中抓取。

3

一种方法,你可以使用(如果你有在同一张纸上都调用同一个程序的多个按钮特别有用)是看的

Application.Caller 

你叫子的价值。这将返回被点击的按钮的名称:如果您唯一命名按钮,则可以确定如何处理该呼叫。

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

'TestSub "Hello", 2' 

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

+0

在http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx上提供了很好的解释(向下滚动1/3) – Smandoli