Visual Basic for Applications
Реализация языка программирования BasicVisual Basic for Applications (VBA, Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office (включая версии для Mac OS), а также во многие другие программные пакеты, в том числе AutoCAD, WordPerfect и ESRI ArcGIS. VBA покрывает и расширяет функциональность ранее использовавшихся специализированных макро-языков, таких, как WordBasic. VBA может использоваться для управления приложением (меню, панели инструментов, формы пользователя, диалоговые окна и т.д.), а также для создания, импорта и экспорта различных форматов файлов.
VBA является интерпретируемым языком. Как следует из названия, VBA близок к Visual Basic, но может выполняться лишь в рамках приложения, в которое он встроен. Кроме того, он может использоваться для управления одним приложением из другого при помощи OLE Automation (например, таким образом можно создать документ Word на основе данных из Excel).
VBA функционально богат и чрезвычайно гибок, но имеет ряд ограничений, включая ограниченную поддержку указателей на функции (используются в Windows API). Имеется возможность использовать (но не создавать) библиотеки DLL.
Язык
VBA — транслируемый язык. Это означает, что его команды сначала преобразуются к исполняемой форме. Контейнеры VBA (Access, Excel, Word) могут сохранять странслированную программу в скрытой форме в исходном документе (чтобы избежать перекомпиляции при каждом выполнении программы). Исполнение кода происходит в виртуальной машине (как в Java), что зачастую ошибочно называют интерпретацией. Несмотря на его схожесть со многими старыми диалектами BASIC (особенно Microsoft BASIC), VBA не совместим с ними, кроме Microsoft Visual Basic до версии 6, и не совместим с VB.NET.
Использование VBA с приложениями (Access, Excel, Word) предполагает соответствующую терминологию и языковые конструкции — так называемую «объектную модель приложения».
Проблемы безопасности
Широкое распространение Visual Basic for Applications в сочетании с изначально недостаточным вниманием к вопросам безопасности привело к широкому распространению макровирусов.
Как и программы на любом языке программирования, макросы VBA могут быть созданы с злым умыслом. Для защиты были введены опции приложения — пользователь по своему усмотрению может исполнять макросы VBA или отказаться от их использования.
Будущее Visual Basic for Applications
В будущем Microsoft планирует заменить VBA на Visual Studio Tools for Applications (VSTA) — инструментарий расширения функциональности приложений, основанный на Microsoft .NET.
VBA в MS Office 2003
Ссылки:
Примеры:
Hello, World!:
Пример для версий VBA 6.3, VBA 6.5Этот код создает макрос под названием “Hello”, выполнение которого выводит окно с сообщением “Hello, World!” и единственной кнопкой “OK”.
Sub Hello()
MsgBox ("Hello, World!")
End Sub
Факториал:
Пример для версий VBA 6.3, VBA 6.5Факториал вычисляется итеративно; значения накапливаются в строковой переменной и затем выводятся в одном окне. &
— оператор конкатенации, CStr
преобразует число в строку (несмотря на то, что факториал хранится как число с плавающей точкой, выводится он без дробной части), Chr
возвращает символ с заданным ASCII-кодом.
Sub Factorial()
Dim f As Double
Dim res As String
f = 1
For i = 0 To 16
res = res & CStr(i) & "! = " & CStr(f) & Chr(10)
f = f * (i + 1)
Next i
MsgBox (res)
End Sub
Числа Фибоначчи:
Пример для версий VBA 6.3, VBA 6.5Используется рекурсивное вычисление чисел Фибоначчи. Отметим, что в этом случае тип счетчика цикла i
приходятся объявлять в явном виде, иначе он принимает тип Variant
и не может быть передан в функцию вместо типа Integer
.
Public Function Fibonacci(N As Integer) As Integer
If N < 2 Then
Fibonacci = N
Else
Fibonacci = Fibonacci(N - 1) + Fibonacci(N - 2)
End If
End Function
Sub Fib()
Dim res As String
Dim i As Integer
For i = 1 To 16
res = res & CStr(Fibonacci(i)) & ", "
Next i
MsgBox (res & "...")
End Sub
CamelCase:
Пример для версий VBA 6.3, VBA 6.5Sub CamelCase()
Dim Text As String
Text = LCase(Application.InputBox("Enter Text"))
For i = 1 To Len(Text) Step 1
If InStr("abcdefghijklmnopqrstuvwxyz", Mid(Text, i, 1)) = 0 Then
Text = Replace(Text, Mid(Text, i, 1), " ")
End If
Next i
MsgBox (Replace(StrConv(Text, vbProperCase), " ", ""))
End Sub
Квадратное уравнение:
Пример для версий VBA 6.3, VBA 6.5Function GetInt(Name As String) As Integer
Dim Coef As String
Coef = Application.InputBox("Enter Coefficient " & Name)
GetInt = CInt(Coef)
End Function
Sub Quadratic()
Dim A As Integer, B As Integer, C As Integer, D As Integer
A = GetInt("A")
If A = 0 Then
MsgBox ("Not a quadratic equation.")
Exit Sub
End If
B = GetInt("B")
C = GetInt("C")
D = B * B - 4 * A * C
Dim p1 As Double, p2 As Double
p1 = -B / 2# / A
p2 = Sqr(Abs(D)) / 2# / A
If D = 0 Then
MsgBox ("x = " & CStr(p1))
Else
If D > 0 Then
MsgBox ("x1 = " & CStr(p1 + p2) & Chr(10) & "x2 = " & CStr(p1 - p2))
Else
MsgBox ("x1 = (" & CStr(p1) & ", " & CStr(p2) & ")" & Chr(10) & "x2 = (" & CStr(p1) & ", " & CStr(-p2) & ")")
End If
End If
End Sub
Комментарии
]]>blog comments powered by Disqus
]]>