Dodawanie własnych skrótów klawiszowych w menu w IDE VBA

Pisząc różne makra w VBA czasami muszę sprawdzić np. jakie wartości przechowuje dany obiekt, bądź tablica. W tym celu świetnie się sprawdza okienko Locals.

Aby włączyć to narzędzie należy z menu View wybrać polecenie Locals Window. Niestety, ale do tego polecenia nie został przypisany żaden skrót klawiszowy, nad czym bardzo ubolewam. Customizacja paska narzędzi/menu nie pozwala na zmiany/przypisywanie skrótów klawiszowych. No i w tym momencie zaświeciła mi się w głowie pewna lampka: a może być tak skorzystać z programu Resource Hacker?

Trzeba będzie jedynie nieco zmodyfikować plik odpowiedzialny za IDE edytora VBA. Tylko jaki to jest plik? Metodą prób i błędów wydedukowałem, że za IDE VBA odpowiada plik o nazwie VBE7INTL.DLL (lub VBE6INTL.DLL jeśli posiadasz starszą wersję pakietu Office).

Uwaga: zanim zaczniesz modyfikować plik VBE7INTL.DLL najpierw zamknij wszystkie okna programów pakietu Office!

Plik ten znajduje się (w zależności od posiadanej wersji pakietu Office) albo w folderze c:\Program Files\Microsoft Office\root\vfs\ProgramFilesCommonX64\Microsoft Shared\VBA\VBA7.1\1033\ albo w C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\1033.

Po otworzeniu pliku w programie Resource Hacker od razu przeszedłem do folderu Accelerators i wybrałem pierwszą od góry pozycję (1302). Było tak dużo rekordów, więc wyglądało to obiecująco.

Skrót klawiszowy Ctrl+L jest już zajęty, ale np. Ctrl+O jest wolny. Postanowiłem dopisać następującą linijkę przed znakiem } na końcu tekstu.

VK_O, 169, NOINVERT, CONTROL, VIRTKEY

Następnie należy kliknąć w przycisk Compile Script (taka zielona strzałka; lub nacisnąć klawisz F5) i zapisać zmiany w pliku.

I proszę oto efekt:

Wyjaśnijmy co dopisaliśmy: VK_O to nic innego jak stała odpowiadająca klawiszowi O. Parametr CONTROL oznacza, że należy klawisz O wcisnąć razem z przyciskiem Ctrl. Jeśli chcielibyśmy dodać inny modyfikator np. Shift możemy dopisać go po przecinku np.

VK_O, 169, NOINVERT, CONTROL, SHIFT, VIRTKEY

Oznacza, że przypisaliśmy skrót klawiszowy Ctrl+Shift+O. Pozostaje owe 169. Jest to numer ID elementu menu Locals Window. Jak poznać jakie ID jest dla danej pozycji menu? Tutaj nie miałem pomysłu i robiłem to metodą prób i błędów po kolei iterując kolejne numery ID. Dla przyśpieszenia wpisywałem do akceleratorów po 10 rekordów tj.

    VK_O, 10, NOINVERT, CONTROL, VIRTKEY
    VK_O, 11, NOINVERT, CONTROL, VIRTKEY
    VK_O, 12, NOINVERT, CONTROL, VIRTKEY
    VK_O, 13, NOINVERT, CONTROL, VIRTKEY
    VK_O, 14, NOINVERT, CONTROL, VIRTKEY
    VK_O, 15, NOINVERT, CONTROL, VIRTKEY
    VK_O, 16, NOINVERT, CONTROL, VIRTKEY
    VK_O, 17, NOINVERT, CONTROL, VIRTKEY
    VK_O, 18, NOINVERT, CONTROL, VIRTKEY
    VK_O, 19, NOINVERT, CONTROL, VIRTKEY

I tak metodą prób i błędów kompilowałem skrypt, zapisywałem zmiany, włączałem edytor VBA sprawdzając czy pojawił się skrót klawiszowy przy upragnionej pozycji. Jak w końcu trafiłem (była to dziesiątka z zakresu 160-169) to potem kasowałem po połowie rekordów aż doszedłem do tego, że będzie to ID 169.

Aby nie zmieniać ręcznie cyferek napisałem proste makro, które mi wygenerowało owe rekordy. Makro na dysku Z: tworzy plik o nazwie 1.txt

Sub Go   
 Dim Z As String
    
    For a = 1 To 300
        Z = Z + "    VK_O, " + CStr(a) + ", NOINVERT, CONTROL, VIRTKEY" + vbCrLf
        If a Mod 10 = 9 Then Z = Z + vbCrLf
    Next a

    'Zmień ścieżkę do pliku!!
    Open "z:\1.txt" For Output As #1
        Print #1, Z
    Close #1
    End
End Sub

Uwaga: program Resource Hacker pozwala na modyfikowanie wielu różnych fajnych rzeczy w plikach wykonywalnych (np. dodawanie, usuwanie kontrolek formularzy, podmienianie grafik, edycja stringów, edycja napisów w menu). Niestety, ale to się tyczy klasycznych aplikacji pisanych w starszych językach programowania. Jeśli dana aplikacja została skompilowana w Visual Studio albo w jakimś innym kompilatorze generującym pośredni kod dla maszyny wirtualnej (np. Visual Studio, Java) to wtedy z takiego pliku Resource Hacker za wiele nie wyciągnie.

Jeśli artykuł Ci się podobał, będę wdzięczny gdy go udostępnisz w mediach społecznościowych
Ten wpis został opublikowany w kategorii Kącik hakera i oznaczony tagami , . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.