litceymos.ru   1 ... 9 10 11 12

3.37 Правила присвоения имен в языке VBA

При присвоении имен процедурам, константам, переменным, и аргументам в модуле VBA используются следующие правила:


  • Имена должны начинаться с буквы.

  • Имя не может содержать пробел, точку (.), восклицательный знак (!) или символы @, &, $, #.

  • Имена не должны содержать более 255 символов.

  • Как правило, не следует использовать имена, совпадающие с названиями функций, инструкций, и методов языка VBA, так как при этом прекращается выделение в тексте одноименных ключевых слов языка. Чтобы использовать встроенные функции языка, инструкции или методы, имена которых конфликтуют с присвоенным пользователем именем, их необходимо явно указывать. Для этого перед именем встроенной функции, инструкции или метода, должно стоять имя связанной с ними библиотеки типов. Например, если имеется переменная с именем Left, то функция Left должна вызываться как VBA.Left.

  • Не допускается использование повторяющихся имен на одном уровне области определения. Нельзя, например, описать две переменных с именем age в одной процедуре. Однако описание личной переменной age и переменной уровня процедуры age внутри одного модуля допустимо.

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

3.38 Работа с приложениями


Язык VBA позволяет создавать новые объекты и загружать существующие объекты из многих приложений Microsoft. Другие приложения также могут предоставлять объекты, которые пользователь может создавать с помощью VBA. Дополнительные сведения содержатся в документации приложения.

Для создания нового объекта или получения существующего объекта из другого приложения используются функции CreateObject
и GetObject:

' Запуск Microsoft Excel и создание нового листа.

Set ExcelWorksheet = CreateObject("Excel.Sheet")

' Запуск Microsoft Excel и открытие существующего листа.

Set ExcelWorksheet = GetObject("SHEET1.XLS")

' Запуск Microsoft Word.

Set WordBasic = CreateObject("Word.Basic")

Большинство приложений предоставляют также методы Exit
или Quit, которые закрывают приложение, независимо от того отображается оно на экране или нет. Дополнительные сведения по объектам, методам и свойствам, предоставляемым приложением содержатся в документации по приложению.

Некоторые приложения позволяют использовать ключевое слово New для создания объекта любого класса, который существует в библиотеке типов. Например:

Dim X As New Field

В данном случае Field является примером класса из библиотеки типов доступа к данным. Новый экземпляр объекта Field создается с помощью этого синтаксиса. Информация о том, какие классы объектов могут быть созданы таким образом, содержится в документации по приложению.

3.39 Процедура Function


Процедура Function представляет собой последовательность инструкций языка VBA, ограниченных инструкциями Function
и End Function. Процедура Function подобна процедуре Sub, однако в отличие от последней она возвращает значения. Процедура Function может получать аргументы, как например константы, переменные, или выражения, передаваемые ей вызывающей процедурой. Если процедура Function не имеет аргументов, ее инструкция Function должна содержать пустые скобки. Возврат значения осуществляется путем его присвоения имени функции в одной или нескольких инструкциях процедуры.

В следующем примере функция Celsius пересчитывает градусы Фаренгейта в градусы Цельсия. Когда функция вызывается процедурой Main, переменная, содержащая значение аргумента, передается функции. Результат вычислений возвращается вызывающей процедуре и выводится в окно сообщения.


Sub Main()

temp = Application.InputBox(Prompt:= _

"Введите температуру в градусах Фаренгейта.", Type:=1)

MsgBox "Температура равна " & Celsius(temp) & " градусов Цельсия."

End Sub

Function Celsius(fDegrees)

Celsius = (fDegrees - 32) * 5 / 9

End Function

3.40 Процедура Property


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

  • Процедуры Property создают допускающие только чтение свойства для форм, стандартных модулей и модулей класса.

  • Процедуры Property следует использовать вместо переменных Public в программе, которая должна выполняться после задания значение свойства.

  • В отличие от переменных Public процедуры Property могут иметь справочные строки, присвоенные им в окне Просмотр объектов.

Когда создается процедура Property, она становится свойством модуля, содержащего эту процедуру. В языке VBA имеются три следующих типа процедур Property:

Процедура

Описание

Property Let

Присваивает значение свойству.

Property Get

Возвращает значение свойства.

Property Set

Задает ссылку на объект.


Синтаксис процедуры Property :

[ Public | Private] [Static] Property имя_свойства_ [(список_аргументов)] [As тип]


инструкции

End Property

Процедуры Property обычно используются попарно: Property Let с Property Get и Property Set с Property Get. Описание одной процедуры Property Get подобно описанию свойства, доступного только для чтения. Использование всех трех процедур Property вместе полезно только для переменных Variant, так как только могут содержать как объект, так и другую информацию о типах данных. В отличие от Property Let процедура Property Set предназначена для работы с объектами.

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


Процедура

Синтаксис описания

Property Get

Property Get имя(1, …, n) As тип

Property Let

Property Let имя(1, …,,,, n, n+1)

Property Set

Property Set имя(1, …, n, n+1)


Первый аргумент и все следующие вплоть до последнего (1, …, n) должны иметь одно и то же имя и тип данных во всех одноименных процедурах Property.

Описание процедуры Property Get имеет на один аргумент меньше, чем связанные описания Property Let и Property Set. Тип данных процедуры Property Get должен быть тем же самым, что и тип последнего аргумента (n+1) в связанных описаниях Property Let и Property Set. Например, если описывается следующая процедура Property Let, в описании Property Get должны использоваться аргументы с тем же самым именем и типом данных, как аргументы в процедуре Property Let.


Property Let Names(intX As Integer, intY As Integer, varZ As Variant)

‘Выполняемая инструкция.

End Property

Property Get Names(intX As Integer, intY As Integer) As Variant

‘Выполняемая инструкция.

End Property

Тип данных последнего аргумента в описании Property Set должен быть или объектным типом или Variant.

3.41 Процедура Sub


Sub Процедура Sub представляет собой последовательность инструкций языка VBA, ограниченных инструкциями Sub и End Sub, которая выполняет действия, но не возвращает значение. Процедура Sub может получать аргументы, как например константы, переменные, или выражения, передаваемые ей вызывающей процедурой. Если процедура Sub не имеет аргументов, инструкция Sub должна содержать пустые скобки.

В следующей процедуре Sub содержатся комментарии, объясняющие каждую строк.

' Описывает процедуру с именем GetInfo

' Эта процедура Sub не имеет аргументов

Sub GetInfo()

' Описывает строковую переменную с именем answer

Dim answer As String

' Присваивает переменой answer возвращаемое значение функции

answer = InputBox(Prompt:="Как Ваше имя?")

' Условная инструкция If...Then...Else

If answer = Empty Then

' Вызов функции MsgBox

MsgBox Prompt:="Введите имя."

Else

' Функция MsgBox объединена с переменной answer

MsgBox Prompt:="Имя переменной " & answer

' Завершает инструкцию If...Then...Else

End If

' Завершает процедуру Sub

End Sub

3.42 Инструкции VBA

Инструкция VBA является полной командой. Она может содержать ключевые слова, операторы, переменные, константы и выражения. Любая инструкция относится к одной из следующих категорий:


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

  • Инструкции присвоения, которые присваивают значение или выражение переменной или константе.

  • Исполняемые инструкции, которые инициируют действие. Они могут выполнить метод или функцию, а также могут организовать повторение или ветвление блоков программы. Эти инструкции часто содержат математические или условные операторы.

3.43 Продолжение инструкций на несколько строк


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

Sub DemoBox() 'Эта процедура описывает строковую переменную,

' присваивает ей значение Мария и выводит

' сцепленное сообщение.

Dim myVar As String

myVar = "Иван"

MsgBox Prompt:="Привет " & myVar, _

Title:="Приветствие", _

Buttons:=vbExclamation

End Sub

3.44 Комментарии


Комментарии позволяют объяснить процедуру или определенную инструкцию всем читателям программы. Когда процедура выполняется, VBA игнорирует комментарии. Строки комментария начинаются с апострофа (') или со слова Rem, за которым следует пробел. Их можно вносить в любое место процедуры. Чтобы внести комментарий в строку, на которой расположена инструкция, после инструкции следует поставить апостроф, а за ним комментарий. По умолчанию комментарии выделяются в тексте зеленым цветом.

3.45 Инструкции присвоения


Инструкции присвоения присваивают выражение переменной или константе. Инструкции присвоения всегда включают знак равенства (=). В следующем примере переменной yourName присваивается возвращаемое значение функции InputBox.

Sub Question()


Dim yourName As String

yourName = InputBox("Как Ваше имя?")

MsgBox "Ваше имя - " & yourName

End Sub

Инструкция Let необязательна и чаще всего опускается. К примеру, предыдущую инструкцию присвоения можно написать следующим образом:

Let yourName = InputBox("Как Ваше имя?").

Для присвоения объекта переменной, описанной как объект, применяется инструкция Set. Ключевое слово Set обязательно. В следующем примере инструкция Set присваивает диапазон на листе Sheet1 объектной переменной myCell:

Sub ApplyFormat()

Dim myCell As Range

Set myCell = Worksheets("Sheet1").Range("A1")

With myCell.Font

.Bold = True

.Italic = True

End With

End Sub

Инструкции, задающие значение свойства также являются инструкциями присвоения. В следующем примере задается свойство Bold объекта Font для активной ячейки:

ActiveCell.Font.Bold = True

3.46 Инструкции описания


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

Следующий пример содержит три описания.

Sub ApplyFormat()

Const limit As Integer = 33

Dim myCell As Range

' Другие инструкции

End Sub

Инструкция Sub (с парной ей инструкцией End Sub) описывает процедуру с именем ApplyFormat. Все инструкции, заключенные между Sub и End Sub выполняются всегда, когда вызывается или выполняется процедура ApplyFormat.

Инструкция Const описывает константу limit, задавая ей тип данных Integer и значение 33.


Инструкция Dim описывает переменную myCell. Тип данных объектный, в данном случае это объект Microsoft Excel Range. Переменную можно описать как объект, представленный в текущем приложении. Инструкции Dim относятся к типу инструкций, используемых для описания переменных. Другие ключевые слова, используемые для описания, - это ReDim, Static, Public, Private, и Const.

3.47 Исполняемые инструкции


Исполняемая инструкция инициирует действие. Она может выполнить метод или функцию, а также может организовать повторение или ветвление блоков программы. Исполняемые инструкции часто содержат математические или условные операторы.

В следующем примере используется инструкция For Each...Next для итераций по всем ячейкам диапазона с именем MyRange на листе Sheet1 текущей книги Microsoft Excel. Переменная c представляет собой ячейку в семействе ячеек, содержащемся в MyRange.

Sub ApplyFormat()

Const limit As Integer = 33

For Each c In Worksheets("Sheet1").Range("MyRange").Cells

If c.Value > limit Then

With c.Font

.Bold = True

.Italic = True

End With

End If

Next c

MsgBox "Все сделано!"

End Sub

Инструкция If...Then...Else в этом примере проверяет значение ячейки. Если значение больше 33, инструкция With задает свойства Bold и Italic объекту Font для этой ячейки. Инструкция If...Then...Else завершается инструкцией End If.

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

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

Функция MsgBox (которая отображает встроенное окно диалога VBA) выводит на экран сообщение о том, что выполнение процедуры Sub закончилось.

3.48 Запись данных в файлы


При работе с большим количеством данных часто бывает удобно записывать данные в файл или считывать из файла. Инструкция Open позволяет напрямую создать файл и получить к нему доступ. Инструкция Open обеспечивает три типа доступа к файлам:

  • Последовательный доступ (режимы Input, Output и Append режимы), обычно используемый для записи текстовых файлов, например протоколов ошибок или отчетов.

  • Произвольный доступ (режим Random), используемый при необходимости считать и записать данные в файл без его закрытия. Файлы произвольного доступа содержат данные в виде записей, которые упрощают и ускоряют поиск нужных сведений.

  • Двоичный доступ (режим Binary), используется, когда требуется считать или записать байт в любую позицию в файле, например при сохранении или отображении точечных изображений.

Примечание. Инструкцию Open не следует использовать для доступа к собственным типам файлов приложений. Например, не следует использовать Open для доступа к документу Word, к электронной таблице Microsoft Excel или к базе данных Microsoft Access, поскольку это вызовет потерю целостности и порчу файла.

В следующей таблице показываются инструкции, обычно используемые для записи данных в файлы и для чтения данных из файлов.

Тип доступа

Запись данных

Чтение данных

Последовательный

Print #, Write #

Input #

Произвольный

Put

Get

Двоичный


Put

Get



3.49 Проверка синтаксических ошибок


Если после набора строки и нажатия клавиши ENTER строка выделяется красным цветом (может появиться также сообщение об ошибке), необходимо выяснить, что неправильно в данной инструкции и исправить ее.

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ





Array 37

Boolean 34, 41

Caption 29

Collection 28

Const 39, 62

Dim 25, 33, 35, 36, 37, 42, 62

Do...Loop 42, 43, 44

Exit 44, 46, 47, 54

Exit Do 44

Exit For 46, 47

Field 55

For Each...Next 46, 47, 62

For...Next 38, 44, 46

Forms 28

Function 25, 49, 50, 55

If...Then...Else 44, 46, 47, 48, 49, 51, 63

Let 60

Main 55

MsgBox 51, 63

New 9, 10, 54

Open 63, 64

Option Base 37

Optional 26, 27

ParamArray 31

Private 33, 62

Property 56, 57

Public 56, 62

Quit 54

ReDim 62

Rem 60

Select Case 44, 46, 47, 48, 51

Set 24, 61

Single 38, 41

Static 25, 62

Step 45

Sub 25, 26, 50, 55, 58, 61, 63

Until 43

Variant 24, 31, 34, 35, 37, 38, 41, 57, 58

Visual Basic 5

With 52, 63

Workbooks 28

#Const 40

инструкции 24, 25, 34, 35, 38, 39, 40, 42, 43, 44, 46, 47, 48, 50, 51, 53, 54, 56, 59, 60, 62, 63, 64

макрос 8, 9, 10, 11, 12, 13, 22

переменная 24, 25, 27, 32, 33, 34, 35, 36, 53, 55



<< предыдущая страница