Въпреки че VBA предлага приличен асортимент от вградени функции, може да не винаги намерите точно това, от което се нуждаете. За щастие можете също да използвате повечето функции на работния лист на Excel във вашите VBA процедури. Единствените функции на работния лист, които не можете да използвате, са тези, които имат еквивалентна VBA функция. Например, не можете да използвате функцията RAND на Excel (която генерира произволно число), защото VBA има еквивалентна функция: Rnd.
VBA прави функциите на работния лист на Excel достъпни чрез обекта WorksheetFunction, който се съдържа в обекта Application. Ето пример за това как можете да използвате функцията SUM на Excel в изявление на VBA:
Общо = Application.WorksheetFunction.SUM(Обхват(“A1:A12”))
Можете да пропуснете или частта Application, или частта WorksheetFunction на израза. И в двата случая VBA разбира какво правите. С други думи, всички тези три израза работят абсолютно еднакво:
Общо = Application.WorksheetFunction.SUM(Обхват(“A1:A12”))
Общо = WorksheetFunction.SUM(Обхват(“A1:A12”))
Общо = Приложение.SUM(Обхват(“A1:A12”))
Личното ми предпочитание е да използвам частта WorksheetFunction, само за да стане напълно ясно, че кодът използва функция на Excel.
Примери за функции на работния лист
Тук ще откриете как да използвате функциите на работния лист във вашите VBA изрази.
Намиране на максимална стойност в диапазон
Ето пример, който показва как да използвате функцията MAX на работен лист на Excel във VBA процедура. Тази процедура показва максималната стойност в колона А на активния работен лист:
Използване на функция на работен лист във вашия VBA код.
Sub ShowMax()
Затъмнете TheMax като двойно
TheMax = WorksheetFunction.MAX(Обхват(“A:A”))
MsgBox TheMax
Край под
Можете да използвате функцията MIN, за да получите най-малката стойност в диапазон. И както може да очаквате, можете да използвате други функции на работния лист по подобен начин. Например, можете да използвате функцията LARGE, за да определите k -та най-голяма стойност в диапазон. Следният израз демонстрира това:
SecondHighest = WorksheetFunction.LARGE(Обхват(“A:A”),2)
Забележете, че функцията LARGE използва два аргумента. Вторият аргумент представлява k -тата част — 2, в този случай (втората по големина стойност).
Изчисляване на плащане по ипотека
Следващият пример използва функцията на работния лист PMT за изчисляване на ипотечно плащане. Три променливи се използват за съхраняване на данните, които се предават на функцията Pmt като аргументи. Съобщение показва изчисленото плащане.
Под PmtCalc()
Dim IntRate като двойно
Dim LoanAmt като двоен
Мътни периоди толкова дълги
IntRate = 0,0625 / 12
Периоди = 30 * 12
Сума на заема = 150 000
MsgBox WorksheetFunction.PMT(IntRate, Periods, -LoanAmt)
Край под
Както показва следното изявление, можете също да вмъкнете стойностите директно като аргументи на функцията:
MsgBox WorksheetFunction.PMT(0,0625 /12, 360, -150000)
Въпреки това, използването на променливи за съхраняване на параметрите прави кода по-лесен за четене и модифициране, ако е необходимо.
Използване на функция за търсене
Следният пример използва функциите InputBox и MsgBox на VBA, плюс функцията VLOOKUP на Excel. Той подканва за номер на част и след това получава цената от справочна таблица. По-долу диапазонът A1:B13 е наречен Ценова листа.
Гамата, наречена PriceList, съдържа цени за части.
Под GetPrice()
Dim PartNum като вариант
Дим цена като двойна
PartNum = InputBox („Въведете номера на частта“)
Таблици(“Цени”).Активирайте
Цена = WorksheetFunction.VLOOKUP(PartNum, Range(“PriceList”), 2, False)
MsgBox PartNum & „разходи“ и Цена
Край под
Ето как работи процедурата GetPrice:
-
Функцията InputBox на VBA пита потребителя за номер на част.
-
Номерът на частта, който потребителят въвежда, се присвоява на променливата PartNum.
-
Следващият оператор активира работния лист за цени, само в случай, че вече не е активният лист.
-
Кодът използва функцията VLOOKUP, за да намери номера на частта в таблицата.
-
Забележете, че аргументите, които използвате в този израз, са същите като тези, които бихте използвали с функцията във формула на работен лист. Този израз присвоява резултата от функцията на променливата Price.
-
Кодът показва цената за частта чрез функцията MsgBox.
Тази процедура няма никаква обработка на грешки и се проваля мизерно, ако въведете несъществуващ номер на част. (Опитайте.) Ако това беше действително приложение, което се използва в действителен бизнес, бихте искали да добавите някои твърдения, които се справят с грешките по-изящно.
Въвеждане на функции на работния лист
Не можете да използвате диалоговия прозорец Excel Paste Function, за да вмъкнете функция на работен лист в VBA модул. Вместо това въведете такива функции по старомоден начин: на ръка. Можете обаче да използвате диалоговия прозорец на функцията за поставяне, за да идентифицирате функцията, която искате да използвате, и да разберете за нейните аргументи.
Можете също да се възползвате от опцията Auto List Members на VBE, която показва падащ списък с всички функции на работния лист. Просто въведете Application.WorksheetFunction , последвано от точка. След това виждате списък с функциите, които можете да използвате. Ако тази функция не работи, изберете командата Инструменти → Опции на VBE, щракнете върху раздела Редактор и поставете отметка до Автоматични членове на списъка.
Получаване на списък с функции на работния лист, които можете да използвате във вашия VBA код.
Повече за използването на функциите на работния лист
Новодошлите във VBA често бъркат вградените функции на VBA и функциите на работната книга на Excel. Добро правило, което трябва да запомните, е, че VBA не се опитва да преоткрие колелото. В по-голямата си част VBA не дублира функциите на работния лист на Excel.
За повечето функции на работен лист, които са недостъпни като методи на обекта WorksheetFunction, можете да използвате еквивалентен вграден оператор или функция на VBA. Например, функцията на работния лист MOD не е налична в обекта WorksheetFunction, тъй като VBA има еквивалент: неговия вграден оператор Mod.
В крайна сметка? Ако трябва да използвате функция, първо определете дали VBA има нещо, което отговаря на вашите нужди. Ако не, проверете функциите на работния лист. Ако всичко друго не успее, може да успеете да напишете персонализирана функция с помощта на VBA.