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

时间:2015-04-24 21:55:15

标签: excel-vba vba excel

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

是否有任何简单的解决方案可以在按下按钮时将参数传递给宏?

9 个答案:

答案 0 :(得分:35)

是的,您可以为按钮(或其他Excel控件/菜单操作)分配宏,并将常量OR变量参数传递给它。

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

  • 将宏名称括在单引号中 例如传递2个常数:'Button1_Click("A string!", 7)'
  • 为“宏中的字段”字段选择“此工作簿”
  • 如果您希望传递变量(如单元格的值),请将参数括在Evaluate()

例如,要将Sheet1!$A$1的值传递给按钮函数,您将在“宏名称:”字段中包含以下文本:

Button1_Click(Evaluate("Sheet1!$A$1"))

如果不使用“Evaluate”函数将变量参数括起来,excel将返回错误“公式太复杂而无法分配给对象。”。

如果我的第一篇文章允许,我会包含一张图片。

答案 1 :(得分:7)

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

答案 2 :(得分:3)

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

Private Sub CommandButton_Click()

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

End Sub

答案 3 :(得分:3)

来自常规"形式"工作表上的按钮可以执行以下操作:

Sub TestMe()
    Dim c, arr
    c = Application.Caller
    arr = Split(c, "_")
    If UBound(arr) > 0 Then MsgBox "Got " & arr(1)
End Sub

调用按钮的名称(例如)" Button_3"

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

Sub TestMe2(i)
    MsgBox "Got " & i
End Sub

另请参阅:Excel 2010 - Error: Cannot run the macro SelectCell using .onAction

答案 4 :(得分:1)

我的Personal.xlsb版本遇到了问题!'testForXXXX(“测试测试”)'。单击包含宏的按钮时出现错误。

但是,我能够通过删除“(”和“)”来修复它。所以,Personal.xlsb!'testForXXXX“Test Test”'工作了(注意testForXXXX和“Test ...”之间的空间。)

事实上,我不需要Personal.xlsb!并且只能使用'testForXXXX'测试测试''。

答案 5 :(得分:1)

从按钮调用此Sub:

car_maker = car_model.maker

...请注意,Sub不会列在可用的宏中,因为它有一个参数。只需使用单引号键入来电:Public Sub TestButton(strMessage As String) MsgBox strMessage End Sub

答案 6 :(得分:1)

假设您有一个如下所示的public sub take 1参数(仅出于解释目的。)

Macro

然后在如下所示的“工作表”上插入一个按钮,并且想要将子项分配给该按钮时找不到宏名称。

Button

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

Type macro name

然后您看到了,问题解决了。

Result

答案 7 :(得分:0)

我遇到同样的问题,assign button没有用,直到我意识到显示的所有潜在macros只是我 Personal.xlsb文件中没有显示的内容参数即可。然后我输入了Personal.xlsb!'macroNameWhichTakesArguments("arg1", ...)',然后工作表就把它拿了起来。

即。 Personal.xlsb!'testForXXXX("Test Test")'

macro testForXXXX将字符串作为输入,然后表单正常工作。

当您使用button in excel 2007的分配宏路由至少testForXXXX时,如果它采用args,则不会显示在潜在宏列表中。

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

答案 8 :(得分:0)

我想评论一下QA Collective的答案,但我的信誉度还不够。以前的解决方案对我不起作用,因为我的宏位于我的VBA项目中的命名模块中。

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

'<module name>.<macro name> <parameter>'

例如

'DataProcessor.disle "myText"'

'DataProcessor.editWSProcess True'

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