Овај чланак ће демонстрирати употребу ВБА ТипеОф оператора.
Оператор ВБА ТипеОф се користи за одређивање врсте објекта. Ово може бити корисно у омогућавању или онемогућавању контрола на ВБА обрасцу или у контроли тока кода у зависности од врсте објекта који се користи.
Коришћење ТипеОф за контролу кода
Можемо користити ТипеОф да бисмо осигурали да је изабрани тип специфичног објекта који нам је потребан - на пример, можда ћемо желети да изаберемо опсег, а затим да употребимо ИФ наредбу да видимо шта је изабрано. Ако је изабран опсег, добићемо поруку која нам говори да је опсег изабран, али ако опсег није изабран, добићемо другу поруку.
Хајде да изаберемо неке ћелије на нашем радном листу.
Сада, ако покренемо доњи макро, биће нам речено да смо изабрали опсег.
12345678 | Суб ТестСелецтион ()Дим рнг Ас ОбјецтАко је ТипеОф Селецтион РангеМсгБок "Опсег је изабран!"ИначеМсгБок "Изабрано је нешто друго"Крај АкоЕнд Суб |
Међутим, ако не изаберемо опсег и одаберемо нешто друго - можда графикон - а затим покренемо макро, добићемо другачији резултат!
Коришћење ТипеОф за контроле образаца
ВБА нам омогућава креирање интерактивних образаца које корисник може попунити и вратити податке у код који ће се користити на различите начине. Оператор ТипеОф можемо користити за одређивање врсте контрола које се користе на обрасцу.
У доњем примеру створио сам кориснички образац са различитим контролама - неколико текстуалних оквира, комбиновано поље, 2 дугмета са опцијама, 2 поља за потврду и 3 командна дугмета.
Користећи доњи код, могу одредити која је врста контрола на обрасцу проласком кроз све контроле на обрасцу. Користио сам функцију ТипеНаме да вратим поруку са типом контроле, а користио сам ВБА ИФ изјаву користећи Врста функције да бисте проверили која је врста контроле изабрана, а затим још једно поље за поруку да бисте вратили ту врсту контроле.
12345678910111213141516171819202122 | Суб ВхатЦонтролТипе ()Дим цтл Ас ОбјецтЗа сваки цтл у мени.КонтролеМсгБок (Име типа (цтл))'Помоћу функције ТипеОф одредите тип објекта.Ако ТипеОф цтл Ис мсформс.ТектБок ТадаМсгБок ("Контрола је ТектБок.")ЕлсеИф ТипеОф цтл Ис мсформс.ЦомбоБок ЗатимМсгБок ("Контрола је ЦомбоБок.")ЕлсеИф ТипеОф цтл Ис мсформс.Лабел ОндаМсгБок ("Контрола је ознака.")ЕлсеИф ТипеОф цтл Ис мсформс.ЦоммандБуттон ОндаМсгБок ("Контрола је командно дугме.")ЕлсеИф ТипеОф цтл Ис мсформс.ЦхецкБок ОндаМсгБок ("Контрола је поље за потврду.")ЕлсеИф ТипеОф цтл Ис мсформс.ОптионБуттон ОндаМсгБок ("Контрола је дугме за опцију/радио.")ИначеМсгБок ("Објекат је нека друга врста контроле.")Крај АкоНект цтлЕнд Суб |
Ова врста кода може бити веома корисна ако желимо да омогућимо или онемогућимо контроле. У доњем коду, приликом првог отварања обрасца, тастери са опцијама и поља за потврду су онемогућени.
123456789101112 | Привате Суб УсерФорм_Инитиализе ()Дим цтл Ас ОбјецтЗа сваки цтл у мени.КонтролеАко ТипеОф цтл Ис мсформс.ЦхецкБок Тадацтл.Енаблед = НетачноЕлсеИф ТипеОф цтл Ис мсформс.ОптионБуттон Ондацтл.Енаблед = НетачноИначецтл.Енаблед = ТачноКрај АкоНект цтлЕнд Суб |
Да бих омогућио дугмад са опцијама и поља за потврду, написао сам још неки код иза дугмета Омогући контроле.
12345678910 | Привате Суб цмдЕнабле_Цлицк ()Дим цтл Ас ОбјецтЗа сваки цтл у мени.КонтролеАко ТипеОф цтл Ис мсформс.ЦхецкБок Тадацтл.Енаблед = Није цтл.ЕнабледЕлсеИф ТипеОф цтл Ис мсформс.ОптионБуттон Ондацтл.Енаблед = Није цтл.ЕнабледКрај АкоНект цтлЕнд Суб |
Сада када кликнемо на дугме Омогући контроле, ако су контроле онемогућене, оне ће постати омогућене, а ако су омогућене, постаће онемогућене. То се постиже коришћењем Не Оператер који нам омогућава да се пребацујемо између онемогућених и омогућених.