Динамическое создание и запуск процедур и функций VBA 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Динамическое создание и запуск процедур и функций VBA



Следующий скрипт демонстрирует возможность динамического создания и запуска процедур и функций VBA с параметрами (в т.ч. с использованием функций Win32 API в среде VBA). Для возможности работы скрипта необходимо установить флажок "Доверять доступ к Visual Basic Project" на вкладке "Надежные издатели" диалога "Безопасность" в соответствующем приложении (Word или Excel) через меню "Сервис" - "Макрос" - "Безопасность...". Также возможно потребуется снять флажок "Require Variable Declaration" на вкладке "Editor" окна "Options" редактора VBA (меню "Tools" - "Options..."), чтобы VBE не пыталась автоматически вставлять инструкцию "Option Explicit".

'Создание объекта Word:'Set objOffice = CreateObject("Word.Application")'objOffice.Documents.Add'Примечание: если в момент запуска этого скрипта Word уже запущен, в момент удаления временного'модуля VBA произойдёт конфликт доступа к Normal.dot. 'Создание объекта Excel:Set objOffice = CreateObject("Excel.Application")objOffice.DisplayAlerts = FalseSet objWorkBook = objOffice.WorkBooks.AddobjWorkBook.Worksheets.Add i = objOffice.VBE.ActiveVBProject.VBComponents.CountobjOffice.VBE.ActiveVBProject.VBComponents.Add 1Set objModule = objOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1)With objModule.CodeModule.InsertLines 1, "Public Declare Function Beep Lib ""kernel32"" _".InsertLines 2, "(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long".InsertLines 3, "Sub TestSub(Caption as String, Text as String)".InsertLines 4, " MsgBox Text, vbOkOnly + vbInformation, Caption".InsertLines 5, "End Sub".InsertLines 6, "Sub TestBeep()".InsertLines 7, " res = Beep(500, 100)".InsertLines 8, " res = Beep(550, 100)".InsertLines 9, " res = Beep(600, 100)".InsertLines 10, " res = Beep(650, 100)".InsertLines 11, " res = Beep(700, 100)".InsertLines 12, " res = Beep(650, 100)".InsertLines 13, " res = Beep(600, 100)".InsertLines 14, " res = Beep(550, 100)".InsertLines 15, " res = Beep(500, 700)".InsertLines 16, "End Sub"End WithobjOffice.Application.Run "TestSub", "Test VBA", "Сейчаc будет произведён вызов Win32 API функции Beep()..."objOffice.Application.Run "TestBeep"'Следующая строка нужна, если используется Word:'objOffice.VBE.ActiveVBProject.VBComponents.Remove objModuleobjOffice.Quit

Как видно из приведённого выше скрипта, динамическое создание и запуск процедур и функций VBA возможны как с помощью Excel, так и с помощью Word. Для использования Excel или Word достаточно раскомментировать и закомментировать нужные блоки кода.

 

98.VBA. Правила запису інструкції If… Then… Else. Багаторядкова структура.
Конструкция ╚If-Then-Else╩ - очень полезное средство при программировании Outlook (как и при программировании в Visual Basic или VBA). Она позволяет вам вычислить условное выражение, например, соответствие строки темы какому-либо значению, и в зависимости от результата выполнить определенные действия. Вот базовый пример:

If myMessage.Subject = "Hello World!" Then
myMessage.Print
Else
myMessage.Delete
End If

В этом примере показано, как проверяется соответствие поля темы объекта myMessage выражению ╚Hello World!╩. Если соответствие установлено, выполняется печать сообщения, в противном случае оно удаляется.

Если вы хотите выполнить некое действие при определенных условиях, и ничего не выполнять, если это условие не соблюдается, то часть выражения ╚Else╩ можно не использовать. Например, если вы хотите распечатать сообщения, имеющее тему ╚Hello World!╩, а с остальными ничего делать не надо, можно использовать следующий код:

If myMessage.Subject = "Hello World!" Then
myMessage.Print
End If

Если условие (определенная тема письма) не выполняется, программа пропускает шаг печати и продолжает выполнять оставшуюся часть кода.

Многие пользователи используют конструкцию ╚If-Then-Else╩ для создания макросов Outlook, которые могут облегчить вам жизнь.

 

Багаторядкова структура – це структура з розгалуженням (переважно – ні/так).

 

99. VBA. Логічні операції.

Логические операции

Пример Имя Результат
$a and $b And TRUE, если и $a, и $b TRUE.
$a or $b Or TRUE, если $a или $b TRUE.
$a xor $b Xor TRUE, если $a или $b TRUE, но не оба.
! $a Not TRUE, если $a не TRUE.
$a && $b And TRUE, если и $a, и $b TRUE.
$a || $b Or TRUE, если $a или $b TRUE.

 

Смысл двух вариантов "and" и "or" в том, что они работают с различными приоритетами.

 

 

100-101. VBA. Цикл Do-Loop. Варіанти синтаксису. VBA. Цикл For-Next.

Цикл - это алгоритмическая структура, при помощи которой реализуется многократное повторение блоков операторов.

В языке Visual Basic существует три основных вида циклов, которые реализуется при помощи конструкций For:Next, Do:Loop и While:Wend.

Цикл For:Next. Используется в том случае, когда количество повторов заданного блока операторов известно заранее. Данная конструкция выглядит следующим образом:

For счетчик = начальное значение To конечное значение [Step шаг] Операторы1[Exit For] Операторы2Next [счетчик]

Когда приведенные операторы выполняются первый раз, то переменной счетчику присваивается начальное значение, после чего возможны два варианта действий. Если в результате проверки условия счетчик > конечное значение было получено значение True, то происходит завершение цикла, при этом блоки операторы1 и операторы2 ни разу не выполняются. С другой стороны, если результатом проверки условия является False, то в этом случае блоки операторов выполняются первый раз, после чего происходит переход на начало цикла. Далее значение переменной-счетчика увеличивается на шаг, расположенный после ключевого слова Step (в случае его отсутствия устанавливается шаг = 1). После этого снова проверяется истинность условия счетчик > конечное значение и т.д., окончание цикла происходит в тот момент, когда результатом данной проверки станет значение True.

Зачастую бывает необходимо "аварийно" завершать работу цикла при выполнении какого-либо дополнительного условия. В этом случае внутри цикла следует использовать служебное словосочетание Exit:For, которое обычно располагают в управляющей конструкции, например:

If условие Then Exit For

Если результатом проверки условия будет значение True, то выполнение цикла будет прекращено, причем блок операторы1 будет выполнен очередной раз, а блок операоры2 - нет.

Цикл Do:Loop. Применяется в том случае, когда число повторений операторов тела цикла заранее неизвестно. Существуют четыре разновидности данной конструкции. При использовании первых двух цикл либо выполнится много раз, либо не выполнится вообще.

Do Until условие ОператорыLoop

Если результатом проверки условия является значение False, то блок операторы выполняется, иначе осуществляется переход на оператор, расположенный после служебного слова Loop. С другой стороны, если первая проверка условия даст результат True, то цикл не выполнится ни разу.

Do While условие ОператорыLoop

Если условие истинно, то происходит выполнение блока операторы, если же ложно, то есть результатом проверки является False, то цикл не выполниться ни разу.

В случае использования последних двух конструкций цикл будет выполнен хотя бы один раз.

Do ОператорыLoop Until условие

Блок операторы выполняется до тех пор, пока результатом проверки условия является значение False, иначе выполнение цикла заканчивается.

Do ОператорыLoop While условие

В случае ложности условия выполняется блок операторы, если же оно истинно, т.е. результатом проверки является значение True, то происходит окончание чикла.

Цикл While:Wend. Также используется в том случае, когда число повторений операторов тела цикла заранее неизвестно, и имеет следующий синтаксис:

While условие ОператорыWend

Если результатом проверки условия является значение True, то блок операторы выполняется, иначе осуществляется переход на оператор, расположенный после служебного слова Wend. С другой стороны, если первая проверка условия даст результат False, то цикл не выполнится ни разу.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 492; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.153.38 (0.006 с.)