Typ VBA

W tym artykule zademonstrujemy użycie operatora VBA TypeOf.

Operator VBA TypeOf służy do określania typu obiektu. Może to być przydatne przy włączaniu lub wyłączaniu kontrolek w formularzu VBA lub kontrolowaniu przepływu kodu w zależności od typu używanego obiektu.

Używanie TypeOf do kontroli kodu

Możemy użyć TypeOf, aby upewnić się, że dokonany wybór jest typem konkretnego obiektu, którego potrzebujemy - na przykład możemy chcieć wybrać zakres, a następnie użyć instrukcji IF, aby zobaczyć, co jest zaznaczone. Jeśli wybrany zostanie zakres, otrzymamy komunikat informujący nas, że zakres jest wybrany, ale jeśli zakres nie zostanie wybrany, otrzymamy inną wiadomość.

Wybierzmy kilka komórek w naszym arkuszu.

Teraz, jeśli uruchomimy poniższe makro, dowiemy się, że wybraliśmy Zakres.

12345678 Wybór podtestu()Dim rng As ObjectJeśli typem wyboru jest zakres, wtedyMsgBox "Wybrano zakres!"W przeciwnym razieMsgBox "Wybrano coś innego"Zakończ, jeśliNapis końcowy

Jeśli jednak nie wybierzemy zakresu i wybierzemy coś innego – być może wykres – a następnie uruchomimy makro, otrzymamy inny wynik!

Korzystanie z TypeOf w kontrolkach formularza

VBA umożliwia nam tworzenie interaktywnych formularzy, które użytkownik może wypełniać i zwracać dane do kodu do wykorzystania na różne sposoby. Możemy użyć operatora TypeOf, aby określić typ kontrolek, które są używane w formularzu.

W poniższym przykładzie utworzyłem formularz użytkownika z różnymi kontrolkami - kilkoma polami tekstowymi, polem kombi, 2 przyciskami opcji, 2 polami wyboru i 3 przyciskami poleceń.

Korzystając z poniższego kodu, mogę określić, jaki typ kontrolek znajduje się w formularzu, przeglądając wszystkie kontrolki w formularzu. Użyłem funkcji TypeName do zwrócenia komunikatu z typem kontrolki i użyłem instrukcji VBA IF za pomocą Rodzaj funkcji aby sprawdzić, jaki typ kontrolki jest wybrany, a następnie kolejne okno komunikatu, aby zwrócić ten typ kontrolki.

12345678910111213141516171819202122 Sub WhatControlType()Dim ctl jako obiektDla każdego ctl In Me.ControlsMsgBox (NazwaTypu(ctl))'Użyj funkcji TypeOf, aby określić typ obiektu.Jeśli TypeOf ctl to msforms.TextBox, toMsgBox ("Kontrolka jest polem tekstowym.")ElseIf TypeOf ctl to msforms.ComboBox ThenMsgBox ("Kontrolka jest ComboBox.")ElseIf TypeOf ctl Is msforms.Label ThenMsgBox ("Kontrolka jest etykietą.")ElseIf TypeOf ctl to msforms.CommandButton ThenMsgBox ("Kontrolka jest przyciskiem polecenia.")ElseIf TypeOf ctl to msforms.CheckBox ThenMsgBox („Kontrola jest polem wyboru.”)ElseIf TypeOf ctl Is msforms.OptionButton ThenMsgBox ("Kontrolka to opcja/przycisk radiowy.")W przeciwnym razieMsgBox („Obiekt jest innym rodzajem kontrolki.”)Zakończ, jeśliNastępny ctlNapis końcowy

Ten rodzaj kodu może być bardzo przydatny, jeśli chcemy włączyć lub wyłączyć kontrolki. W poniższym kodzie, gdy formularz jest otwierany po raz pierwszy, przyciski opcji i pola wyboru są wyłączone.

123456789101112 Prywatna Sub UserForm_Initialize()Dim ctl jako obiektDla każdego ctl In Me.ControlsJeśli TypeOf ctl to msforms.CheckBox, toctl.Enabled = FałszElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = FałszW przeciwnym raziectl.Enabled = PrawdaZakończ, jeśliNastępny ctlNapis końcowy

Aby włączyć przyciski opcji i pola wyboru, napisałem dodatkowy kod za przyciskiem Włącz sterowanie.

12345678910 Prywatna sub cmdEnable_Click()Dim ctl jako obiektDla każdego ctl In Me.ControlsJeśli TypeOf ctl to msforms.CheckBox, toctl.Enabled = Nie ctl.EnabledElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = Nie ctl.EnabledZakończ, jeśliNastępny ctlNapis końcowy

Teraz, gdy klikniemy przycisk Włącz kontrolki, jeśli kontrolki są wyłączone, staną się włączone, a jeśli są włączone, staną się wyłączone. Osiąga się to za pomocą Nie Operator, który umożliwia nam przełączanie między wyłączonym a włączonym.

wave wave wave wave wave