- •1. Основные концепции офисного программирования. Элементы vba как языка ооп.
- •2. Интегрированная среда разработки офисных приложений
- •3. Использование средства записи макросов
- •1. Основные концепции офисного программирования. Элементы vba как языка ооп.
- •2. Интегрированная среда разработки офисных приложений
- •3. Использование средства записи макросов
- •Приведение типов
- •If. ..Then. ..Else
If. ..Then. ..Else
Позволяет определить 2 блока операторов. Первый блок выполняется, когда условие истинно, а второй - когда оно ложно.
If age < 16 Then MsgBox "You are not old enough for a license. " Else MsgBox "You can be tested for a license. " End If
lf...Then...Elself
Позволяет определить несколько условий и несколько блоков операторов.
Function Bonus(jobClass, salary, rating) If jobClass = 1 Then Bonus = salary * 0.1 * rating / 10 ElseIf jobClass = 2 Then Bonus = salary * 0.09 * rating / 10 ElseIf jobClass = 3 Then Bonus = salary * 0.07 * rating / 10 Else Bonus = 0 End If End Function
Select Case
Оператор Select Case заменяет серию операторов ElseIf в том случае, когда одно выражение сравнивается с несколькими значениями
Function Bonus(jobClass, salary, rating) Select Case jobClass Case 1 Bonus = salary * 0.1 * rating / 10 Case 2 Bonus = salary * 0.09 * rating / 10 Case 3 Bonus = salary * 0.07 * rating / 10 Case 4, 5 ' можно включать несколько значений... Bonus = salary * 0.05 * rating / 5 Case 6 To 8 ' ...или задавать диапазон Bonus = 150 Case Else Bonus = 0 End Select End Function
Операторы циклов
Используются для организации повторного выполнения блоков кода
Чтобы |
Использовать |
Проверить условие в начале цикла, если оно True, перейти к выполнению цикла и продолжать, пока условие не станет False |
Do While...Loop |
Проверить условие в начале цикла, если оно False, перейти к выполнению цикла и продолжать, пока условие не станет True |
Do Until..Loop |
Выполнить цикл один раз, проверить условие в конце цикла и, если оно True, продолжать, пока условие не станет False |
Do...Loop While |
Выполнить цикл один раз, проверить условие в конце цикла и, если оно False, продолжать, пока условие не станет True |
Do...Loop Until |
Выполнить цикл заданное число раз, используя счетчик цикла с определенными начальным и конечным значениями, а также шагом приращения |
For...Next |
Выполнить цикл по разу для каждого объекта из набора(collection) |
For Each...Next |
Выход из циклов
оператор Exit
Досрочный выход из процедуры или цикла ускоряет работу за счет отказа от ненужных повторений.
Для досрочного выхода из оператора Do...Loop используется оператор Exit Do.
Для досрочного выхода из цикла For - оператор Exit For
For Each с In rangeToSearch If c.Value = searchValue Then found = True Exit For End If
Next с
Процедуры типа Sub и Function
В Visual Basic можно создавать процедуры двух типов: Sub и Function.
-
Процедура типа Sub - блок кода, заключенный между операторами Sub и End Sub; он выполняет некоторую операцию, но значения не возвращает.
Sub DisplayWelcome() MsgBox "Welcome“
End Sub
Процедура типа Function - блок кода, заключенный между операторами Function и End Function; он выполняет определенную операцию, но при этом обязательно возвращает какое-нибудь значение
Function AddThree(OriginalValue As Long) AddThree = OriginalValue + 3
End Function
Закрытые и открытые процедуры
-
Открытую процедуру, объявленную с применением ключевого слова Public, разрешается вызывать из любой процедуры любого модуля приложения.
-
Закрытую процедуру, объявленную с помощью ключевого слова Private, можно вызывать только из процедур, содержащихся в том же (что и закрытая процедура) модуле.
Закрытые процедуры
-
Private Sub Test1() MsgBox "This is the Test1 procedure running" End Sub
-
Private Function AddThree(OriginalValue As Long) AddThree = OriginalValue + 3 End Function
Открытые процедуры
-
Public Sub Test1() MsgBox "This is the Test1 procedure running" End Sub
-
Public Function AddThree(OriginalValue As Long) AddThree = OriginalValue + 3 End Function
Если в объявлении процедуры не указано ни Private, ни Public, то по умолчанию она считается открытой
Чтобы функция возвращала значение, в ней должен быть оператор, который присваивает это значение имени функции
Function ConeSurface(radius, height) Const Pi = 3.14159 coneBase = Pi * radius ^ 2 coneCirc = 2* Pi* radius coneSide = Sqr(radius ^ 2 + height ^ 2) * coneCirc / 2 ConeSurface = coneBase + codeSide
End Function
Передача аргументов в процедуру
Если процедуре необходимы дополнительные данные и их нельзя получить из контекста, в котором она выполняется, то эти данные следует передать ей как аргументы. Чтобы указать, что процедура принимает аргументы, необходимо перечислить их между скобками за именем процедуры в ее объявлении. Аргументы отделяются запятыми
Объявляя аргумент, можно задать его тип данных с помощью ключевого слова As (изменяет ли процедура значение аргумента, определяется ключевыми словами ByVal и ByRef), а также определить, обязателен ли аргумент, для чего предназначено ключевое слово Optional
Имя переменной, передаваемой в процедуру, необязательно должно совпадать с именем аргумента в объявлении этой процедуры.
Пример объявления процедуры
Sub UpdateRecord(ByVal custId As Long, ByRef custName As String, _ Optional custRepeat As Boolean)
Первый аргумент, custId, обязателен и передается по значению как тип Long. Если аргумент передается в процедуру по значению, процедура получает лишь копию переменной, переданной вызывающей процедурой. Если вызываемая процедура модифицирует это значение, то изменится только копия, а не сама переменная в вызывающей процедуре
Второй аргумент, сustName, тоже обязателен, но передается по ссылке как тип String. В этом случае процедура имеет доступ к исходной переменной в памяти, и поэтому способна изменить ее значение
Третий аргумент, custRepeat, не обязателен и передается по ссылке как тип Boolean. (По умолчанию аргументы всегда передаются по ссылке.)