Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика, модуль 2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
854.02 Кб
Скачать

97. Миф. Запуск процедуры пользователя или формы. Запуск процедуры vba из командной строки

Создвайте файл AutoLISP, в который добавте следующее:

 

    ;; Test VBA COMMAND                               

    (defun c:vbatest (/)

            (princ)

    )

 

 

Добавьте в стандартный модуль проекта следующий код:

 

Public Sub VBATest()

MsgBox "What do you know, it works"        

End Sub

 

 

Затем добавьте в модуль ThisDrawing следующий код:

 

Private Sub AcadDocument_BeginLisp(ByVal FirstLine As String)

If FirstLine = "(C:VBATEST)" Then

     Call VBATest

    End If

End Sub

 

Запуск процедур и функций vba из существующего документа ms Office

Следующий скрипт демонстрирует возможность запуска функции, написанной на VBA, из существующей книги Excel. Функции, написанные на VBA, могут получать параметры из скрипта и возвращать значение в скрипт:

Set objExcel = CreateObject("Excel.Application")

objExcel.WorkBooks.Open "C:\MyWorkBook.xls" 'открытие книги Excel

Param1 = "" 'подготовка параметров для передачи в функцию

Param2 = ""

'вызов функции и получение значения, которое она возвращает:

Result = objExcel.Application.Run("MyFunction", Param1, Param2)

objExcel.Quit

Таким образом, вы можете писать процедуры и функции на VBA, используя специфические возможности VBA, а затем вызывать их из скриптов Windows Script Host. Примечание: если запускаемая из vb-скрипта функция VBA вызывает диалоговую форму 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 = False

Set objWorkBook = objOffice.WorkBooks.Add

objWorkBook.Worksheets.Add

i = objOffice.VBE.ActiveVBProject.VBComponents.Count

objOffice.VBE.ActiveVBProject.VBComponents.Add 1

Set 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 With

objOffice.Application.Run "TestSub", "Test VBA", "Сейчаc будет произведён вызов Win32 API функции Beep()..."

objOffice.Application.Run "TestBeep"

'Следующая строка нужна, если используется Word:

'objOffice.VBE.ActiveVBProject.VBComponents.Remove objModule

objOffice.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, которые могут облегчить вам жизнь.

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