Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по VBA.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
592.38 Кб
Скачать

Id As Integer

Name As String * 20

End Type

Dim MyRecord As Record ' Объявляет переменную.

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' Закрывает файл перед повторным открытием в другом режиме.

Close #1

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

Open "TESTFILE" For Output Shared As #1

' Закрывает файл перед повторным открытием в другом режиме.

Close #1

Следующие инструкции открывают файл в режиме Binary для чтения; другие процессы не могут читать этот файл.

Open "TESTFILE" For Binary Access Read Lock Read As #1

Шаг 41 - Инструкция Option Base

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

Option Base {0 | 1}

Замечания Поскольку по умолчанию используется значение 0, инструкция Option Base никогда не является обязательной. Однако если она используется, эта инструкция должна появляться в модуле перед любой процедурой. Инструкция Option Base может задаваться в модуле только один раз и должна предшествовать описаниям массивов, включающих размерности. Предложение To в инструкциях Dim, Private, Public, ReDim и Static предоставляет более гибкий способ управления диапазоном индексов массива. Однако если нижняя граница индексов не задается явно в предложении To, можно воспользоваться инструкцией Option Base, чтобы установить используемую по умолчанию нижнюю границу индексов, равную 1. Нижняя граница значений индексов массивов, создаваемых с помощью функции Array, всегда равняется нулю; вне зависимости от инструкции Option Base. Инструкция Option Base действует на нижнюю границу индексов массивов только того модуля, в котором расположена сама эта инструкция.

Пример В данном примере инструкция Option Base используется для изменения нижней границы индексов массива, по умолчанию равной 0. Функция LBound возвращает минимальный доступный индекс указанной размерности массива. Инструкция Option Base используется только на уровне модуля.

Option base 1 ' Устанавливает нижнюю границу индексов массива равной 1.

Dim Lower

Dim MyArray(20), TwoDArray(3, 4) ' Объявляет переменные-массивы.

Dim ZeroArray(0 To 5) ' Явно задает границы индексов массива.

' Функция LBound определяет нижние границы индексов массивов.

Lower = LBound(MyArray) ' Возвращает 1.

Lower = LBound(TwoDArray, 2) ' Возвращает 1.

Lower = LBound(ZeroArray) ' Возвращает 0.

Шаг 42 - Инструкция Option Compare

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

Option Compare {Binary | Text | Database}

Замечания Инструкция Option Compare при ее использовании должна находиться в модуле перед любой процедурой. Инструкция Option Compare указывает способ сравнения строк (Binary, Text или Database) для модуля. Если модуль не содержит инструкцию Option Compare, по умолчанию используется способ сравнения Binary. Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки:

A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш

Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок:

(A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш)

Инструкция Option Compare Database может использоваться только в Microsoft Access. При этом задает сравнение строк на основе порядка сортировки, определяемого национальной настройкой базы данных, в которой производится сравнение строк.

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

' Устанавливает метод сравнения строковых данных Binary.

Option compare Binary ' Т.е. "AAA" < "aaa"

' Устанавливает метод сравнения строковых данных Text.

Option compare Text ' Т. е. "AAA" = "aaa".

Шаг 43 - Инструкция Option Explicit

Налагает на уровне модуля требование на явное описание всех переменных этого модуля.

Option Explicit

Замечания Инструкция Option Explicit при ее использовании должна находиться в модуле до любой процедуры. При использовании инструкции Option Explicit необходимо явно описать все переменные с помощью инструкций Dim, Private, Public, ReDim или Static. При попытке использовать неописанное имя переменной возникает ошибка во время компиляции. Когда инструкция Option Explicit не используется, все неописанные переменные имеют тип Variant, если используемый по умолчанию тип данных не задается с помощью инструкции DefТип. Пользуйтесь инструкцией Option Explicit, чтобы избежать неверного ввода имени имеющейся переменной или риска конфликтов в программе, когда область определения переменной не совсем ясна.

Пример В данном примере инструкция Option Explicit заставляет разработчика явно объявлять все переменные. При попытке использования неописанного имени переменной возникает ошибка во время компиляции. Инструкция Option Explicit используется только на уровне модуля.

Option explicit ' Заставляет явно объявлять все переменные.

Dim MyVar ' Объявляет переменную.

MyInt = 10 ' Необъявленная переменная - причина ошибки.

MyVar = 10 ' Использование объявленной переменной

' не приводит к ошибке.

Шаг 44 - Инструкция Option Private

При использовании в главном приложении, допускающем взаимные ссылки из разных проектов, инструкция Option Private Module позволяет запретить ссылки на содержимое модуля извне проекта. В главных приложениях, не допускающих такие ссылки, например в автономной версии Visual Basic, инструкция Option Private не имеет последствий.

Option Private Module

Инструкция Option Private при ее использовании должна находиться на уровне модуля перед любой процедурой. Когда модуль содержит инструкцию Option Private Module, общие элементы, например, переменные, объекты и определяемые пользователем типы, описанные на уровне модуля, остаются доступными внутри проекта, содержащего этот модуль, но недоступными для других приложений или проектов. Инструкция Option Private полезна только для главных приложений, которые поддерживают одновременную загрузку нескольких проектов и позволяют ссылки между загруженными проектами. Например, Microsoft Excel поддерживает загрузку нескольких проектов. В этом случае инструкция Option Private Module позволяет ограничить взаимную видимость проектов. Хотя Visual Basic допускает загрузку нескольких проектов, взаимные ссылки между проектами Visual Basic не разрешены.

Пример В данном примере инструкция Option Private используется на уровне модуля, чтобы указать, что весь модуль является личным. После применения инструкции Option Private Module символы, определенные на уровне модуля и не объявленные личными (Private), будут доступны другим модулям в том же проекте, однако будут недоступны другим проектам и приложениям.

Option private Module ' Объявляет модуль личным.

Шаг 45 - Инструкция Print #

Записывает отформатированные данные в файл с последовательным доступом.

Print #номерФайла, [списокВывода]

Параметры : номерФайла : Обязательный. Любой допустимый номер файла. списокВывода : Необязательный. Выражение или список выражений, которые следует напечатать. Ниже приведены допустимые значения аргумента списокВывода:

  • Spc(n) - Используется для вставки пробелов в файл; здесь n число пробелов, которые следует вставить.

  • Tab(n) - Устанавливает курсор в столбец с указанным номером; здесь n номер столбца. Tab без аргумента устанавливает курсор в начало следующей зоны печати.

  • выражение - Числовые выражения или строковые выражения, которые следует напечатать.

  • позиция - Указывает позицию, в которой следует печатать следующий символ. Для установки курсора сразу после последнего напечатанного символа используйте точку с запятой. Для установки курсора в столбец с указанным номером используйте Tab(n). Для установки курсора в начало следующей зоны печати используйте Tab без аргумента. Если аргумент позиция опущен, следующий символ печатается на следующей строке.

Замечания Данные, записанные с помощью инструкции Print #, обычно считываются из файла с помощью инструкций Line Input # или Input. Если аргумент списокВывода опущен, после аргумента номерФайла идет только разделитель списка, в файл печатается пустая строка. Для разделения выражений можно использовать пробелы или точки с запятой, которые в данной ситуации полностью эквивалентны. При выводе логических данных (тип Boolean) в файл записываются слова True или False. Ключевые слова True и False не переводятся, вне зависимости от национальной настройки. При выводе данных типа Date используется текущий краткий системный формат даты. Если компонент, описывающий дату или время, отсутствует или равен нулю, в файл записывается только имеющийся в наличии компонент. Если списокВывода имеет значение Empty, в файл ничего не записывается. Однако если списокВывода имеет значение Null, в файл записывается ключевое слово Null. Данные типа Error записываются в файл как Error кодОшибки. Ключевое слово Error не переводятся, вне зависимости от национальной настройки. Инструкция Print # записывает в файл данные, отформатированные с учетом национальной настройки. Это означает, в частности, что используется соответствующий разделитель целой и дробной части числа. Поскольку инструкция Print # записывает в файл отформатированные данные, необходимо использовать разделители данных, обеспечивающие правильную печать. Если Tab без аргумента используется для перемещения позиции вывода в начало следующей зоны печати, Print # также записывает пробелы между полями печати в файле. Для записи в файл данных, который в будущем планируется читать с помощью инструкции Input #, следует вместо инструкции Print # использовать инструкцию Write #. Использование инструкции Write # гарантирует, что записанные данные будут корректно разделены, что позволит прочитать их с помощью инструкции Input #. Кроме того, файлы, записанные с помощью инструкции Write #, могут быть корректно прочитаны при наличии любых национальных настроек.

Пример В данном примере инструкция Print # используется для записи данных в файл.

Open "TESTFILE" For Output As #1 ' Открывает файл для записи.

Print #1, "Пример" ' Печатает текст в файл.

Print #1, ' Печатает пустую строку в файл.

Print #1, "Зона 1"; Tab ; "Зона 2" ' Печатает в двух зонах печати.

Print #1, "Пример" ; " " ; "всем" ' Строки разделяются пробелом.

Print #1, Spc(5) ; "5 пробелов" ' Печатает пять пробелов.

Print #1, Tab(10) ; "Привет" ' Печатает слово в столбце 10.

' Присваивает значения типа Boolean, Date, Null и Error.

Dim MyBool, MyDate, MyNull, MyError

MyBool = False : MyDate = #February 12, 1969# : MyNull = Null

MyError = CVErr(32767)

' Вместо слов True, False, Null и Error записываются слова,

' соответствующие им в текущем языке. Текстовые константы даты

' записываются в кратком системном формате даты.

Print #1, MyBool ; " - логическое значение"

Print #1, MyDate ; " - дата"

Print #1, MyNull ; " - значение Null"

Print #1, MyError ; " - значение типа Error"

Шаг 46 - Инструкция Private

Применяется на уровне модуля для описания личных переменных и выделения памяти.

Private [WithEvents] имяПеременной[([индексы])] [As [New] тип] [,[WithEvents] имяПеременной[([индексы])] [As [New] тип]] . . .

Параметры WithEvents : Необязательный. Ключевое слово, указывающее, что имяПеременной является объектной переменной, которая используется при отклике на события, генерируемые объектом ActiveX. Применяется только в модулях класса. Пользователь имеет возможность описать с помощью ключевого слова WithEvents произвольное количество отдельных переменных, однако при этом не допускается создание массивов. Не допускается также использование ключевого слова New с ключевым словом WithEvents. ИмяПеременной : Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных. Индексы : Необязательный. Размерности переменной массива; допускается описание до 60 размерностей. Аргумент индексы использует следующий синтаксис:

[нижний To] верхний [,[нижний To] верхний] . . .

Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю. New : Необязательный. Ключевое слово, включающее возможность неявного создания объекта. Если указано ключевого слова New при описании объектной переменной, новый экземпляр объекта создается при первой ссылке на объект, поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set. Ключевое слово New нельзя использовать для описания переменных любых внутренних типов данных, для описания экземпляров зависимых объектов, а также вместе с ключевым словом WithEvents. Тип : Необязательный. Тип данных переменной; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal(в настоящее время не поддерживается), Date, String (для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, определяемый пользователем тип или объектный тип. Для каждой описываемой переменной следует использовать отдельное предложение As тип.

Замечания Переменные типа Private доступны только в модуле, в котором они описаны. Инструкция Private используется для описания типа данных переменной. Например, следующая инструкция описывает переменную типа Integer:

Private NumberOfEmployees As Integer

Инструкция Private применяется также для описания объектного типа переменной. Ниже описывается переменная для нового экземпляра листа электронной таблицы.

Private X As New Worksheet

Если ключевое слово New не используется при описании объектной переменной, то перед использованием объекта необходимо присвоить имеющийся объект с помощью инструкции Set переменной, ссылающейся на этот объект. До присвоения объекта описанная объектная переменная имеет специальное значение Nothing, которое указывает, что переменная не содержит ссылку на какой-либо определенный экземпляр объекта. Если для переменной не задан тип данных или тип объекта, и в модуле отсутствует инструкция DefТип, переменная по умолчанию получает тип Variant. Допускается также использование инструкции Private с пустыми скобками для описания динамического массива. После описания динамического массива пользуйтесь в процедуре инструкцией ReDim для определения числа размерностей и элементов этого массива. При попытке переопределить размерность для переменной массива, размеры которого были явным образом заданы в инструкции Private, Public, или Dim, возникает ошибка. При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями. Переменные типа Variant получают значение Empty. Каждый элемент переменной определяемого пользователем типа получает значение как самостоятельная переменная. При использовании инструкции Private в процедуре она обычно помещается в начало процедуры.

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

Private Number As Integer ' Личная переменная типа Integer.

Private NameArray(1 To 5) As String ' Личная переменная-массив.

' Несколько объявлений (Variant, Variant и Integer), все личные.

Private MyVar, YourVar, ThisVar As Integer

Close #1 ' Закрывает файл.

Шаг 47 - Инструкция Property Get

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

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

[инструкции]

[имя = выражение]

[Exit Property]

[инструкции]

[имя = выражение]

End Property

Параметры Public : Необязательный. Указывает, что процедура Property Get доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне проекта. Private : Необязательный. Указывает, что процедура Property Get доступна для других процедур только того модуля, в котором она описана. Static : Необязательный. Указывает, что локальные переменные процедуры Property Get сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static не действует на переменные, описанные вне процедуры Property Get, даже если они используются в этой процедуре. Имя : Обязательный. Имя процедуры Property Get, удовлетворяющее стандартным правилам именования переменных, за исключением того, что это имя может совпадать с именем процедуры Property Let или Property Set из этого же модуля. СписокАргументов : Необязательный. Список переменных, представляющий аргументы, которые передаются в процедуру Property Get при ее вызове. Имена нескольких переменных разделяются запятыми. Имя и тип данных каждого аргумента процедуры Property Get должны совпадать с соответствующими аргументами процедуры Property Let (если она имеется).

  • Optional - Необязательный. Указывает, что этот аргумент необязателен. При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional.

  • ByVal - Необязательный. Указывает, что этот аргумент передается по значению.

  • ByRef - Необязательный. Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в Visual Basic по умолчанию.

  • имяПеременной - Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.

  • тип - Необязательный. Тип данных аргумента, передаваемого в процедуру; допускаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant. Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип.

  • поУмолчанию - Необязательный. Любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.

Замечания Процедуры Property, тип которых не указан явно с помощью слов Public или Private, являются общими по умолчанию. Если не используется слово Static, значения локальных переменных не сохраняются между вызовами процедур. Все выполняемые команды должны находиться в процедурах. Не допускается определение процедуры Property Get внутри другой процедуры Property, Sub или Function. Инструкция Exit Property вызывает немедленный выход из процедуры Property Get. Выполнение программы продолжается с инструкции, следующей за инструкцией вызова процедуры Property Get. В любом месте процедуры Property Get допускается любое число инструкций Exit Property. Подобно процедурам Sub и Property Let, процедура Property Get является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов. Однако в отличие от процедуры Sub или Property Let, возможно использование процедуры Property Get в правой части выражения, аналогично использованию ключевого слова Function или имени свойства, когда требуется возвращение значения свойства.

Пример В данном примере инструкция Property Get используется для описания процедуры, предназначенной для определения значения свойства. Эта процедура возвращает текущий цвет пера как строку.

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Возвращает текущий цвет пера как строку.

Property Get PenColor() As String

Select Case CurrentColor

Case RED

PenColor = "Red"

Case GREEN

PenColor = "Green"

Case BLUE

PenColor = "Blue"

End Select

End Property

' Следующий код определяет цвет пера с помощью процедуры Property Get.

ColorName = PenColor

Шаг 48 - Инструкция Property Let

Описывает имя, аргументы и текст программы, составляющий тело Property Let procedure, которая присваивает значение свойству.

[Public | Private] [Static] Property Let имя [(списокАргументов)]

[инструкции]

[Exit Property]

[инструкции]

End Property

Параметры Public : Необязательный. Указывает, что процедура Property Let доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне проекта. Private : Необязательный. Указывает, что процедура Property Let доступна для других процедур только того модуля, в котором она описана. Static : Необязательный. Указывает, что локальные переменные процедуры Property Let сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static не действует на переменные, описанные вне процедуры Property Let, даже если они используются в этой процедуре. Имя : Oбязательный. Имя процедуры Property Let, удовлетворяющее стандартным правилам именования переменных, за исключением того, что это имя может совпадать с именем процедуры Property Get или Property Set из этого же модуля. СписокАргументов : Обязательный. Список переменных, представляющий аргументы, которые передаются в процедуру Property Let при ее вызове. Имена нескольких переменных разделяются запятыми. Имя и тип данных каждого аргумента процедуры Property Let (за исключением последнего) должен совпадать с соответствующими аргументами процедуры Property Get. Последний аргумент представляет значение, присваиваемое свойству с правой стороны выражения. Тип данных последнего (или иногда единственного) аргумента должен соответствовать типу, возвращаемому соответствующей процедурой Property Get.

  • Optional - Необязательный. Указывает, что этот аргумент необязателен. При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional. Отметим, что правая часть выражения Property Let не может иметь тип Optional.

  • ByVal - Необязательный. Указывает, что этот аргумент передается по значению.

  • ByRef - Необязательный. Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в Visual Basic по умолчанию.

  • имяПеременной - Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.

  • тип - Необязательный. Тип данных аргумента, передаваемого в процедуру; допускаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant. Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип.

  • поУмолчанию - Необязательный. Любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.

Инструкции : Необязательный. Любая группа инструкций, выполняемых в теле процедуры Property Let.

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

Замечания Процедуры Property, тип которых не указан явно с помощью слов Public или Private, являются общими по умолчанию. Если не используется слово Static, значения локальных переменных не сохраняются между вызовами процедур. Все выполняемые команды должны находиться в процедурах. Не допускается определение процедуры Property Let внутри другой процедуры Property, Sub или Function. Инструкция Exit Property вызывает немедленный выход из процедуры Property Let. Выполнение программы продолжается с инструкции, следующей за инструкцией вызова процедуры Property Let. В любом месте процедуры Property Let допускается любое число инструкций Exit Property. Подобно процедурам Function и Property Get, процедура Property Let является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов. Однако в отличие от процедур Function и Property Get, которые возвращают значения, процедуру Property Let можно использовать только в левой части выражения для присвоения свойства или в инструкции Let.

Пример

В данном примере инструкция Property Let используется для описания процедуры, предназначенной для изменения значения свойства. Это свойство задает цвет пера.

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Эта процедура задает цвет пера.

' Переменная CurrentColor, определенная на уровне модуля,

' содержит числовое значение, указывающее нужный цвет.

Property Let PenColor(ColorName As String)

Select Case ColorName ' Анализирует строку ColorName.

Case "Red"

CurrentColor = RED ' Красный цвет.

Case "Green"

CurrentColor = GREEN ' Зеленый цвет.

Case "Blue"

CurrentColor = BLUE ' Синий цвет.

Case Else

CurrentColor = BLACK ' Значение по умолчанию.

End Select

End Property

' Следующий код задает цвет пера с помощью процедуры Property Let.

PenColor = "Red"

Шаг 49 - Инструкция Property Set

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

[Public | Private] [Static] Property Set имя [(списокАргументов)]

[инструкции]

[Exit Property]

[инструкции]

End Property

Параметры Optional : Необязательный. Указывает, что при вызове процедуры аргумент может задаваться или не задаваться. Public : Необязательный. Указывает, что процедура Property Set доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне проекта. Private : Необязательный. Указывает, что процедура Property Set доступна для других процедур только того модуля, в котором она описана. Static : Необязательный. Указывает, что локальные переменные процедуры Property Set сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static не действует на переменные, описанные вне процедуры Property Set, даже если они используются в этой процедуре. Имя : Обязательный. Имя процедуры Property Set, удовлетворяющее стандартным правилам именования переменных, за исключением того, что это имя может совпадать с именем процедуры Property Get или Property Let из этого же модуля. СписокАргументов : Обязательный. Список переменных, представляющий аргументы, которые передаются в процедуру Property Set при ее вызове. Несколько имен переменных разделяются запятыми. Последний аргумент представляет собой ссылку на объект, используемую с правой стороны присвоения.

  • Optional - Необязательный. Указывает, что этот аргумент необязателен. При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional. Отметим, что правая часть выражения Property Set не может иметь тип Optional.

  • ByVal - Необязательный. Указывает, что этот аргумент передается по значению.

  • ByRef - Необязательный. Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в Visual Basic по умолчанию.

  • имяПеременной - Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.

  • тип - Необязательный. Тип данных аргумента, передаваемого в процедуру; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant. Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип.

  • поУмолчанию - Необязательный. Любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.

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

Каждая инструкция Property Set должна определять по крайней мере один аргумент определяемой процедуры. Этот аргумент (или последний аргумент, если имеется более одного аргумента) содержит реальную ссылку на объект, которая будет присвоена свойству при вызове процедуры, определенной с помощью инструкции Property Set. Не допускается описание этого аргумента с типом Optional.

Замечания Процедуры Property, тип которых не указан явно с помощью слов Public или Private, являются общими по умолчанию. Если не используется слово Static, значения локальных переменных не сохраняются между вызовами процедур. Все выполняемые команды должны находиться в процедурах. Не допускается определение процедуры Property Set внутри другой процедуры Property, Sub или Function. Инструкция Exit Property вызывает немедленный выход из процедуры Property Set. Выполнение программы продолжается с инструкции, следующей за инструкцией вызова процедуры Property Set. В любом месте процедуры Property Set допускается любое число инструкций Exit Property. Подобно процедурам Function и Property Get, процедура Property Set является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов. Однако в отличие от процедур Function и Property Get, которые возвращают значения, процедуру Property Set можно использовать только в левой части присвоения ссылки на объект (в инструкции Set).

Пример В данном примере инструкция Property Set используется для описания процедуры, которая задает ссылку на объект.

' Свойству Pen могут быть присвоены значения свойства Pen разных объектов.

Property Set Pen(P As Object)

Set CurrentPen = P ' Присваивает свойство Pen объекту.

End Property

Шаг 50 - Инструкция Public

Применяется на уровне модуля для описания общих переменных и выделения памяти.

Public [WithEvents] имяПеременной[([индексы])] [As [New] тип] [,[WithEvents] имяПеременной[([индексы])] [As [New] тип]] . . .

Параметры WithEvents : Необязательный. Ключевое слово, указывающее, что имяПеременной является объектной переменной, которая используется при отклике на события, генерируемые объектом ActiveX. Применяется только в модулях класса. Пользователь имеет возможность описать с помощью ключевого слова WithEvents произвольное количество отдельных переменных, однако при этом не допускается создание массивов. Не допускается также использование ключевого слова New с ключевым словом WithEvents. ИмяПеременной : Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных. Индексы : Необязательный. Размерности переменной массива; допускается описание до 60 размерностей. Аргумент индексы использует следующий синтаксис:

[нижний To] верхний [,[нижний To] верхний] . . .

Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю. New : Необязательный. Ключевое слово, включающее возможность неявного создания объекта. Если указано ключевого слова New при описании объектной переменной, новый экземпляр объекта создается при первой ссылке на объект, поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set. Ключевое слово New нельзя использовать для описания переменных любых внутренних типов данных, для описания экземпляров зависимых объектов, а также вместе с ключевым словом WithEvents. Тип : Необязательный. Тип данных переменной; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String, (для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, определяемый пользователем тип или объектный тип. Для каждой описываемой переменной следует использовать отдельное предложение As тип.

Замечания Переменные, описанные с помощью инструкции Public, доступны для всех процедур во всех модулях всех приложений, если только не действует инструкция Option Private Module. В последнем случае переменные являются общими только внутри проекта, в котором они содержатся. Не допускается использование инструкции Public в модуле класса для описания строковых переменных фиксированной длины. Инструкция Public предназначена для описания типа данных переменной. Например, следующая инструкция описывает переменную с типом Integer:

Public NumberOfEmployees As Integer

Инструкция Public предназначена также для описания объектных переменных. Далее приводится описание переменной для нового экземпляра листа электронной таблицы.

Public X As New Worksheet

Если при описании объектной переменной не используется ключевое слово New, то для использования объекта, на который ссылается переменная, существующий объект должен быть с помощью инструкции Set присвоен переменной. До присвоения объекта описанная объектная переменная имеет специальное значение Nothing, которое указывает, что она не содержит ссылку на какой-либо определенный экземпляр объекта. Имеется также возможность применять инструкцию Public с пустыми скобками для описания динамического массива. После описания динамического массива, пользуйтесь инструкцией ReDim в процедуре для определения числа размерностей и элементов массива. При попытке переопределить размерности переменной-массива, чей размер был явно указан в инструкции Private, Public или Dim, возникает ошибка. Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant. При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями. Переменные типа Variant получают при инициализации значение Empty. Каждый элемент переменной типа, определяемого пользователем, при инициализации получает значение, которые он получил бы, если бы являлся отдельной переменной.

Пример В данном примере инструкция Public используется на уровне модуля в общем разделе стандартного модуля для явного объявления переменных общими. Общие переменные доступны всем процедурам во всех модулях во всех приложениях (если инструкция Option Private Module отключена).

Public Number As Integer ' Общая переменная типа Integer.

Public NameArray(1 To 5) As String ' Общая переменная-массив.

' Несколько объявлений (Variant, Variant и Integer), все общие.

Public MyVar, YourVar, ThisVar As Integer

Шаг 51 - Инструкция Put

Записывает содержимое переменной в файл на диске.

Put [#]номерФайла, [номерЗаписи], имяПеременной

Параметры номерФайла :Обязательный. Любой допустимый номер файла. НомерЗаписи : Необязательный. Номер записи (режим Random) или номер байта (режим Binary), с которого следует начать запись. ИмяПеременной : Обязательный. Имя переменной, содержащей данные, которые следует записать в файл.

Замечания Данные, записанные с помощью инструкции Put, обычно считываются из файла с помощью инструкции Get. Первой записи (или байту) файла соответствует номер 1, второй 2 и т.п. Если аргумент номерЗаписи опущен, записывается запись (или байт), на которую указатель был установлен после выполнения последней инструкции Get или Put переведен с помощью функции Seek. Наличие запятых-разделителей является обязательным, например:

Put #4,,FileBuffer

Для файлов, открытых в режиме Random, применимы следующие правила: Даже если длина данных, подлежащих записи, меньше длины записи, указанной в предложении Len инструкции Open, инструкция Put начинает запись каждой следующей записи с начала этой записи. Пространство между концом одной записи и началом следующей записи заполняется текущим содержимым буфера файла. Поскольку объем данных, используемых для заполнения, не может быть определен с достаточной степенью уверенности, рекомендуется, чтобы длина записи совпадала с длиной читаемых данных. Если длина данных, подлежащих записи, больше длины записи, указанной в предложении Len инструкции Open, возникает ошибка. При записи строки переменной длины инструкция Put сначала записывает 2-байтовый дескриптор, содержащий длину строки, а затем содержимое этой переменной. Таким образом, длина записи, указанная в предложении Len инструкции Open, должна по крайней мере на 2 байта превышать фактическую длину этой строки. При записи переменной Variant числового типа инструкция Put сначала записывает 2 байта, указывающие подтип (VarType) типа Variant, а затем содержимое этой переменной. Например, при чтении переменной Variant подтипа VarType 3, инструкция Put записывает 6 байт: 2 байта, указывающие тип переменной Variant как VarType 3 (Long), и 4 байта, содержащие значение типа Long. Длина записи, указанная в предложении Len инструкции Open, должна по крайней мере на 2 байта превышать фактическое число байт, необходимое для размещения этой переменной. С помощью инструкции Put можно записать массив типа Variant на диск, однако, нельзя записать скаляр типа Variant, содержащий массив. Кроме того, инструкцию Put нельзя использовать для записи объектов на диск. При записи переменной Variant подтипа VarType 8 (String) инструкция Put сначала записывает 2 байта, указывающие VarType, потом 2 байта, указывающие длину строки, а затем содержимое строки. Длина записи, указанная в предложении Len инструкции Open, должна крайней мере на 4 байта превышать фактическую длину этой строки. При записи динамического массива инструкция Put сначала записывает дескриптор, длина которого равняется (2 + 8 * числоРазмерностей) байт. Длина записи, указанная в предложении Len инструкции Open, должна быть больше либо равна сумме всех байтов, необходимых для размещения массива данных и дескриптора массива. Например, для размещения описанного ниже массива требуется 118 байт:

Dim MyArray(1 To 5,1 To 10) As Integer

118 байт распределяются следующим образом: 18 байт для дескриптора (2 + 8 * 2), и 100 байт для данных (5 * 10 * 2). При записи массива фиксированной длины инструкция Put записывает только данные. Дескриптор не записывается. При записи переменной любого другого типа (кроме строки переменной длины и переменной типа Variant), инструкция Put записывает только данные. Длина записи, указанная в предложении Len инструкции Open, должна быть больше либо равна длине записываемых данных. Инструкция Put записывает элементы определяемых пользователем типов так, будто это отдельные переменные, за исключением того, что пространство между элементами не заполняется текущим содержимым буфера файла. На диске динамический массив типа, определенного пользователем (записанный с помощью инструкции Put) предваряется дескриптором, длина которого равняется (2 + 8 * числоРазмерностей) байт. Длина записи, указанная в предложении Len инструкции Open, должна быть больше либо равна сумме всех байтов, необходимых для размещения отдельных элементов, в том числе, массивов и их дескрипторов. Для файлов, открытых в режиме Binary, применимы все перечисленные выше правила, за исключением следующих: Предложение Len инструкции Open игнорируется. Инструкция Put записывает все переменные на диск непрерывно, т.е. без заполнения пространства между записями текущим содержимым буфера файла. При записи любых массивов, кроме являющихся элементами типов, определяемых пользователем, инструкция Put записывает только данные. Дескриптор не записывается. При записи строк переменной длины, не являющихся элементами типов, определяемых пользователем, 2-байтовый дескриптор не записывается. Число записываемых байт равняется числу символов, содержащихся в строке. Например, следующие инструкции запишут 10 байт в файл, которому соответствует номер 1:

VarString$ = String$(10," ")

Put #1,,VarString$

Пример В данном примере инструкция PutRecord

Type Record ' Тип, определенный пользователем.