繁体   English   中英

VBA通过.onAction传递参数

[英]VBA Pass arguments with .onAction

这是我的子模样:

Sub InsertRowWithContent(rowNo As Long)

这是我的.onAction:

.OnAction = "'InsertRowWithContent""" & C & """'"

C是先前声明的Long变量。

它说找不到宏。 在添加参数之前,它工作正常!

我已成功使用以下语法传递了参数:

.OnAction = "=InsertRowWithContent(" & C & ")"

注意事项:

  • C很长。 因此,请勿添加配额,就像您在代码中调用Sub一样。
  • OnAction计算表达式。 因此,根据我的经验,该表达式需要一个等号,并且就我而言,它必须是一个函数。 只有自动本地回调才是subs。

编辑

我上面的答案以Access为背景。 Djikay的答案可以在Excel中正常工作。 然而,经过一番挖掘,我很安静地确定,只是Word无法理解这些语法中的任何一种。 Word VBA无法将参数传递给OnAction语句中的子项。 至少暂时最好接受这一点。

但是以下是Word(2010)的定义:

创建命令栏和按钮。 对于OnAction ,仅传递Sub的名称。 但是,请使用按钮的Parameter属性。

' Add bar
Set cdb = Application.CommandBars.Add("SomeTest", , False, False)
cdb.Visible = True

' Add button
Set cbb = cdb.Controls.Add
cbb.Caption = "PressMe"
cbb.OnAction = "TheCallback"
cbb.Parameter = 456

然后,通过CommandBars.ActionControl.Parameter表达式访问参数:

Public Sub TheCallback()

  MsgBox "The parameter passed is: " & CommandBars.ActionControl.Parameter

End Sub

ActionControl与Access下的ActiveControl非常相似(如果不同):它是最后单击的控件。

资料来源: http : //www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_24982922.html

*** :-)

您需要在Sub名称后面添加一个空格,如下所示:

.OnAction = "'InsertRowWithContent " & C & "'"
                                  ^^^^^^^^^^

编辑

另外,由于要传递Long参数,因此不应将其用引号引起来。

编辑2

好,这需要一些特殊的调味料(代码)。 我一直在尝试,并且有以下工作要做。

在Sheet1 Excel对象中:

Option Explicit

Sub DestroyToolbar()

  Application.CommandBars("DoomBar").Delete

End Sub

Sub MakeToolbar()

  Dim C As Long
  C = 100

  With Application
    .CommandBars.Add(Name:="DoomBar").Visible = True
    With .CommandBars("DoomBar")
      .Controls.Add Type:=msoControlButton, ID:=2950, Before:=1
      With .Controls(1)
        .OnAction = "'PressMe " & C & "'"
      End With
    End With
  End With

End Sub

在新的标准代码模块中,添加以下内容:

Public Sub PressMe(C As Long)

  With Application.CommandBars("DoomBar")
    With .Controls(1)
      MsgBox "The value of C that was passed to this macro is: " & C
    End With
  End With

End Sub

如果运行MakeToolbar ,它将在“加载项”功能区中创建一个新的工具栏。 要删除它,您可以运行DestroyToolbar

工具栏到位后,单击按钮应显示一个值为C的消息框(在我的示例中为100)。

我已经在Excel 2010中测试了上述内容,并且在一个全新的.xlsm文件中可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM