Есть ли способ определения сочетания клавиш (например, Ctrl-Y) для запуска суб / макроса VBA, когда окно VBE активно? - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь автоматизировать некоторые этапы разработки с помощью кода VBA и хочу запустить эти макросы с помощью сочетания клавиш, когда окно VBE активно / находится сверху. Есть ли способ сделать это? Диалоговое окно «Макрос» в VBE не предлагает кнопку «Параметры», которая позволяет определять горячие клавиши в самом Excel. Я также не нашел способ решить мою проблему с помощью настройки панели инструментов VBE.

Ответы [ 3 ]

0 голосов
/ 28 марта 2019

Вы не можете определить сочетания клавиш в VBE.
Пока ваша подпрограмма не получает параметров:

  • поместите курсор в подпрограмму и нажмите F5
  • , чтобы поставитьнаведите курсор на любую подпрограмму и нажмите F5 - вы получите список подпрограмм, которые вы можете запустить
  • Введите имя подпрограммы в ближайшем окне (Ctrl + G) и нажмите Enter

Если ваша подпрограмма ожидает какой-либо параметр (даже если он является необязательным), работает только метод с непосредственным окном.Но вы можете написать короткую процедуру-обертку, которая вызывает подпрограмму, которую вы хотите вызвать.

0 голосов
/ 11 апреля 2019

Спасибо за ответы на мой вопрос. Я был в курсе вариантов, представленных там. Поскольку кажется, что в VBE нет реальных возможностей быстрого доступа, я наконец-то использовал пользовательское меню для доступа к коду VBA, который я хочу запустить во время сеансов VBE. Теперь у меня есть доступ ко всем из них (распределен по нескольким модулям и частично с длинными именами, похожими на описания) через один макрос (я называю DM = short для DeveloperMenu). Мне (все же) нужно запустить через окно немедленных действий.

Код ниже. Конечно, определенные пункты меню являются индивидуальными для моей среды и должны быть адаптированы.

Sub Dm(Optional dummy As Boolean)
    Call CreateAndDisplayDevelopmentPopUpMenu
End Sub

Sub CreateAndDisplayDevelopmentPopUpMenu(Optional dummy As Boolean)
    Dim menuName As String

    menuName = "Development"

    'Delete PopUp menu if it exist
    On Error Resume Next
    Application.CommandBars(menuName).Delete
    On Error GoTo 0

    'Create the PopUpmenu
    Call DevelopmentPopUpMenu(menuName)

    'Show the PopUp menu
    On Error Resume Next
    Application.CommandBars(menuName).ShowPopup
    On Error GoTo 0
End Sub


Sub DevelopmentPopUpMenu(menuName As String)
    Dim MenuItem As CommandBarPopup
    'Add PopUp menu
    With Application.CommandBars.Add(name:=menuName, position:=msoBarPopup, _
                                     MenuBar:=False, Temporary:=True)

        'First add buttons

        With .Controls.Add(type:=msoControlButton)
            .caption = "&RebuildDefs"
'            .faceId = 71
            .OnAction = "'" & ThisWorkbook.name & "'!" & "'RebuildAllDefs ""True""'"
        End With

        With .Controls.Add(type:=msoControlButton)
            .caption = "&ToggleAddIn"
'            .faceId = 71
            .OnAction = "'" & ThisWorkbook.name & "'!" & "ToggleAddIn"
        End With

        'Second menues
        Set MenuItem = .Controls.Add(type:=msoControlPopup)
        With MenuItem
            .caption = "&Watch"

            With .Controls.Add(type:=msoControlButton)
                .caption = "&Start watch"
'                .faceId = 71
                .OnAction = "'" & ThisWorkbook.name & "'!" & "startWatch"
            End With

            With .Controls.Add(type:=msoControlButton)
                .caption = "&End watch"
'                .faceId = 72
                .OnAction = "'" & ThisWorkbook.name & "'!" & "DeleteAllwatches"
            End With
        End With

        Set MenuItem = .Controls.Add(type:=msoControlPopup)
        With MenuItem
            .caption = "&HeartBeat"

            With .Controls.Add(type:=msoControlButton)
                .caption = "&Start HeartBeat"
'                .faceId = 71
                .OnAction = "'" & ThisWorkbook.name & "'!" & "heartBeat"
            End With

            With .Controls.Add(type:=msoControlButton)
                .caption = "St&op HeartBeat"
'                .faceId = 72
                .OnAction = "'" & ThisWorkbook.name & "'!" & "stopHeartBeat"
            End With
        End With

    End With
End Sub
0 голосов
/ 28 марта 2019

Клавиша F5 - это ярлык для запуска этого.Это можно увидеть, наведя указатель мыши на параметр «продолжить» на панели инструментов, и появится всплывающее диалоговое окно.

...