正如主题所暗示的,我已经建立了一个需要输入变量的宏
Sub GetFile(Account as String)
当前,我正在设置多个子菜单来调用脚本并将它们分配给不同的命令按钮
Sub AC1_File
Call GetFile("Account1")
end sub
Sub AC2_File
Call GetFile("Account2")
end sub
列表继续
我正在尝试不让我的代码过长(因为我拥有两位数的帐户), 我的代码能否获取命令按钮名称的属性并使用它代替Account1,2,3 ...?
像下面这样吗?
Call GetFile(triggering-commandbutton.name)
答案 0 :(得分:3)
在普通模块中,添加一个不带参数的过程:
Public Sub Button_Click()
GetFile Application.Caller
End Sub
此代码将获取按钮名称,并将其传递给GetFile
过程。
Sub GetFile(Account As String)
MsgBox "Account Name is " & Account
End Sub
因此,现在您要做的就是将按钮命名为 Account1 , Account2 等。
如果您使用的是ActiveX控件,则可以使用一个类来捕获click事件。
创建一个类模块并将其命名为clsButtonClick
。
将此代码添加到类模块:
Public WithEvents AccountBtn As MSForms.CommandButton
Private Sub AccountBtn_Click()
MsgBox AccountBtn.Name & " on " & AccountBtn.Parent.Name
GetFile AccountBtn.Name
End Sub
在普通模块的顶部添加以下行:
Public colBtns As New Collection
并将此代码添加到模块中:
Public Sub Initialize_Buttons()
Dim wrkSht As Worksheet
Dim btnEvnt As clsButtonClick
Dim obj As OLEObject
For Each wrkSht In ThisWorkbook.Worksheets
For Each obj In wrkSht.OLEObjects
If TypeName(obj.Object) = "CommandButton" Then
Set btnEvnt = New clsButtonClick
Set btnEvnt.AccountBtn = obj.Object
colBtns.Add btnEvnt
End If
Next obj
Next wrkSht
End Sub
这将遍历工作簿中的每个工作表,并为所有ActiveX命令按钮提供类模块中的click事件。
如果需要将Initialize_Buttons
过程限制为特定的工作表或工作表上的特定按钮,请更新此过程。
最后在Initialize_Buttons
模块的Workbook_Open
事件中调用ThisWorkbook
代码。
答案 1 :(得分:0)
您可以创建许多命令按钮作为ActiveX控制器,然后按如下所示编写VBA:
Private Sub CommandButton1_Click()
Call GetFile("Account1")
End Sub
Private Sub CommandButton2_Click()
Call GetFile("Account2")
End Sub