Запускать тот же макрос с другой командной кнопкой со свойствами кнопки - PullRequest
0 голосов
/ 12 декабря 2018

как подсказывает субъект, я построил макрос, который будет нуждаться в переменном вводе

Sub GetFile(Account as String)

В настоящее время я устанавливаю несколько подпрограмм для вызова сценария и назначения их различным командным кнопкам

Sub AC1_File
Call GetFile("Account1")
end sub

Sub AC2_File
Call GetFile("Account2")
end sub

и список можно продолжить

Я пытаюсь не делать свой код слишком длинным (так как я получил учетные записи из двух цифр), могу ли я получить код для свойств свойства кнопки команды и использовать его?вместо аккаунта 1,2,3 ...?

что-то вроде ниже?

Call GetFile(triggering-commandbutton.name)

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Элементы управления формой

В обычном модуле добавьте процедуру без аргументов:

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.

0 голосов
/ 12 декабря 2018

Вы можете создать множество командных кнопок в качестве контроллера ActiveX, а затем написать VBA, как показано ниже:

Private Sub CommandButton1_Click()
    Call GetFile("Account1")
End Sub

Private Sub CommandButton2_Click()
    Call GetFile("Account2")
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...