страница 1 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Похожие работы
|
Лекция Основы программирования на vba - страница №1/1
![]() Лекция 6. Основы программирования на VBA 1.Ввод кода VBAКод VBA состоит из инструкций. Обычно каждая инструкция вводится на отдельной строке. Можно перенести длинную инструкцию на следующую строку с помощью оператора продолжения строки, который состоит из пробела и знака подчёркивания. После ввода инструкции редактор VBA выполняет следующие действия.
2.КомментарииКомментарий – это часть программы, которая игнорируется компилятором. Комментарии обычно используются для записи пояснений к тексту программы, предназначенных для программиста. Комментариями в VBA считается часть строки, начинающаяся с апострофа. Используйте комментарии:
3.Типы данныхТип является характеристикой переменной, которая определяет:
Для проведения математических вычислений в рабочих листах приложения Microsoft Excel использует тип Double. Его же рекомендуется применять и для обработки вещественных чисел в VBA для обеспечения той же точности вычислений. При управлении номерами строк рабочих листов следует применять тип данных Long, т.к. количество строк в рабочем листе превышает максимальное значение, хранимое переменной типа Integer. Тип Variant представляется удобным, но у него есть ряд недостатков. Во-первых, переменные типа Variant требуют больше памяти. Во-вторых, работа с переменными типа Variant требует больше времени – примерно в 3 раза. В-третьих, использование конкретных типов позволяет компилятору раньше находить ошибки, связанные с неверными типами данных, а также позволяет избегать таких ошибок.
v1 = "123" v2 = 45 MsgBox v1 + v2 '168 MsgBox v1 & v2 '12345 Для определения типа данных, хранящихся в переменной типа Variant, используются стандартные функции VarType и TypeName. Первая возвращает число, соответствующее типу данных, а вторая – строку, хранящую имя типа данных. Dim v As Variant v = 46.7
MsgBox VarType(v) '5 MsgBox TypeName(v) 'Double Чтобы не запоминать числа, соответствующие тому или иному типу, в VBA введены константы, имена которых запомнить намного проще – vbBoolean, vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbDate, vbString, vbArray. If VarType(v) = vbDouble Then ...
Таким образом, тип Variant имеет смысл использовать, только если вы сами хотите разделить обработку данных разных типов. Переменные типа Variant могут также хранить ряд специальных значений, таких как Empty (ничего не присвоено), Null (некорректные данные) и Error (признак ошибки). Чтобы создать подобный признак ошибки используется функция CVErr, получающая в качестве аргумента номер ошибки. Dim v As Variant v = CVErr(0) В VBA определён ряд констант, соответствующих ошибкам, возникающим в формулах.
Если присвоить в переменную типа Variant признак ошибки с одним из вышеперечисленных номеров и поместить значение этой переменной в ячейку рабочего листа, в ячейке будет отображаться соответствующее сообщение об ошибке. Всем остальным номерам соответствует сообщение #ЗНАЧ!. С их помощью можно создавать как пользовательские сообщения об ошибках. 4.Переменные и константыПеременныеПод переменной в программировании понимается поименованная область памяти, в которой хранится некоторое значение, причём это значение может изменяться в ходе выполнения программы. Для объявления переменных используется оператор Dim. Dim <имя> [As <тип>] Dim n As Integer Dim i, j, k As Integer 'Только переменная k имеет тип Integer! Dim i As Integer, j As Integer, k As Integer 'Теперь все переменные имеют тип Integer Необъявленные переменные и переменные, в объявлении которых не указан тип, имеют тип Variant. Однако использование типа Variant является не самым лучшим решением, и, кроме того, необъявленные переменные могут приводить к ошибкам. Если вы неверно напишите имя переменной, то компилятор сочтёт это имя как имя новой переменной, и программа будет работать не так, как задумано. Чтобы избежать подобных ошибок, можно потребовать явного объявления всех переменных. Для этого необходимо включить следующую строку в качестве первой инструкции в модуле VBA: Option Explicit КонстантыЕсли некоторое значение используется несколько раз, лучше не вставлять его в несколько инструкций, а объявить в виде константы. Такое объявление позволит, во-первых, задать значению символическое имя, что улучшит читабельность программы, а во-вторых, упростит изменение значения – новое значение необходимо будет ввести только один раз. Const <имя> [As <тип>] = <значение> Const count As Integer = 255 Const tax = 0.13, expDate = #12/31/2012#
МассивыМассив – это переменная, состоящая из нескольких элементов одного типа, для доступа к которым используется один или несколько индексов. Dim <имя> (<начальный индекс> To <конечный индекс>) As <тип> Dim a (1 To 100) As Integer Dim b (1 To 10, 1 To 10) As Double a(3) = 7
b(5, 2) = -3.568 Динамические массивы – это массивы, которые не имеют предопределённого количества элементов. Для объявления такого массива используются пустые круглые скобки. Однако, прежде чем использовать такой массив, необходимо задать его размер с помощью оператора ReDim. В отличие от обычного объявления, в котором можно использовать только константы, в операторе ReDim можно использовать переменных для указания границ индексов. Dim a() As Integer ...
ReDim a(1 To n) Объектные переменныеОбъектная переменная – это переменная, представляющая собой объект VBA, например, диапазон или рабочий лист. Объектные переменные важны по следующим причинам:
Объектные переменные объявляются так же, как и обычные, – с помощью оператора Dim. Для присваивания объекта переменной необходимо использовать оператор Set. Dim MyCell As Range Set MyCell = Worksheets("Лист1").Range("A1") MyCell.Value = 125 MyCell.Font.Bold = True MyCell.Font.Italic = True MyCell.Font.Size = 14 MyCell.Font.Name = Cambria
5.Управляющие конструкцииУсловный операторУсловный оператор позволяет осуществлять выбор действий, которые надо выполнить, в зависимости от некоторого условия. If <условие> Then <инструкции1> [Else <инструкции2>] End If If k <> 0 Then s = s / k End If
s = s + x Else s = s + y End If If <условие1> Then <инструкции1> Elseif <условие2> Then <инструкции2> ...
Elseif <условиеn> Then <инструкцииn> Else <инструкцииn+1> End If Dim quantity As Integer, discount As Double If quantity > 100 Then discount = 0.25 ElseIf quantity > 75 Then discount = 0.2 Elseif quantity > 50 Then discount = 0.1 Else
discount = 0 End If
ЦиклыЦиклы позволяют многократно выполнять некоторую последовательность действий, используя логические выражения для определения момента прекращения выполнения цикла. Наиболее часто используемым является параметрический цикл. Параметрический цикл имеет следующий синтаксис (по умолчанию шаг равен 1). For <счётчик> = <начальное значение> To <конечное значение> [Step <шаг>] <инструкции> [Exit For] <инструкции> Next <счётчик> 'Сумма квадратов всех чисел от 1 до 100 Dim sum As Double, i As Integer sum = 0 For i = 1 to 100 sum = sum + sqr(i) Next i
Dim sum As Double, i As Integer sum = 0
For i = 3 to 100 Step 3 sum = sum + sqr(i) Next i
Dim r As Long For r = 10 To 2 Step -2 Rows(r).Delete Next r
Dim sum As Double, threshold As Double, i As Integer sum = 0 threshold = 100 For i = 1 To 100 sum = sum + sqr(i) If sum > threshold Exit For
End If Next i
Dim r as Range Dim sum As Double Dim i As Integer, j As Integer sum = 0
For i = 1 To r.Rows.Count For j = 1 To r.Columns.Count sum = sum + r.Cells(i, j) Next j
Next i 'Количество положительных значений в ячейках диапазона Dim r as Range Dim k As Integer Dim i As Integer, j As Integer k = 0 For i = 1 To r.Rows.Count For j = 1 To r.Columns.Count If r.Cells(i, j) > 0 Then k = k + 1 Next j Next i
Do [{While | Until} <условие>] <инструкции> [Exit Do] <инструкции> Loop Do <инструкции> [Exit Do] <инструкции> Loop [{While | Until} <условие>] Работа с объектами и коллекциямиКонструкция With – End With позволяет выполнить несколько операций над одним объектом. With <объект> <инструкции> End With With Selection.Font .Bold = True .Italic = True .Size = 14 .Name = Cambria End With
Selection.Font.Italic = True Selection.Font.Size = 14 Selection.Font.Name = Cambria Код с использованием конструкции With – End With выполняется быстрее, чем аналогичный код без этой конструкции. При записи макросов конструкция With – End With применяется при каждой возможности. Конструкция For Each – Next позволяет обработать все элементы какой-либо коллекции. For Each <элемент> In <коллекция> <инструкции> [Exit For] <инструкции> Next <элемент> 'Вывод имён всех рабочих листов в активной рабочей книге Dim item As Worksheet For Each item In ActiveWorkbook.Worksheets MsgBox item.Name Next item
Dim book As Workbook For Each book In Workbooks If book.Name <> ActiveWorkbook.Name Then book.Close Next book
Dim cell As Range For Each cell In Selection If cell.Value < 0 Then cell.Select Exit For
End If Next cell |