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.