Typ VBA

Tento článek předvede použití operátora VBA TypeOf.

Při určování typu objektu se používá operátor VBA TypeOf. To může být užitečné při povolení nebo zakázání ovládacích prvků ve formuláři VBA nebo při řízení toku kódu v závislosti na tom, jaký typ objektu se používá.

Ovládání kódu pomocí TypeOf

Pomocí TypeOf můžeme zajistit, že provedený výběr je typem konkrétního objektu, který požadujeme - například můžeme chtít vybrat rozsah a poté pomocí příkazu IF zjistit, co je vybráno. Pokud je vybrán rozsah, pak dostaneme zprávu, která nám říká, že je vybrán rozsah, ale pokud rozsah není vybrán, dostaneme jinou zprávu.

Pojďme vybrat některé buňky v našem listu.

Pokud nyní spustíme níže uvedené makro, bude nám řečeno, že jsme vybrali rozsah.

12345678 Dílčí testovací výběr ()Dim rng As ObjectPokud je výběr TypeOf v rozsahu, pakMsgBox "Byl vybrán rozsah!"JinýMsgBox "Je vybráno něco jiného"Konec IfEnd Sub

Pokud však nevybereme rozsah a vybereme něco jiného - třeba graf - a poté spustíme makro, dostaneme jiný výsledek!

Použití TypeOf na ovládacích prvcích formuláře

VBA nám umožňuje vytvářet interaktivní formuláře, které může uživatel vyplňovat a vracet data do kódu, který má být použit různými způsoby. Můžeme použít operátor TypeOf k určení typu ovládacích prvků, které se používají ve formuláři.

V níže uvedeném příkladu jsem vytvořil uživatelský formulář s řadou ovládacích prvků - několik textových polí, pole se seznamem, 2 tlačítka možností, 2 zaškrtávací políčka a 3 příkazová tlačítka.

Pomocí níže uvedeného kódu mohu určit, jaký typ ovládacích prvků je ve formuláři, opakováním všech ovládacích prvků ve formuláři. Použil jsem funkci TypeName k vrácení zprávy s typem ovládacího prvku a použil jsem prohlášení VBA IF pomocí Funkce TypeOf Chcete -li zkontrolovat, jaký typ ovládacího prvku je vybrán, a poté další okno se zprávou pro vrácení tohoto typu ovládacího prvku.

12345678910111213141516171819202122 Sub WhatControlType ()Dim ctl jako objektPro každý ctl In Me.ControlsMsgBox (TypeName (ctl))'Pomocí funkce TypeOf určete typ objektu.'Pokud TypeOf ctl je msforms.TextBox ThenMsgBox ("Ovládací prvek je textové pole.")ElseIf TypeOf ctl Is msforms.ComboBox ThenMsgBox („Ovládací prvek je ComboBox.“)ElseIf TypeOf ctl Is msforms.Label ThenMsgBox („Ovládací prvek je štítek.“)ElseIf TypeOf ctl Is msforms.CommandButton ThenMsgBox („Ovládací prvek je příkazové tlačítko.“)ElseIf TypeOf ctl Is msforms.CheckBox ThenMsgBox („Ovládací prvek je zaškrtávací políčko.“)ElseIf TypeOf ctl Is msforms.OptionButton ThenMsgBox („Ovládací prvek je přepínač/přepínač.“)JinýMsgBox („Objekt je nějaký jiný typ ovládání.“)Konec IfDalší ctlEnd Sub

Tento typ kódu může být velmi užitečný, pokud chceme povolit nebo zakázat ovládací prvky. V níže uvedeném kódu jsou při prvním otevření formuláře deaktivována tlačítka možností a zaškrtávací políčka.

123456789101112 Private Sub UserForm_Initialize ()Dim ctl jako objektPro každý ctl In Me.ControlsPokud TypeOf ctl je msforms.CheckBox Thenctl.Enabled = FalseElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = FalseJinýctl.Enabled = TrueKonec IfDalší ctlEnd Sub

Chcete -li povolit tlačítka možností a zaškrtávací políčka, napsal jsem za tlačítkem Povolit ovládací prvky další kód.

12345678910 Private Sub cmdEnable_Click ()Dim ctl jako objektPro každý ctl In Me.ControlsPokud TypeOf ctl je msforms.CheckBox Thenctl.Enabled = Není ctl.EnabledElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = Není ctl.EnabledKonec IfDalší ctlEnd Sub

Když nyní klikneme na tlačítko Povolit ovládací prvky, pokud jsou ovládací prvky deaktivovány, budou aktivovány a pokud jsou povoleny, budou deaktivovány. Toho je dosaženo pomocí Ne Operátor, který nám umožňuje přepínat mezi deaktivovaným a povoleným.

wave wave wave wave wave