Od pewnego czasu szukam prostego i przejrzystego sposobu przypisania makra do przycisku Activex Command button przy użyciu procedury VBA.
To zadanie jest drobną cząstką szerszego. Poszatkowałem problem na części i z większością się uporałem. Zagadnienie w skrócie jest następujące:
Po edycji arkusza głównego generuję automatycznie (z częścią danych z arkusza głównego) arkusz dla kolejnego miesiąca na podstawie szablonu zawartego w (ukrytym) arkuszu pomocniczym. W każdym nowym arkuszu jest tabela (ListObject o nazwie zawierającej rok i dwuznakowy przyrostek będący nr miesiąca).
Procedura tworząca nowy arkusz z danymi z arkusza głównego zawiera również makro tworzące (lub kopiujące z szablonu) przycisk CommandButton1, którego zadaniem ma być wywołanie formularza UserForm1 z szeregiem dodatkowych funkcji (edycja, podsumowanie, statystyka, wydruk).
Dla uproszczenia używam tutaj standardowych, domyślnych nazw obiektów: CommandButton1, UserForm1, itp.
Przyciskowi CommandButton1, chciałbym przypisać trywialną procedurę:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Wcześniej używałem kontrolki formularza (Przycisk – formant formularza) – kopiowanej z szablonu. W tym przypadku, przypisane kopiowanemu przyciskowi makro wywołujące UserForm1 jest również kopiowane do nowego arkusza miesięcznego i problem byłby rozwiązany, gdyby nie następujące niedogodności:
- Formant formularza nie zachowuje pierwotnego rozmiaru, puchnie, tyje i wygląda obrzydliwie każdorazowo po skopiowaniu i nie pomagają znane mi triki, by utrzymać rozmiar w ryzach.
- Formant Activex posiada znacznie więcej możliwych do edycji właściwości, które wpływają na wygląd arkusza.
Jak zatem programowo przypisać makro (wyżej pokazane) do istniejącego przycisku najprostszą, przejrzystą metodą. Z pewnością jest to możliwe, ale znalezione dotąd w Internecie propozycje zupełnie nie działają, generują błędy, które niewiele wyjaśniają.