Элементы управления формой
В обычном модуле добавьте процедуру без аргументов:
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
Если вы используете элементы управления ActiveX, вы можете использовать класс для захвата события щелчка.
Создайте модуль класса и назовите его 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
.