Запустить макрос VBA с аргументами, нажав кнопку Command в пользовательской форме

У меня есть пользовательская форма DataInput в том же проекте VBA, что и модуль RunOB. Они находятся в проекте Excel Benchmarking.xlsx. У меня есть командная кнопка в форме DataInput, в которой я хочу, чтобы модуль RunOB запускался при нажатии. Кроме того, я передаю аргументы String из формы в модуль.

'Header of 'Run OB' Module
Sub OrganizeBenchmarks(bidNum As String, name As String, _
                       state As String, year As String, category As String)

Метод нажатия кнопки:

Private Sub CommandButton1_Click()
    '...'
End Sub

Если возможно, было бы также полезно настроить сочетание клавиш для открытия пользовательской формы DataInput во время работы над проектом Excel.


person Grant Meehan    schedule 16.08.2018    source источник
comment
в Workbook_Open поставьте что-то вроде Application.OnKey "^+{LEFT}", "OrganizeBenchmarks" - this is to use Ctrl-Shift-LeftArrow; и в Workbook_BeforeClose поставьте Application.OnKey "^+{LEFT}", чтобы отключить его   -  person Guest    schedule 16.08.2018
comment
@Guest, если вы запускаете его с помощью сочетаний клавиш, как он разрешает входные параметры?   -  person Marcucciboy2    schedule 16.08.2018
comment
Подобно командной кнопке, вы не можете отправлять параметры на сочетание клавиш. В прошлом я всегда разрешал эту ситуацию (когда кому-то абсолютно необходимо сочетание клавиш), вызывая подпрограмму без параметров, которая вызывает подсистему с нужными вам параметрами. Затем параметры должны быть либо глобальными, либо задаваться как часть вызываемой подпрограммы. Ничто не идеально.   -  person Guest    schedule 16.08.2018
comment
@Marcucciboy2 Marcucciboy2 - если я загружаю пользовательскую форму с помощью сочетания клавиш, я планировал ввести данные в форму, а затем запустить макрос, когда я нажму кнопку отправки в форме. Данные, введенные в форму, должны разрешать входные параметры.   -  person Grant Meehan    schedule 16.08.2018
comment
@Guest - есть ли способ загрузить макрос OrganizeBenchmarks с параметрами из формы ввода данных, если вы просто выбросите часть сочетания клавиш?   -  person Grant Meehan    schedule 16.08.2018


Ответы (2)


Кажется довольно простым?

Private Sub CommandButton1_Click()
    OrganizeBenchmarks "your", "arguments", "would", "go", "here"
End Sub
person Tim Williams    schedule 17.08.2018

Кое-что для вас, чтобы помочь в разработке собственного кода .........

'Public enum type to add a set of particular vbKeys to the standard key set
Public Enum typePressKeys
    vbNoKey = 0
    vbExitTrigger = -1
    vbAnswerKey = 100
    vbLaunchKey = 102
    vbPrevious = 104
    vbNext = 106
    vbSpecialAccessKey = 108
End Enum


Public Sub OrganizeBenchmarks()
Dim stopLoop As Boolean, listOfYears As Variant, bidNum As String, name As String, state As String, year As String, category As String

'For example
listOfYears = Array(2017, 2018, 2019, 2020, 2021, 2022)

stopLoop = False
Load DataInputForm 'Assuming this is the name of your UserForm
With DataInputForm 'Assuming that this name would be an input control in your UserForm
    .yearCB.List = listOfYears 'comboboxList control
    .yearCB.ListIndex = 2
    .Tag = vbNoKey
End With
DataInputForm.Show
Do
    If DataInputForm.Tag = vbOK Then
        'I have assumed you would use these names for input controls on your UserForm
        bidNum = DataInputForm.bidNum_TextBox.Value
        name = DataInputForm.name_TextBox.Value
        state = DataInputForm.state_TextBox.Value
        year = CStr(DataInputForm.yearCB.Value)
        category = DataInputForm.category_TextBox.Value
        Unload DataInputForm
        stopLoop = True
    ElseIf DataInputForm.Tag = vbCancel Then
        Unload DataInputForm
        Exit Sub
    Else
        stopLoop = False
    End If
Loop Until stopLoop = True

'Place additional code here to take whatever actions 

End Sub
person Guest    schedule 16.08.2018