Иако ВБА нуди пристојан асортиман уграђених функција, можда нећете увек пронаћи тачно оно што вам је потребно. На срећу, већину функција Екцел-овог радног листа такође можете да користите у својим ВБА процедурама. Једине функције радног листа које не можете да користите су оне које имају еквивалентну ВБА функцију. На пример, не можете да користите Екцел-ову РАНД функцију (која генерише насумични број) јер ВБА има еквивалентну функцију: Рнд.
ВБА чини функције Екцеловог радног листа доступним преко ВорксхеетФунцтион објекта, који се налази у објекту Апплицатион. Ево примера како можете да користите Екцел функцију СУМ у ВБА изјави:
Укупно = Апплицатион.ВорксхеетФунцтион.СУМ(Опсег(“А1:А12”))
Можете изоставити или део апликације или део функције радног листа у изразу. У оба случаја, ВБА схвата шта радите. Другим речима, ова три израза раде потпуно исто:
Укупно = Апплицатион.ВорксхеетФунцтион.СУМ(Опсег(“А1:А12”))
Укупно = Функција радног листа.СУМ(Опсег(“А1:А12”))
Укупно = Апликација.СУМ(Опсег(“А1:А12”))
Моја лична преференција је да користим део ВорксхеетФунцтион само да би било савршено јасно да код користи Екцел функцију.
Примери функција радног листа
Овде ћете открити како да користите функције радног листа у својим ВБА изразима.
Проналажење максималне вредности у опсегу
Ево примера који показује како да користите Екцел функцију МАКС радног листа у ВБА процедури. Ова процедура приказује максималну вредност у колони А активног радног листа:
Коришћење функције радног листа у вашем ВБА коду.
Суб СховМак()
Дим ТхеМак Ас Доубле
ТхеМак = ВорксхеетФунцтион.МАКС(Распон(“А:А”))
МсгБок ТхеМак
Енд Суб
Можете користити функцију МИН да бисте добили најмању вредност у опсегу. И као што можете очекивати, можете користити друге функције радног листа на сличан начин. На пример, можете користити функцију ЛАРГЕ да одредите к -ту највећу вредност у опсегу. Следећи израз то показује:
СецондХигхест = ВорксхеетФунцтион.ЛАРГЕ(Распон(“А:А”),2)
Приметите да функција ЛАРГЕ користи два аргумента. Други аргумент представља к- ти део — 2, у овом случају (друга највећа вредност).
Израчунавање плаћања хипотеке
Следећи пример користи функцију ПМТ радног листа за израчунавање плаћања хипотеке. Три променљиве се користе за складиштење података који се прослеђују функцији Пмт као аргументи. Оквир за поруку приказује израчунату уплату.
Суб ПмтЦалц()
Дим ИнтРате Ас Доубле
Дим ЛоанАмт Ас Доубле
Пригушени периоди као дуги
ИнтРате = 0,0625 / 12
Периоди = 30 * 12
Износ кредита = 150000
МсгБок ВорксхеетФунцтион.ПМТ(ИнтРате, Периодс, -ЛоанАмт)
Енд Суб
Као што показује следећа изјава, вредности можете уметнути и директно као аргументе функције:
МсгБок ВорксхеетФунцтион.ПМТ(0,0625 /12, 360, -150000)
Међутим, коришћење променљивих за чување параметара чини код лакшим за читање и модификовање, ако је потребно.
Коришћење функције тражења
Следећи пример користи ВБА-ове ИнпутБок и МсгБок функције, плус Екцел-ову функцију ВЛООКУП. Тражи број дела, а затим добија цену из табеле за тражење. У наставку, опсег А1:Б13 је назван Ценовник.
Опсег, назван Ценовник, садржи цене делова.
Суб ГетПрице()
Дим ПартНум као варијанта
Дим Прице Ас Доубле
ПартНум = ИнпутБок („Унесите број дела“)
Схеетс(“Цене”).Активирајте
Цена = Функција радног листа.ВЛООКУП(Број дела, Опсег(„Листа цена“), 2, Нетачно)
МсгБок ПартНум & " трошкови " & Цена
Енд Суб
Ево како функционише ГетПрице процедура:
-
ВБА-ова функција ИнпутБок тражи од корисника број дела.
-
Број дела који корисник унесе је додељен променљивој ПартНум.
-
Следећа изјава активира радни лист Цене, само у случају да већ није активан лист.
-
Код користи функцију ВЛООКУП да пронађе број дела у табели.
-
Обратите пажњу да су аргументи које користите у овој изјави исти као они које бисте користили са функцијом у формули радног листа. Ова изјава додељује резултат функције променљивој Прице.
-
Код приказује цену за део преко функције МсгБок.
Ова процедура нема никакво руковање грешкама и неуспешно пропада ако унесете непостојећи број дела. (Пробајте.) Да је ово стварна апликација која се користи у стварном пословању, желели бисте да додате неке изјаве које се елегантније баве грешкама.
Унос функција радног листа
Не можете да користите дијалог Екцел Пасте Фунцтион да бисте уметнули функцију радног листа у ВБА модул. Уместо тога, унесите такве функције на старомодан начин: ручно. Међутим, можете користити дијалог Пасте Фунцтион да идентификујете функцију коју желите да користите и сазнате о њеним аргументима.
Такође можете искористити предност ВБЕ-ове опције Ауто Лист Мемберс, која приказује падајућу листу свих функција радног листа. Само откуцајте Апплицатион.ВорксхеетФунцтион , након чега следи тачка. Затим ћете видети листу функција које можете да користите. Ако ова функција не ради, изаберите команду ВБЕ Тоолс → Оптионс, кликните на картицу Едитор и означите поље за потврду Ауто Лист Мемберс.
Добијање листе функција радног листа које можете да користите у свом ВБА коду.
Више о коришћењу функција радног листа
Придошлице у ВБА често бркају уграђене функције ВБА и функције Екцелове радне свеске. Добро правило које треба запамтити је да ВБА не покушава да поново измисли точак. У већини случајева, ВБА не дуплира функције Екцел радног листа.
За већину функција радног листа које нису доступне као методе објекта ВорксхеетФунцтион, можете користити еквивалентни ВБА уграђени оператор или функцију. На пример, функција радног листа МОД није доступна у објекту ВорксхеетФунцтион јер ВБА има еквивалент: свој уграђени Мод оператор.
Суштина? Ако треба да користите функцију, прво утврдите да ли ВБА има нешто што одговара вашим потребама. Ако не, погледајте функције радног листа. Ако ништа друго не успе, можда ћете моћи да напишете прилагођену функцију помоћу ВБА.