Excel 如何从按钮调用宏并传递参数

Excel 如何从按钮调用宏并传递参数,excel,vba,Excel,Vba,我想在excel工作表中添加一个按钮,该按钮应该调用一个可以处理一个变量(整数值)的宏。遗憾的是,在创建按钮时,我无法链接任何具有参数的宏。此外,仅键入宏和参数也不起作用 按下按钮时,有没有简单的解决方案可以将参数传递给宏?使用activeX控件命令按钮,在按钮单击方法中,调用sub并传递参数: Sub ert() Call ert2(Cells(1,1).Value) End Sub Private Sub CommandButton_Click() Dim x as Integer

我想在excel工作表中添加一个按钮,该按钮应该调用一个可以处理一个变量(整数值)的宏。遗憾的是,在创建按钮时,我无法链接任何具有参数的宏。此外,仅键入宏和参数也不起作用


按下按钮时,有没有简单的解决方案可以将参数传递给宏?

使用activeX控件命令按钮,在按钮单击方法中,调用sub并传递参数:

Sub ert()
Call ert2(Cells(1,1).Value)
End Sub
Private Sub CommandButton_Click()

  Dim x as Integer
  x = 1
  Call SomeSub(x)

End Sub
从工作表上的常规“表单”按钮调用,可以执行以下操作:

Sub TestMe()
    Dim c, arr
    c = Application.Caller
    arr = Split(c, "_")
    If UBound(arr) > 0 Then MsgBox "Got " & arr(1)
End Sub
其中呼叫按钮命名为(如“按钮3”

或者(更简单)右键单击按钮并输入
'TestMe2 5'
(包括单引号)


另请参见:

是,您可以将宏指定给按钮(或其他excel控件/菜单操作),并向其传递常量或变量参数

在“分配宏”窗口中(右键单击对象并选择“分配宏”):

  • 将宏名称用单引号括起来 e、 g.要传递2个常量:
    'Button1\u单击(“字符串!”,7)
  • 为“中的宏”字段选择“此工作簿”
  • 如果希望传递变量(如单元格的值),请将参数括在Evaluate()中
例如,传递
Sheet1的值$对于按钮函数,$1
,在“宏名称:”字段中有以下文本:

Button1_Click(Evaluate("Sheet1!$A$1"))
如果不使用“Evaluate”函数括起变量参数,excel将返回错误“公式太复杂,无法指定给对象”


如果在我的第一篇文章中允许的话,我可能会包含一个图像。

我用
分配按钮遇到了同样的问题,但在我意识到所有可能显示的
都只是我的
Personal.xlsb
文件中没有参数的宏之前,它并不是很有用。然后我输入了
Personal.xlsb!'生成“arg1,…”
的宏名称,然后工作表将其拾取

Personal.xlsb!'testForXXXX(“测试测试”)”

如果
宏testForXXXX
将字符串作为输入,则工作表工作正常

在excel 2007中为
按钮使用分配宏路由时,至少
testForXXXX
不会显示在潜在宏列表中(如果它使用args)


我怀疑Aaron C也被这个绊倒了。也许最好不要使用
Personal.xlsb
文件?

我的Personal.xlsb版本有问题testForXXXX(“测试”)。单击包含宏的按钮时出错

但是,我可以通过删除“(“and”)”来修复它。所以,私人的.xlsb!”testForXXXX“Test Test”有效(注意testForXXXX和“Test…”之间的空格)


事实上,我不需要Personal.xlsb!并且可以使用“testForXXXX“Test Test”。

通过按钮调用此Sub:

Public Sub TestButton(strMessage As String)
    MsgBox strMessage
End Sub

。。。请注意,子对象不会列在可用宏中,因为它有一个参数。只需在调用中键入单引号:
'TestButton“Hello”

假设您有一个如下的公共sub-take 1参数(仅用于解释目的)

在工作表上插入一个按钮,如下图所示,当您要将子项指定给此按钮时,无法找到宏名称

现在,您可以在单引号中手动键入子名称+空格+参数,如下所示,单击“确定”

然后你们看,问题解决了


我本想评论QA Collective的答案,但我还没有足够的信誉点。以前的解决方案不适用于我,因为我的宏位于VBA项目的命名模块中

对于Excel 2013,使用在我的上下文中工作的按钮将参数传递给宏的方法是:

“。”
e、 g

'DataProcessor.disle“myText”'

(作为参数传递时,布尔值不需要双引号)
请注意,整个表达式周围都是单引号。

您实际上可以键入包含在单引号中的宏名称和参数(例如
'macro 5'
),但如果您的文件是.xlsb格式的,请不要使用此方法。我尝试过您的方法,但无法使其工作。如果函数或宏接收参数,则不允许将其作为指定的宏。将宏名称括起来对我有用:我将宏名称设置为“选择1,2”作为按钮,它正确地调用了我的
选择方法。谢谢!此解决方案适用于传递单个参数-如果有多个参数怎么办?对于多个参数,请重复“评估(…)”组件:“按钮1\u单击(评估(“Sheet1!$a$1”)、评估(“Sheet1!$a$1”)、…)”括号
'Button1\u点击“一个字符串!”,7'
有效,
'Button1\u点击(“一个字符串!”,7)
无效。这绝对应该是答案。OP正在寻找如何通过“分配宏”屏幕而不是代码来完成此操作。还想指出,如果您的箭头键无法添加引号,您仍然可以使用鼠标将光标移动到正确的位置。
Public Sub TestButton(strMessage As String)
    MsgBox strMessage
End Sub
'DataProcessor.editWSProcess True'