Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Создание переменных. Типы переменных





Тип переменной определяет, каким образом биты данных, предоставляющие ее значение, хранятся в памяти компьютера, а также какой тип данных можно хранить в этой переменной.

Самый простой способ создать переменную – это просто упомянуть ее в выражении. Например:

MyVar = 15

Такое объявление называется неявным и по умолчанию ей присваивается тип Variant. Однако во избежание ошибок в написании программы, а также, для того чтобы программы работали быстрее следует применять явное объявление переменных. Самый простой способ задать явно переменную выглядит так:

Dim MyVar

В общем виде:

Dim имя1, имя2, имя3

Переменные имеют тип Variant. Существуют и другие типы данных. Вот их основная характеристика.

Имя типа данных Размер в байтах Описание и диапазон значений
Byte Положительные числа от 0 до 255
Boolean Логические значения. Только True и False
Currency От – 9223372036854775808 до 9223362036854775808 имеет фиксировано 4 знака после запятой имеет малую ошибку округления
Data Хранит комбинацию даты и времени
Double Отрицательные числа от - до Положительные числа от до
Integer Числа от – 32768 до 32767
Long Числа от – 21474883648 до 21474883647
Object Используется для доступа к любому объекту VBA. Хранит адрес объекта
Single Отрицательные числа от до Положительные числа от до
String 1б на символ Служит для хранения текста. До 2 миллионов символов
variant 16б+1б на символ Служит для хранения данных любого типа

 

Для того чтобы объявить тип переменной в конструкции Dim, надо вслед за именем переменной добавить ключевое слово As и указать тип переменной.

Dim имя As тип

Например

Dim intFile As Integer

Dim strFileName As String

Dim Array_Size As Long



Dim X, Y, P, Z As Variant

Dim F, N, J, m, S As Integer

Можно присвоить числовой переменной значение строковой переменной, если строка представляет числовое значение, и наоборот, строковой переменной присвоить числовое значение. Например:

Sub Primer2 ()

Dim intX as Double

Dim strY as String

strY=”100,23”

intX=Cos(strY)

msgBox intX

end Sub

можно запретить VBA обрабатывать переменные заданные неявно, для этого надо задать директиву Option Explicit до начала написания процедуры или функции.

 


9.3. Понятие об объектах
9.3.1. Использование свойств объекта

 

Под объектами следует понимать, например: диаграммы, рабочие листы, диапазоны ячеек MS Excel, таблицы MS Access, документы Word, рабочие чертежи AutoCAD и др. С помощью языка VBA можно управлять приложением, влияя на объекты этого приложения из программы. Свойства объекта можно использовать только двумя способами: прочитать его значение или записать (установить) его значение.

В общем виде синтаксис для определения свойства выглядит следующим образом:

Object.property

Где Object представляет собой любую допустимую ссылку на объект, а property – любое допустимое имя свойства для объекта, на которое имеется ссылка.
Разделительная точка связывает ссылку объекта со свойством или методом или по-другому – указывает, где заканчивается объектная ссылка и начинается идентификатор свойства или метода. Под методом здесь понимается функция, процедура.

Для того чтобы присвоить значение свойства некоторой переменной, следует использовать такой синтаксис:

Variable = Object.Property

Где Variable – любая переменная, тип которой совместим с типом свойства объекта. В следующем примере переменной AnyStr присваивается строка, принадлежащая свойству Name, на которую ссылается переменная объекта aSheet рабочего листа Excel.

AnyStr = aSheet.Name

Для того чтобы установить свойства объекта, нужно просто присвоить свойству новое значение, используя такой синтаксис

object.Property = Expression

Где Expression – любое выражение VBA, которое имеет тип данных, совместимый с типом свойства объекта.

Например, чтобы изменить имя рабочего листа MS Excel, ссылающего на объект, с помощью переменной aSheet. Свойству Name присваивается значение aSheet.Name = "Кадастровые номера".


9.3.2. Использование методов объекта

В общем виде синтаксис для метода объекта выглядит следующим образом:

Object.Metod

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

Object.Metod аргумент1, аргумент2, …

Например, чтобы сохранить активную рабочую книгу MS Excel запишем:

ActiveWorkbook.SaveAs Filename: = "С:\Мои документы\Кадастровые_номера.xls", FileFormat: = xlNormal.


9.3.3. Объявление объектных переменных

 

Посредством инструкции Dim можно объявить любую переменную, которая будет содержать ссылку на любой объект VBA или приложения. Общий синтаксис таков:

Dim xlApp As Excel.Application

Dim doсWord As Word.Application

Dim objApp As Acad.Application

9.3.4. Использование объектов в выражениях

Перед тем как передать объектной переменной ссылку на нужный объект, необходимо установить эту переменную. Для того чтобы присвоить объектной переменной ссылку на объект, следует ввести ключевое слово Set.
В общем виде это выглядит та:

Set Var = Object

Где Var – любая объектная переменная. Object – любая допустимая ссылка или объектное выражение. Например, установим переменной aSheet ссылку на активный рабочий лист рабочей книги MS Excel

Dim aSheet As Worksheet

Set aSheet = Applicstion.AktiveSheet

Другой пример. Установим переменной objApp ссылку на приложение AutoCAD, а переменной objDos ссылку на рабочий чертеж приложения AutoCad.

Dim objApp As AcadApplication

Dim objDos As AcadDocument

Set objApp = GetObject (, “AutoCAD.Application")

Set objDoс = objApp. ActiveDocument


9.4. Принятие решения в Visual Basic for Appliсation
9.4.1. Выбор с помощью If …Then

Конструкция If …Then имеет две различные синтаксические формы.
Синтаксис этой конструкции позволяет задавать ее в одной строке или нескольких строках программы:

If condition Then statement

If condition Then

Statement

End If

Где condition – некоторое логическое выражение, а statement – одна или несколько инструкций.

Например:

If temperature > 100 Then MsBox "Очень жарко"

Вторая конструкция называется блоком. Пример:

If temperature > 100 Then

MsgBox "Очень жарко"

MsgBox "Уменьшите температуру"

End If


9.4.2. Выбор между ветвями с помощью If …Then …Else

Аналогично If …Then инструкция If …Then …Else имеет две формы: однострочную и блоковую.

Общий синтаксис таков:

If condition Then statement Else elsestatement

Пример

If temperature > 100 Then MsgBox "Слишком жарко" Else MsgBox_"Прохладно"

If condition Then

Statement

Else

Elsestatement

End If

Пример

If temperature > 100 Then

MsgBox "Слишком жарко"

Else

MsgBox "Прохладно"

End If


9.4.3. Использование If …Then …ElseIf

В VBA предусмотрена также упрощенная версия инструкции If …Then …Else, которая может быть использована как упрощенный эквивалент вложенных инструкций If …Then …Else. Общий синтаксис таков:

If condition1 Then

Statements

Elself condition2

ElseStatement

[Else

ElseStatement]

End If

Например

If temperature > 100 Then

MsfBox "Слишком жарко"

Elself temperature > 50 Then

MsgBox "Нормально"

Else

MsgBox "Холодно"

End If


9.4.4. Применение инструкции Select Case

В Visual Basic конструкция Select Case является альтернативной конструкции If …Then …Else в случаях выполнения блока, состоящего из большого набора операторов. Она делает код программы более удобным и понятным.

Общий синтаксис таков:

Select Case TestExpression

Case ExpressionList1

Statement1

Case ExpressionList2

Statement2

.

.

.

case ExpressionListN

statementsN

[Case Else

ElseStatement]

End Select

Здесь TestExpression – некоторое числовое или символьное выражение, обычно переменная, ExpressionList1, ExpressionList2, ExpressionListN представляют список логических выражений, каждое выражение в списке должно быть отделено запятыми, Statements1, Statements2, StatementsN – представляет собой одно или несколько инструкций VBA.

Приведем пример программы, которая вычисляет румб угла по заданному дирекционному направлению.

1: Sub DirAngle ()

2: Dim Angle As Double

3: Dim Grad As Integer

4: Dim Min As Integer

5: Dim Sec As Integer

6: Dim Deg As Double

7: On Error GoTo Line

8: Angle = InputBox ("Введите значение дирекционного угла в формате_(DD.MMSS):", "Ввод данных")

9: Grad = Int(Angle)

10: Min = Int((Angle - Grad)*100)

11: Sec = Round(((Angle - Grad)*100 - Min)*100)

12: Deg = Grad + Min / 60 + Sec / 3600

13: Select Case Deg

14: Case 0 To 90

15: MsgBox CB:" &Angle”

16: Case 90 To 180

17: MsgBox ЮВ:" & 179 - Grad &"." & 60 - Min & 60 – Sec”

18: Case 180 To 270

19: MsgBox ЮЗ:" & 180 + Angle”

20: Case 270 To 360

21: MsgBox СЗ:" & 359 - Grad &"." & 60 - Min & 60 – Sec”

22: Case Else

23: MsgBox "Ошибка! Введите угол от 0 до 360 градусов"

24: End Select

25: Line:

26: End Sub

в строке 1 задается имя макроса.

В строках 2 – 6 определен список используемых переменных.

В строке 7 содержится инструкция On Error. Это оператор, перехватывающий ошибки. Оператор On Error передает управление программе обработки ошибок. В случае если пользователь ввел некорректные данные, например строку, либо нажал кнопу Cancel (отмена), программа передает управление оператору Go To после которого следует метка (Line). Программа ищет эту метку в тексте кода и начинает выполнение инструкций после нее (строка 25).

В 8 строке вызывается встроенная функция InputBox, куда пользователь заносит значение угла в формате DD.MMSS.

В строке 9 вызывается встроенная в VBA функция Cint() которая отбрасывает дробную часть от переменной Angle и получаем значение градусов.
Аналогично в строках 10 – 11 получаем значение минут и секунд. Только для определения числа секунд использовалась функция Round() которая округляет число до нужного количество знаков после запятой, в данном случае до ближайшего целого.

В строке 12 значения градусов минут и секунд переводим в десятичные доли градуса.

Строи 12 – 24 содержат инструкции Select Case TestExpression. Строка 13 состоит из простой переменной Deg. Значение этой переменной сравнивается с условием каждой ветви Case инструкции Select Case.

Строки 15, 17, 19, 21, 23 содержат функцию MsgBox для вывода значения румба на экран. Знак амперсанта (&) используется для соединения строк в одно целое.


9.5. Циклы

Циклы позволяют выполнить одну или несколько строк кода несколько раз. Visual Basic поддерживает следующие циклы:

1. Do … Loop

2. For … Next

3. For Each … Next


9.5.1. Конструкция Do … Loop

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

Do While condition

Statements

Loop

Выполняя этот цикл VBA сначала проверяется условие. Если условие ложно,он пропускает операторы тела цикла. Если условие истинно, VBA выполняет операторы тела цикла, затем возвращается в начало цикла и вновь проверяет условие.

Приведем пример программы, которая считает введенные пользователем нечетные числа и прекращает работу, когда число нечетных чисел достигает 10.

1: Sub Count_OddNums()

2: Conts ocTitle = "Подсчет нечетных чисел"

3: Dim OddCount As Integer

4: Dim OddStr As String

5: Dim num

6: OddStr = "”

7: OddCount = 0

8: Do While OddCount < 10

9: num = InputBox("Введите число:", ocTitle)

10: If (num Mod 2) <> 0 Then

11 OddCount = OddCount + 1

12: OddStr = OddStr & num & " “

13: End If

14: Loop

15: MsgBox prompt:="Вы ввели такие нечетные числа: & & Chr(13) & _OddStr, Title:=ocTitle

16: End Sub

В строке 1 объявлено имя макроса.

В строке 2 объявлена константа ocTitle. Константа – это такая величина в VBA – программе, которая никогда не меняется. Константы применяются, для того чтобы код программы был более понятным. Например, для геометрических расчетов удобнее, если в тексте встречается поименованная константа Pi, чем число 3,1415.

Const Pi = 3,14

Кроме того, использование констант облегчает модернизацию программ.

В строках 3 – 5 описаны переменные используемые программой.

В строках 6 – 7 значение строки для отображения нечетных числе и счетчик нечетных чисел инициализированы начальными значениями.

В строке 8 начинается цикл Do. Так как счетчик нечетных числе инициализирован нулем тело цикла будет выполнятся.

В строке 9 пользователь вводит число.

В 10 строке начинает работать инструкция If … Then, которая проверяет, какое число, ввел пользователь (четное или нечетное). В скобках оператором Mod начинается деление по модулю на число 2 и возвращается остаток от деления. Если он неравен 0, то значит, введенное число было нечетным и оно записывается в строку OddStr (строка 12). Значение счетчика увеличивается на 1.

В строке 15 результат выводится на экран. Функция Chr(13) - означает перевод курсора на новую строку.

Другая разновидность конструкции Do … Loop сначала выполняет операторы тела цикла, а затем проверяет условие после каждого выполнения. Общий синтаксис таков:

Do

Statements

Loop While condition

В качестве примера приведем эту же программу. Результат ее выполнения такой:

Sub Count_OddNums()

Conts ocTitle = "Подсчет нечетных числе"

Dim OddCount As Integer

Dim OddStr As String

Dim num

OddStr = "”

OddCount = 0

Do

Num = InputBox("Введите число:", ocTitle)

If num Mod 2) <> 0 Then

OddCount = OddCount + 1

OddStr = OddStr & num &

End If

Loop While OddCount < 10

MsgBox prompt:= "Вы ввели такие нечетные числа:" & Chr(13) &_OddStr, Title:=ocTitle

End Sub

Другие разновидности конструкции цикла аналогичны предыдущим, за исключением того, что цикл выполняется пока условие ложно.

Цикл не выполняется вообще или выполняется много раз:
Do Until условие

Операторы

Loop

Цикл выполняется, по крайней мере, 1 раз:

Do

Операторы

Loop Until условие

Приведем пример программы подсчитывающий сумму углов в замкнутом полигоне и вычисляющей его невязку. Результат выводится в десятичных долях градусов. Цикл Do выполняется до тех пор, пока пользователь не нажмет клавишу Enter, оставив поле ввода пустым, либо клавишу Cancel. В отличие от двух предыдущих циклов условие Until Angle = "” можно ставить лишь в конце цикла, так как первоначально переменная Angle не содержит никаких данных и тело цикла не выполняется ни разу. Впрочем, это ограничение моно обойти, если до начала цикла Do проинициализировать переменную Angle нулем.

Sub Poligon ()

Dim Grad As Integer

Dim Min As Integer

Dim Sec As Integer

Dim Deg As Double

Dim Summ As Double

Dim Count As Integer

Count = 0

Sum = 0

Do

On Error GoTo Line

Angle =InputBox("Введите внутренний угол","Ввод данных")

Grad = Int(Angle)

Min = Int(Angle - Grad)*100)

Sec = Round(((Angle - Grad)*100 - Min)*100)

Deg = Grad + Min / 60 + Sec / 3600

Sum = Summ + Deg

Count = Count + 1

Loop Until Angle = "”

Line

MsgBox "Сумма углов измеренных:" & Summ & Chr(13) &_ "Сумма углов теоретических:" & 180 * (Count - 2) &Chr(13) &_ "Невязка:" & Summ - 180 *(Count - 2)

End Sub

9.5.2. Конструкция For … Next

Циклы For … Next хорошо работают, когда заранее известно число повторений цикла. В данном цикле присутствует переменная, называемая счетчиком цикла, которая увеличивается или уменьшается на заданную величину при каждом повторении цикла. Общий синтаксис таков:

For counter = start To end [Dtep increment]

Statements

Next [counter]

Где counter представляет собой любую числовую переменную обычно с типом Integer или Long. Start определяется любым числовым выражением и определяет начальное значение переменной counter. End - конечное значение переменной counter. По умолчанию VBA каждый раз после завершения инструкций из цикла увеличивает переменную counter на 1. Другое значение увеличения (или уменьшения) можно задать с помощью необязательного ключевого слова Step. После него необходимо указать величину шага increment. Ключевое слово Next сигнализирует о том, что достигнут конец цикла.

Sub Poligon()

Const Title = "Ввод данных"

Dim Grad As Integer

Dim Min As Integer

Dim Sec As Integer

Dim Deg As Double

Dim Summ As Double

Sum = 0

Angle = 0

On Error GoTo Line

Num = InputBox("Введите число углов полигона:", Title)

For I = 1 To num

On Eror GoTo Line

Angle = InputBox("Введите внутренний угол", Title)

Grad = Int(Angle)

Min = Int((Angle - Gad) * 100)

Sec = Round(((Angle - Gad) * 100 - Min) * 100)

Deg = Grad + Min / 60 + Sec / 3600

Sum = sum + Deg

Next I

MsgBox "Сумма углов измеренных:" & Summ & Chr(13) &_ "Сумма углов теоретических:" & 180 * (num - 2) & Chr(13) &_ "Невязка" & Summ - 180 * (num - 2)

Line

MsgBox "Ошибка ввода данных"

End Sub

 

9.5.3. Конструкция For Each…Next

Цикл For Each…Next похож на цикл For … Next, но он повторяет группу операторов для каждого элемента из набора объектов или из массива вместо повторения операторов заданное число раз. Он особенно полезен, когда неизвестно, сколько элементов содержится в массиве.

Синтаксис конструкции цикла For Each…Next таков:

For Each element In group

Операторы

Next Element

В следующем примере - функция SheetExists, которая использует цикл For Each…Next, чтобы определить существует ли указанный лист в книге Excel.

1: Function SheetExists(sName As String) As Boolean

2: Dim aSheet As Object

3: SheetExists = False

4: For Each aSheet In ActiveWorkbook.Sheets

5: If (StrComp(aSheet.Name, sName, vb TextCompare) = 0) Then

6: SheetExists = True

7: End If

8: Next aSheet

9: End Function

10: Sub Test_SheetExists()

11: Dim uStr As String

12: uStr = InputBox(«Какой лист вы хотите найти в текущей книге»)

13: If SheetExists(uStr) Then

14: MsgBox «Лист» & uStr & «найден в текущей книге.»

15: Else

16: MsgBox «В текущей книге листа» & uStr & «нет»

17: End If

18: End Sub

Функция SheenExists имеет тип Boolean, т.е. возвращает True (истина) если рабочий лист с нужным пользователю именем существует и False (ложь) если его нет.

В строке 3 назначим функции значение False, на случай если листа не окажется.

В строке 4 начинается цикл. В нем группой является коллекция ActiveWorkbook.Sheets. То есть перебираются все листы (Sheets) в активной рабочей книге (ActiveWorkbook).

В строке 5 идет сравнение (текстовое) найденного листа с именем листа введенного пользователем. Если условие выполняется, то функция возвращает значение True.

 

Массивы

Массивы (arrays) позволяют ссылаться на ряд переменных с помощью имени и числа, называемого индексом массива (index). Часто это позволяет создавать более короткий или простой код, т.е. позволяет применять циклы.

Visual Basic создавать два вида массивов: массив фиксированного размера (fixed – size array), размер которого не изменяется, и динамический массив (dynamic array), размер которого может изменятся во время выполнения программы.









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2019 zdamsam.ru Размещенные материалы защищены законодательством РФ.