Пример использования директивы #Const

В данном примере директива #Const применяется для описания условной константы компилятора, используемой в конструкциях #If...#Else...#End If.

#Const DebugVersion = 1	' Будет давать значение True в блоке #If.


Пример использования #If...Then...#Else

В данном примере в конструкции #If...Then...#Else используются ссылки на условные константы компилятора для определения того, нужно ли компилировать определенные инструкции.

' Если Mac имеет значение True, выполняются инструкции после #If.

#If Mac Then

'. Разместите здесь только инструкции Macintosh.

'.

'.

' Иначе, если это 32-разрядная программа Windows:

#ElseIf Win32 Then

'. Разместите здесь только 32-разрядные инструкции Windows.

'.

'.

' Иначе, если ни один из предыдущих вариантов не подходит:

#Else

'. Разместите здесь инструкции для других платформ.

'.

'.

#End If


Директива #Const

Используется для определения условной константы компилятора языка Visual Basic.

Синтаксис

#Const имяКонстанты = выражение

Синтаксис директивы компилятора #Const содержит следующие элементы:

Элемент	Описание
имяКонстанты	Обязательный; Variant (String).  Имя константы; должно соответствовать стандартным соглашениям об именах переменных.
выражение	Обязательный.  Константа в явном представлении (литерал), другая условная константа компилятора или любая их комбинация, которая включает любые арифметические или логические операторы, за исключением Is.
Дополнительные сведения

Условные константы компилятора всегда являются личными (типа Private) по отношению к модулю, в котором они встречаются.  Невозможно создать константы компилятора типа Public с помощью директивы #Const.  Общие (Public) константы компилятора могут быть созданы только через интерфейс пользователя.

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

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


Директива #If...Then...#Else

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

Синтаксис

#If выражение Then

инструкции

[#ElseIf выражение-n Then

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

[#Else

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

#End If

Синтаксис директивы #If...Then...#Else содержит следующие элементы:

Элемент	Описание
выражение	Обязательный.  Любое выражение, состоящее только из одной или нескольких условных констант компилятора, констант в явном представлении (литералов) и операторов, которое имеет значение True или False.
инструкции	Обязательный.  Строки программы Visual Basic или директивы компилятора, которые выполняются, если выражение имеет значение True.
выражение-n	Необязательный.  Любое выражение, состоящее только из одной или нескольких условных констант компилятора, литералов и операторов, которое имеет значение True или False.
инструкции_elseif	Необязательный.  Строки программы Visual Basic или директивы компилятора, которые выполняются, если выражение-n имеет значение True.
инструкции_else	Необязательный.  Одна или несколько строк программы или директив компилятора, которые оцениваются, если ни одно из предыдущих выражений или выражений-n не имеет значение True.
Дополнительные сведения

Директива #If...Then...#Else работает так же, как и конструкция If...Then...Else, с тем лишь отличием, что не существует строчной формы директив #If, #Else, #ElseIf и #End If. Это означает, что никакие другие команды не могут появляться в одной строке с любой из этих директив.  Условная компиляция обычно используется при компиляции одной и той же программы для различных платформ.  Она используется также, чтобы предотвратить появление отладочных строк программы в выполняемом файле.  Строки программы, исключаемые при условной компиляции, полностью удаляются из готового выполняемого файла, и поэтому не влияют на его размер или быстродействие.

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

Примечание.   Инструкция Option Compare не влияет на выражения в директивах #If и #ElseIf.  При оценке выражений в условных директивах компилятора всегда предполагается, что задана инструкция Option Compare Text.


Константы Visual Basic

Для упрощения программирования в Visual Basic для приложений определены различные константы.  Следующие константы можно использовать в любом месте кода вместо фактических значений:

Константы календаря

Константы цвета

Константы компилятора

Константы даты

Константы функций Dir, GetAttr и SetAttr

Константы функции IMEStatus

Константы функций InStr и StrComp

Keycode Constants

Другие константы

Константы функции MsgBox

Константы функции QueryClose

Константы функции Shell

Константы функции StrConv

Системные цветовые константы

Константы VarType


Константы календаря

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

Константа	Значение	Описание переменной
vbCalGreg	0	Соответствует использованию Григорианского календаря
vbCalHijri	1	Соответствует использованию календаря Хиджра.


Константы компилятора

В языке Visual Basic для приложений определены константы, предназначенные для использования только с директивой #If...Then...#Else.  Эти константы функционально эквивалентны константам, определенным с помощью директивы #Const, за исключением того, что они имеют глобальную область определения, т.е. применимы в любом месте проекта.

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

Константа	Значение	Описание
Win16	True	Указывает, что среда разработчика является 16-разрядной.
Win32	False	Указывает, что среда разработчика не является 32-разрядной.
В 32-разрядной среде разработчика определены следующие константы компилятора:

Константа	Значение	Описание
Win16	False	Указывает, что среда разработчика не является 16-разрядной.
Win32	True	Указывает, что среда разработчика является 32-разрядной.
Примечание.   Поскольку описанные выше константы определяются в языке Visual Basic, определение констант с теми же именами запрещено на любом уровне.


Константы даты

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

Значения аргументов

Аргумент firstdayofweek может иметь следующие значения:

Константа	Значение	Описание
vbUseSystem	0	Используется значение NLS API.
vbSunday	1	Воскресенье (по умолчанию).
vbMonday	2	Понедельник.
vbTuesday	3	Вторник.
vbWednesday	4	Среда.
vbThursday	5	Четверг.
vbFriday	6	Пятница.
vbSaturday	7	Суббота.
Аргумент firstweekofyear может иметь следующие значения:

Константа	Значение	Описание
vbUseSystem	0	Используется значение NLS API.
VbFirstJan1	1	Неделя, которая содержит 1 января (по умолчанию).
vbFirstFourDays	2	Первая неделя, которая содержит по крайней мере четыре дня нового года.
vbFirstFullWeek	3	Первая полная неделя года.
Возвращаемые значения

Константа	Значение	Описание
vbSunday	1	Воскресенье.
vbMonday	2	Понедельник.
vbTuesday	3	Вторник.
vbWednesday	4	Среда.
vbThursday	5	Четверг.
vbFriday	6	Пятница.
vbSaturday	7	Суббота.


Константы функций Dir, GetAttr и SetAttr

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

Константа	Значение	Описание
vbNormal	0	Обычный (по умолчанию для функций Dir и SetAttr)
vbReadOnly	1	Только чтение.
VbHidden	2	Скрытый.
VbSystem	4	Системный.
VbVolume	8	Метка тома.
VbDirectory	16	Каталог или папка.
VbArchive	32	Файл был изменен после последнего резервирования.


Константы функции IMEStatus

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

Константы для японской национальной настройки:

Константа	Значение	Описание
vbIMENoOp	0	IME не установлен.
vbIMEOn	1	IME включен.
vbIMEOff	2	IME отключен.
vbIMEDisable	3	IME отключен.
vbIMEHiragana	4	Хирагана (двухбайтовые символы - 2Б).
vbIMEKatakanaDbl	5	Катакана (2Б).
vbIMEKatakanaSng	6	Катакана (однобайтовые символы - 1Б).
vbIMEAlphaDbl	7	Алфавитно-цифровые (2Б).
vbIMEAlphaSng	8	Алфавитно-цифровые (1Б).
Константы для китайской национальной настройки (традиционный и упрощенный язык):

Константа	Значение	Описание
vbIMENoOp	0	IME не установлен.
vbIMEOn	1	IME включен.
vbIMEOff	2	IME отключен.
Для корейской национальной настройки первые пять битов возвращаемого значения задаются следующим образом:

Бит	Значение	Описание	Значение	Описание
0	0	IME не установлен.	1	IME установлен.
1	0	IME отключен.	1	IME включен.
2	0	Английский режим.	1	Режим Hangeul.
3	0	Режим Banja (1Б).	1	Режим Junja (2Б).
4	0	Обычный режим.	1	Режим Hanja.


Константы функций Instr и StrComp

Следующие константы определены в библиотеке типов Visual Basic для приложений и могут использоваться в любом месте программы  вместо их значений:

Константа	Значение	Описание
vbBinaryCompare	0	Выполнение сравнения двоичных значений.
vbTextCompare	1	Выполнение сравнения символов.
vbDatabaseCompare	2	В Microsoft Access, выбор режима сравнения на основании сведений, сохраняемых в базе данных.


Другие константы

Следующие константы определены в библиотеке типов Visual Basic для приложений и могут использоваться в любом месте программы  вместо их значений:

Константа	Эквивалент	Описание
vbCrLf	Chr(13) + Chr(10)	Комбинация символов возврата каретки и перевода строки.
vbCr	Chr(13)	Символ возврата каретки.
vbLf	Chr(10)	Символ перевода строки.
vbNullChar	Chr(0)	Символ с кодом 0.
vbNullString	Строка с кодом 0	Не совпадает с пустой строкой (""); используется для вызова внешних процедур.
vbTab	Chr(9)	Символ табуляции.
vbBack	Chr(8)	Символ Backspace.
vbFormFeed	Chr(12)	Не используется в Microsoft Windows.
vbVerticalTab	Chr(11)	Не используется в Microsoft Windows.


Константы функции MsgBox

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

Аргументы функции MsgBox

Константа	Значение	Описание
vbOKOnly	0	Только кнопка "OK" (по умолчанию).
vbOKCancel	1	Кнопки "OK" и "Отмена" (Cancel).
vbAbortRetryIgnore	2	Кнопки "Прервать" (Abort), "Повторить" (Retry) и "Пропустить" (Ignore).
vbYesNoCancel	3	Кнопки "Да" (Yes), "Нет" (No) и "Отмена" (Cancel).
vbYesNo	4	Кнопки "Да" (Yes) и "Нет" (No).
vbRetryCancel	5	Кнопки "Повторить" (Retry) и "Отмена" (Cancel).
vbCritical	16	Значок "Критическое сообщение".
vbQuestion	32	Значок "Предупреждающий запрос".
vbExclamation	48	Значок "Предупреждающее сообщение".
vbInformation	64	Значок "Информационное сообщение".
vbDefaultButton1	0	Основной является первая кнопка (по умолчанию).
vbDefaultButton2	256	Основной является вторая кнопка.
vbDefaultButton3	512	Основной является третья кнопка.
vbDefaultButton4	768	Основной является четвертая кнопка.
vbApplicationModal	0	Модальное окно сообщения на уровне приложения (по умолчанию).
vbSystemModal	4096	Модальное окно сообщения на уровне системы.
Возвращаемые значения функции MsgBox

Константа	Значение	Нажатая кнопка
vbOK	1	OK
vbCancel	2	Отмена (Cancel)
vbAbort	3	Прервать (Abort)
vbRetry	4	Повторить (Retry)
vbIgnore	5	Пропустить (Ignore)
vbYes	6	Да (Yes)
vbNo	7	Нет (No)


Константы функции Shell

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

Константа	Значение	Описание
vbHide	0	Окно скрыто, и фокус передается скрытому окну.
VbNormalFocus	1	Окно имеет фокус и восстанавливает свои стандартные размер и положение.
VbMinimizedFocus	2	Окно отображается в виде значка, имеющего фокус.
VbMaximizedFocus	3	Окно развертывается на полный экран и получает фокус.
VbNormalNoFocus	4	Восстанавливаются предыдущие размер и положение окна.  Текущее окно остается активным.
VbMinimizeNoFocus	6	Окно отображается в виде значка.  Текущее окно остается активным.


Константы функции StrConv

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

Константа	Значение	Описание
vbUpperCase	1	Преобразует строку к верхнему регистру.
vbLowerCase	2	Преобразует строку к нижнему регистру.
vbProperCase	3	Преобразует первую букву каждого слова в строке в прописную.
vbWide	4	Преобразует однобайтовые символы в двухбайтовые.  Применяется в национальных настройках для стран Дальнего Востока.
vbNarrow	8	Преобразует двухбайтовые символы в однобайтовые.  Применяется в национальных настройках для стран Дальнего Востока.
vbKatakana	16	Преобразует символы хираганы в символы катаканы.  Только для японского языка.
vbHiragana	32	Преобразует символы катаканы в символы хираганы.  Только для японского языка.
vbUnicode	64	Преобразует строку в Unicode с помощью используемой по умолчанию системной кодовой страницы.
vbFromUnicode	128	Преобразует строку из Unicode с помощью используемой по умолчанию системной кодовой страницы.


Константы VarType

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

Константа	Значение	Описание переменной
vbEmpty	0	Не инициализирована (по умолчанию).
VbNull	1	Не содержит допустимые данные.
VbInteger	2	Целое число
vbLong	3	Длинное целое.
VbSingle	4	Число с плавающей точкой (8 байт).
VbDouble	5	Число с плавающей точкой (16 байт).
vbCurrency	6	Денежное значение.
vbDate	7	Дата.
vbString	8	Строка.
vbObject	9	Объект
vbError	10	Ошибка.
vbBoolean	11	Логическое значение.
vbVariant	12	Variant (используется только для массивов значений типа Variant).
vbDataObject	13	Объект доступа к данным.
vbDecimal	14	Decimal.
vbByte	17	Byte.
vbArray	8192	Массив.


Константы цвета

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

Константа	Значение	Описание переменной
vbBlack	0x0	Черный
vbRed	0xFF	Красный
vbGreen	0xFF00	Зеленый
vbYellow	0xFFFF	Желтый
vbBlue	0xFF0000	Синий
vbMagenta	0xFF00FF	Розовый
vbCyan	0xFFFF00	Голубой
vbWhite	0xFFFFFF	Белый


Константы кодов клавиатуры

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

Константа	Значение	Описание переменной
vbKeyLButton	0x1	Левая кнопка мыши
vbKeyRButton	0x2	Правая кнопка мыши
vbKeyCancel	0x3	Клавиша CANCEL
vbKeyMButton	0x4	Средняя кнопка мыши
vbKeyBack	0x8	Клавиша BACKSPACE
vbKeyTab	0x9	Клавиша TAB
vbKeyClear	0xC	Клавиша CLEAR
vbKeyReturn	0xD	Клавиша ENTER
vbKeyShift	0x10	Клавиша SHIFT
vbKeyControl	0x11	Клавиша CTRL
vbKeyMenu	0x12	Клавиша MENU
vbKeyPause	0x13	Клавиша PAUSE
vbKeyCapital	0x14	Клавиша CAPS LOCK
vbKeyEscape	0x1B	Клавиша ESC
vbKeySpace	0x20	Клавиша SPACEBAR
vbKeyPageUp	0x21	Клавиша PAGE UP
vbKeyPageDown	0x22	Клавиша PAGE DOWN
vbKeyEnd	0x23	Клавиша END
vbKeyHome	0x24	Клавиша HOME
vbKeyLeft	0x25	Клавиша СТРЕЛКА ВЛЕВО
vbKeyUp	0x26	Клавиша СТРЕЛКА ВВЕРХ
vbKeyRight	0x27	Клавиша СТРЕЛКА ВПРАВО
vbKeyDown	0x28	Клавиша СТРЕЛКА ВНИЗ
vbKeySelect	0x29	Клавиша SELECT
vbKeyPrint	0x2A	Клавиша PRINT SCREEN
vbKeyExecute	0x2B	Клавиша EXECUTE
vbKeySnapshot	0x2C	Клавиша SNAPSHOT
vbKeyInsert	0x2D	Клавиша INSERT
vbKeyDelete	0x2E	Клавиша DELETE
vbKeyHelp	0x2F	Клавиша HELP
vbKeyNumlock	0x90	Клавиша NUM LOCK
Коды клавиш A - Z соответствуют кодам символов в таблице ASCII:

Константа	Значение	Описание переменной
vbKeyA	65	Клавиша A
vbKeyB	66	Клавиша B
vbKeyC	67	Клавиша C
vbKeyD	68	Клавиша D
vbKeyE	69	Клавиша E
vbKeyF	70	Клавиша F
vbKeyG	71	Клавиша G
vbKeyH	72	Клавиша H
vbKeyI	73	Клавиша I
vbKeyJ	74	Клавиша J
vbKeyK	75	Клавиша K
vbKeyL	76	Клавиша L
vbKeyM	77	Клавиша M
vbKeyN	78	Клавиша N
vbKeyO	79	Клавиша O
vbKeyP	80	Клавиша P
vbKeyQ	81	Клавиша Q
vbKeyR	82	Клавиша R
vbKeyS	83	Клавиша S
vbKeyT	84	Клавиша T
vbKeyU	85	Клавиша U
vbKeyV	86	Клавиша V
vbKeyW	87	Клавиша W
vbKeyX	88	Клавиша X
vbKeyY	89	Клавиша Y
vbKeyZ	90	Клавиша Z
Коды клавиш 0 - 9 соответствуют кодам символов в таблице ASCII:

Константа	Значение	Описание переменной
vbKey0	48	Клавиша 0
vbKey1	49	Клавиша 1
vbKey2	50	Клавиша 2
vbKey3	51	Клавиша 3
vbKey4	52	Клавиша 4
vbKey5	53	Клавиша 5
vbKey6	54	Клавиша 6
vbKey7	55	Клавиша 7
vbKey8	56	Клавиша 8
vbKey9	57	Клавиша 9
В следующей таблице приводятся коды клавиш для цифровой клавиатуры:

Константа	Значение	Описание переменной
vbKeyNumpad0	0x60	Клавиша 0
vbKeyNumpad1	0x61	Клавиша 1
vbKeyNumpad2	0x62	Клавиша 2
vbKeyNumpad3	0x63	Клавиша 3
vbKeyNumpad4	0x64	Клавиша 4
vbKeyNumpad5	0x65	Клавиша 5
vbKeyNumpad6	0x66	Клавиша 6
vbKeyNumpad7	0x67	Клавиша 7
vbKeyNumpad8	0x68	Клавиша 8
vbKeyNumpad9	0x69	Клавиша 9
vbKeyMultiply	0x6A	Клавиша УМНОЖЕНИЕ (*)
vbKeyAdd	0x6B	Клавиша ПЛЮС (+)
vbKeySeparator	0x6C	Клавиша ENTER
vbKeySubtract	0x6D	Клавиша МИНУС (–)
vbKeyDecimal	0x6E	Клавиша ТОЧКА (.)
vbKeyDivide	0x6F	Клавиша ДЕЛЕНИЕ (/)
Функциональные клавиши представлены следующими константами:

Константа	Значение	Описание переменной
vbKeyF1	0x70	Клавиша F1
vbKeyF2	0x71	Клавиша F2
vbKeyF3	0x72	Клавиша F3
vbKeyF4	0x73	Клавиша F4
vbKeyF5	0x74	Клавиша F5
vbKeyF6	0x75	Клавиша F6
vbKeyF7	0x76	Клавиша F7
vbKeyF8	0x77	Клавиша F8
vbKeyF9	0x78	Клавиша F9
vbKeyF10	0x79	Клавиша F10
vbKeyF11	0x7A	Клавиша F11
vbKeyF12	0x7B	Клавиша F12
vbKeyF13	0x7C	Клавиша F13
vbKeyF14	0x7D	Клавиша F14
vbKeyF15	0x7E	Клавиша F15
vbKeyF16	0x7F	Клавиша F16


Константы функции QueryClose

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

Константа	Значение	Описание переменной
vbFormControlMenu	0	Выбор пользователем команды Закрыть в системном меню формы.
vbFormCode	1	Вызов из программы события "Выгрузка" (Unload).
vbAppWindows	2	Завершение текущего сеанса Microsoft Windows.
vbAppTaskManager	3	Закрытие приложения Windows диспетчером приложений.
vbFormMDIForm	4	Дочерняя форма интерфейса MDI закрывается в связи с закрытием формы интерфейса MDI. Не поддерживается для UserForm.


Системные цветовые константы

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

Константа	Значение	Описание переменной
vbScrollBars	0x80000000	Цвет полосы прокрутки
vbDesktop	0x80000001	Цвет рабочего стола
vbActiveTitleBar	0x80000002	Цвет заголовка активного окна
vbInactiveTitleBar	0x80000003	Цвет заголовка неактивного окна
vbMenuBar	0x80000004	Цвет фона меню
vbWindowBackground	0x80000005	Цвет фона окна
vbWindowFrame	0x80000006	Цвет рамки окна
vbMenuText	0x80000007	Цвет текста меню
vbWindowText	0x80000008	Цвет текста окна
vbTitleBarText	0x80000009	Цвет кнопок управления окном
vbActiveBorder	0x8000000A	Цвет границы активного окна
vbInactiveBorder	0x8000000B	Цвет границы неактивного окна
vbApplicationWorkspace	0x8000000C	Цвет фона для приложений интерфейса MDI
vbHighlight	0x8000000D	Цвет фона выбранных элементов управления
vbHighlightText	0x8000000E	Цвет текста выбранных элементов управления
vbButtonFace	0x8000000F	Цвет затенения для передней части кнопок управления
vbButtonShadow	0x80000010	Цвет затенения для края кнопок управления
vbGrayText	0x80000011	Серый (неактивный) текст
vbButtonText	0x80000012	Цвет текста кнопок
vbInactiveCaptionText	0x80000013	Цвет текста активной подписи
vb3DHighlight	0x80000014	Цвет выделения для трехмерных элементов
vb3DDKShadow	0x80000015	Цвет затенения для трехмерных элементов
vb3DLight	0x80000016	Второй светлый цвет для трехмерных элементов после vb3Dhighlight
vbInfoText	0x80000017	Цвет текста всплывающей подсказки
vbInfoBackground	0x80000018	Цвет фона всплывающей подсказки


Пример использования инструкции Call

В данном примере показано, как использовать инструкцию Call для передачи управления процедуре Sub, внутренней функции, процедуре библиотеки динамической компоновки (DLL) и процедуре программного ресурса Macintosh.

' Вызов процедуры Sub.

Call PrintToDebugWindow("Всем привет")

' Предыдущая инструкция передает управление следующей процедуре Sub.

Sub PrintToDebugWindow(AnyString)

Debug.Print AnyString	' Вывод в окно отладки.

End Sub

' Вызов внутренней функции. Значение, возвращаемое этой функцией,

' не используется.

Call Shell(AppName, 1)	' AppName содержит путь

' к выполняемому файлу.

' Вызов процедуры DLL Microsoft Windows.  Инструкция Declare должна

' быть личной (Private) в модуле класса, но не в стандартном модуле.

Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

Sub CallMyDll()

Call MessageBeep(0)	' Вызов процедуры Windows DLL.

MessageBeep 0	' Повторный вызов без

' ключевого слова Call.

End Sub

' Вызов программного ресурса Macintosh.

Declare Sub MessageAlert Lib "MyHd:MyAlert" Alias "MyAlert" (ByVal N _

As Integer)

Sub CallMyCodeResource()

Call MessageAlert(0)	' Вызов программного ресурса Macintosh.

MessageAlert 0	' Повторный вызов без

' ключевого слова Call.

End Sub


Пример использования функции Choose

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

Function GetChoice(Ind As Integer)

GetChoice = Choose(Ind, "Быстрый", "Единый", "Федеральный")

End Function


Пример использования функции DoEvents

В данном примере функция DoEvents используется для передачи управления операционной системе каждый раз после выполнения 1000 итераций цикла. DoEvents возвращает число открытых форм Visual Basic, однако только в том случае, если главным приложением является Visual Basic.

' Создает переменную для хранения числа загруженных

' и видимых форм Visual Basic.

Dim I, OpenForms

For I = 1 To 150000	' Начало цикла.

If I Mod 1000 = 0 Then 	' Если цикл выполнен 1000 раз.

OpenForms = DoEvents	' Передает управление

' операционной системе.

End If

Next I	' Увеличивает счетчик цикла.


Пример использования инструкции Do...Loop

В данном примере показано, как можно использовать инструкции Do...Loop.  Внутренний цикл Do...Loop выполняется 10 раз, затем логической переменной присваивается значение False, после чего он преждевременно завершается с помощью инструкции Exit Do.  Внешний цикл завершается немедленно после проверки значения логической переменной.

Dim Check, Counter

Check = True: Counter = 0	' Инициализирует переменные.

Do	' Внешний цикл.

Do While Counter < 20	' Внутренний цикл.

Counter = Counter + 1	' Увеличивает счетчик.

If Counter = 10 Then	' Если условие истинно.

Check = False	' Присваивает переменной

' значение False.

Exit Do	' Завершает внутренний цикл.

End If

Loop

Loop Until Check = False	' Немедленно завершает внешний цикл.


Пример использования инструкции End

В данном примере инструкция End используется для завершения выполнения программы, если пользователь введет неправильный пароль.

Sub Form_Load

Dim Password, Pword

PassWord = "МОЙ_ПАРОЛЬ"

Pword = InputBox("Введите пароль

If Pword <> PassWord Then

MsgBox "Неправильный пароль"

End

End If

End Sub


Пример использования инструкции Exit

В данном примере инструкция Exit используется для завершения цикла For...Next, цикла Do...Loop и процедуры Sub.

Sub ExitStatementDemo()

Dim I, MyNum

Do	' Бесконечный цикл.

For I = 1 To 1000	' Цикл выполняется 1000 раз.

MyNum = Int(Rnd * 1000)	' Генерирует случайное число.

Select Case MyNum	' Анализирует случайное число.

Case 7: Exit For	' Если 7, завершает цикл For...Next.

Case 29: Exit Do	' Если 29, завершает цикл Do...Loop.

Case 54: Exit Sub	' Если 54, завершает процедуру Sub.

End Select

Next I

Loop

End Sub


Пример использования инструкции For Each...Next

В данном примере инструкция For Each...Next просматривает свойство Text каждого элемента семейства, чтобы найти строку "Привет". В данном примере MyObject -- объект, который имеет свойство Text и является элементом семейства MyCollection. Оба имени используются исключительно в иллюстративных целях.

Dim Found, MyObject, MyCollection

Found = False	' Инициализирует переменную.

For Each MyObject In MyCollection	' Просматривает каждый элемент.

If MyObject.Text = "Привет" Then	' Если Text содержит "Привет",

Found = True	' Присваивает значение True.

Exit For	' Завершает цикл.

End If

Next


Пример использования инструкции For...Next

В данном примере инструкция For...Next используется для создания строки, содержащей 10 наборов по 10 цифр (от 0 до 9); каждый набор отделяется от следующего одним пробелом.  Внешний цикл использует переменную-счетчик, которая уменьшается на единицу при каждом выполнении цикла.

Dim Words, Chars, MyString

For Words = 10 To 1 Step -1 	' Цикл выполняется 10 раз.

For Chars = 0 To 9	' Цикл выполняется 10 раз

MyString = MyString & Chars	' Добавляет цифру в конец строки.

Next Chars	' Увеличивает счетчик

MyString = MyString & " "	' Добавляет пробел.

Next Words


Пример использования инструкции GoSub...Return

В данном примере инструкция GoSub используется для вызова подпрограммы из процедуры Sub.  Инструкция Return возвращает управление инструкции, следующей сразу после инструкции GoSub .  Инструкция Exit Sub используется, чтобы управление не было случайно передано подпрограмме.

Sub GosubDemo()

Dim Num

' Запрашивает число у пользователя.

Num = InputBox("Введите положительное четное число.")

' Вызывает подпрограмму только в том случае,

' если было введено положительное число.

If Num > 0 Then GoSub MyRoutine

Debug.Print Num

Exit Sub	' Запрещает передачу управления процедуре.

MyRoutine:

Num = Num/2	' Выполняет деление.

Return	' Возвращает управление инструкции,

End Sub	' следующей после инструкции GoSub.


Пример использования инструкции GoTo

В данном примере инструкция GoTo используется для перехода к строкам с указанными метками внутри процедуры.

Sub GotoStatementDemo()

Dim Number, MyString

Number = 1 	' Инициализирует переменную.

' Анализирует Number и переходит к соответствующей метке.

If Number = 1 Then GoTo Line1 Else GoTo Line2

Line1:

MyString = "Number =1"

GoTo LastLine	' Переход к метке LastLine.

Line2:

' Следующая инструкция не будет выполнена никогда.

MyString = "Number =2"

LastLine:

Debug.Print MyString	' Выводит "Number = 1"

' в окно отладки.

End Sub


Пример использования инструкции If...Then...Else

В данном примере показано использование как блоковой, так и однострочной форм инструкции If...Then...Else, а также проиллюстрировано использование инструкции If TypeOf...Then...Else.

Dim Number, Digits, MyString

Number = 53	' Инициализирует переменную.

If Number < 10 Then

Digits = 1

ElseIf Number < 100 Then

' Условие является истинным, поэтому выполняется следующая инструкция.

Digits = 2

Else

Digits = 3

End If

' Использует однострочную форму для присвоения значения.

If Digits = 1 Then MyString = "Один" Else MyString = "Больше 1"

Использует конструкцию If TypeOf для определения, является ли элемент управления, переданный процедуре текстовым полем.

Sub ControlProcessor(MyControl As Control)

If TypeOf MyControl Is CommandButton Then

Debug.Print "Передан " & TypeName(MyControl)

ElseIf TypeOf MyControl Is CheckBox Then

Debug.Print "Передан " & TypeName(MyControl)

ElseIf TypeOf MyControl Is TextBox Then

Debug.Print "Передан " & TypeName(MyControl)

End If

End Sub


Пример использования функции IIf

В данном примере функция IIf используется для оценки значения аргумента TestMe процедуры CheckIt.  Если это число больше 1000, возвращается слово "Большое"; в противном случае возвращается слово "Маленькое".

Function CheckIt (TestMe As Integer)

CheckIt = IIf(TestMe > 1000, "Большое", "Маленькое")

End Function


Пример использования инструкций On...GoSub и On...GoTo

В данном примере инструкции On...GoSub и On...GoTo используются для перехода к подпрограммам и строкам с указанными метками, соответственно.

Sub OnGosubGotoDemo()

Dim Number, MyString

Number = 2	' Инициализирует переменную.

' Переход к Sub2.

On Number GoSub Sub1, Sub2	' Управление возвращается сюда после

' выполнения On...GoSub.

On Number GoTo Line1, Line2	' Переход к метке Line2.

' Управление не возвращается сюда после выполнения On...GoTo.

Exit Sub

Sub1:

MyString = "Sub1" : Return

Sub2:

MyString = "Sub2" : Return

Line1:

MyString = "Метка Line1"

Line2:

MyString = "Метка Line2"

End Sub


Пример использования функции Partition

Предположим, что таблица "Заказы" содержит поле "Доставка".  Описанный ниже запрос на выборку подсчитывает число заказов, расходы на доставку которых попадают в каждый диапазон.  Сначала функция Partition задает границы диапазонов, а затем функция SQL Count подсчитывает число заказов, попадающих в каждый диапазон.  В данном примере аргументы функции Partition имеют следующие значения: начало = 0, конец = 500, интервал = 50.  Первым диапазоном будет 0:49, и так далее до 500.

SELECT DISTINCTROW Partition([Доставка],0, 500, 50) AS Range,

Count(Заказы.Доставка) AS Count

FROM Заказы

GROUP BY Partition([Доставка],0,500,50);


Пример использования инструкции Select Case

В данном примере инструкция Select Case используется для анализа значения переменной.  Второе предложение Case содержит значение анализируемой переменной и следовательно выполняется только инструкция, связанная с этим предложением.

Dim Number

Number = 8	' Инициализирует переменную.

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

Case 1 To 5	' Число между 1 и 5.

Debug.Print "Между 1 и 5"

' Это предложение Case является единственным истинным.

Case 6, 7, 8	' Число между 6 и 8.

Debug.Print "Между 6 и 8"

Case Is > 8 And Number < 11	' 9 или 10.

Debug.Print "Больше 8"

Case Else	' Другие значения.

Debug.Print "Вне интервала 1 -- 10"

End Select


Пример использования функции Shell

В данном примере функция Shell используется для запуска приложения, указанного пользователем.  На Macintosh следует использовать функцию MacID, чтобы гарантировать, что приложение запустится даже в том случае, если имя файла приложения изменится.  Функция Shell недоступна на Macintosh версий более ранних, чем System 7.0.

' В Microsoft Windows:

' 1 в качестве второго аргумента открывает приложение в окне обычного

' размера и передает ему фокус.

Dim RetVal

RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)	' Запускает калькулятор.

' На Macintosh:

' Обе инструкции запускают Microsoft Excel.

RetVal = Shell("Microsoft Excel")	' Указано имя файла.

RetVal = Shell(MacID("XCEL"))	' Указана сигнатура.


Пример использования инструкции Stop

В данном примере инструкция Stop используется для организации паузы на каждой итерации цикла For...Next.

Dim I

For I = 1 To 10	' Начинает цикл For...Next.

Debug.Print I	' Выводит I в окно отладки.

Stop	' Пауза в конце каждой итерации.

Next I


Пример использования функции Switch

В данном примере функция Switch используется для определения названия страны по названию города.

Function MatchUp (CityName As String)

Matchup = Switch(CityName = "Лондон", "Англия", CityName _

= "Рим", "Италия", CityName = "Москва", "Россия")

End Function


Пример использования инструкции While...Wend

В данном примере инструкция While...Wend используется для увеличения переменной-счетчика.  Инструкции в цикле выполняются до тех пор, пока указанное условие не True.

Dim Counter

Counter = 0	' Инициализирует переменную.

While Counter < 20	' Анализирует значение счетчика.

Counter = Counter + 1	' Увеличивает счетчик.

Wend	' Завершает цикл While,

' если Counter > 19.

Debug.Print Counter	' Выводит 20 в окно отладки.


Пример использования инструкции With

В данном примере инструкция With используется для выполнения набора инструкций над одним объектом.  Объект MyObject и его свойства используются исключительно в иллюстративных целях.

With MyObject

.Height = 100	' Эквивалентно MyObject.Height = 100.

.Caption = "Привет"	' Эквивалентно MyObject.Caption = "Привет".

With .Font

.Color = Red	' Эквивалентно MyObject.Font.Color = Red.

.Bold = True	' Эквивалентно MyObject.Font.Bold = True.

End With

End With


Инструкция Call

Передает управление в процедуру Sub, процедуру Function или процедуру библиотеки динамической компоновки (DLL).

Синтаксис

[Call] имя [списокАргументов]

Синтаксис инструкции Call содержит следующие элементы:

Элемент	Описание
Call	Необязательное ключевое слово.  Если указано, необходимо заключить списокАргументов в круглые скобки.  Например:
	Call MyProc(0)
имя	Обязательный.  Имя вызываемой процедуры.
списокАргументов	Необязательный.  Разделяемый запятыми список переменных, массивов или выражений, передаваемых в процедуру.  Компоненты спискаАргументов могут включать ключевые слова ByVal или ByRef для описания того, каким образом аргументы будут рассматриваться вызываемой процедурой.  Однако ключевые слова ByVal и ByRef могут использоваться с инструкцией Call только при вызове процедуры из библиотеки динамической компоновки.
Дополнительные сведения

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

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


Функция Choose

Возвращает значение, выбранное из списка аргументов.

Синтаксис

Choose(индекс, вариант-1[, вариант-2, ... [, вариант-n]])

Синтаксис функции Choose содержит следующие элементы:

Элемент	Описание
индекс	Обязательный.  Числовое выражение или поле, значением которого является число, лежащее между 1 и числом элементов в списке.
вариант	Обязательный.  Выражение типа Variant, содержащее один из элементов списка.
Дополнительные сведения

Функция Choose возвращает значение из списка, выбранное на основании значения аргумента индекс.  Если индекс равняется 1, возвращается первый элемент списка, если индекс равняется 2, возвращается второй элемент списка и т.п.

Функцию Choose можно использовать для выбора одного из возможных значений, представленных в виде списка.  Например, если аргумент индекс имеет значение 3, вариант-1 = "один", вариант-2 = "два", а вариант-3 = "три", то Choose возвратит "три".  Таким образом удобно обрабатывать значения, выбираемые из группы переключателей.

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

Функция Choose возвращает значение Null, если индекс меньше 1 или больше числа элементов в списке.

Если индекс не является целым числом, он округляется до ближайшего целого числа перед выполнением операции.


Функция DoEvents

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

Синтаксис

DoEvents( )

Дополнительные сведения

Функция DoEvents возвращает значение типа Integer, представляющее число открытых форм в независимо установленных версиях языка Visual Basic.  Во всех других приложениях функция DoEvents возвращает нуль.

DoEvents передает управление операционной системе.  Управление возвращается после завершения обработки операционной системой всех событий из своей очереди и после передачи всех нажатий клавиш из очереди SendKeys.

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

Внимание!   Проверьте, что процедура, в которой имеет место отказ от управления с помощью функции DoEvents, не выполняется вновь из другой части программы до возврата управления после первого вызова DoEvents.  Это может привести к непредсказуемым результатам.  Кроме того, не следует использовать функцию DoEvents, если другие приложения могут взаимодействовать с данной процедурой непредсказуемым способом во время передачи управления системе.


Инструкция Do...Loop

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

Синтаксис

Do [{While | Until} условие]
[инструкции]
[Exit Do]
[инструкции]

Loop

Допустим также другой синтаксис:

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

Loop [{While | Until} условие]

Синтаксис инструкции Do Loop содержит следующие элементы:

Элемент	Описание
условие	Необязательный.  Числовое выражение или строковое выражение, которое имеет значение True или False.  Если условие имеет значение Null,то аргумент условие рассматривается как значение False.
инструкции	Одна или несколько инструкций, выполнение которых повторяется, пока условие имеет значение True или пока оно не приобретет значение True.
Дополнительные сведения

В любом месте управляющей структуры Do…Loop может быть размещено любое число инструкций Exit Do, обеспечивающих альтернативные возможности выхода из цикла Do…Loop.  Часто используемая вместе с определением некоторого условия (например, If…Then), инструкция Exit Do передает управление инструкции, непосредственно следующей за инструкцией Loop.

Во вложенных циклах Do…Loop инструкция Exit Do передает управление циклу охватывающего уровня по отношению к циклу, в котором она вызывается.


Инструкция End

Завершает процедуру или блок.

Синтаксис

End

End Function

End If

End Property

End Select

End Sub

End Type

End With

Синтаксис инструкции End имеет следующие формы:

Инструкция	Описание
End	Завершает выполнение.  Никогда не является обязательной, но может быть помещена в любое место процедуры для закрытия файлов, открытых с помощью инструкции Open, и для очистки переменных.
End Function	Обязательная инструкция для завершения конструкции Function.
End If	Обязательная инструкция для завершения конструкции If…Then…Else.
End Property	Обязательная инструкция для завершения конструкций Property Let, Property Get или Property Set.
End Select	Обязательная инструкция для завершения конструкции Select Case.
End Sub	Обязательная инструкция для завершения конструкции Sub.
End Type	Обязательная инструкция для завершения описания определяемого пользователем типа (конструкция Type).
End With	Обязательная инструкция для завершения конструкции With.
Дополнительные сведения

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

Примечание.   Инструкция End мгновенно останавливает выполнение программы, не вызывая события Unload, QueryUnload или Terminate, а также другую программу Visual Basic. Программы, связанные с событиями Unload, QueryUnload и Terminate форм и модулей классов, не выполняются. Созданные из модулей классов объекты уничтожаются, открытые инструкцией Open файлы закрываются, а использованная программой память освобождается. Ссылки на объекты, содержащиеся в других программах, нарушаются.

Инструкция End предоставляет способ вызвать непредусмотренную остановку программы. Для нормального завершения программы Visual Basic необходимо выгрузить все формы. Программа закрывается, как только не станет других программ, содержащих ссылки на объекты, созданные из общих модулей классов, и отсутствует выполнение кода программы.


Инструкция Exit

Завершает выполнение блока программы Do…Loop, For...Next, Function, Sub или Property.

Синтаксис

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

Синтаксис инструкции Exit имеет следующие формы:

Инструкция	Описание
Exit Do	Предоставляет способ завершения цикла Do...Loop.  Может использоваться только внутри конструкции Do...Loop.  Exit Do передает управление инструкции, следующей за инструкцией Loop.  При использовании во вложенных циклах Do...Loop, инструкция Exit Do передает управление циклу охватывающего уровня по отношению к циклу, в котором она вызывается.
Exit For	Предоставляет способ завершения цикла For.  Может применяться только в цикле For...Next или For Each...Next.  Exit For передает управление инструкции, следующей за инструкцией Next.  При использовании во вложенных циклах For, инструкция Exit For передает управление циклу охватывающего уровня по отношению к циклу, в котором она вызывается.
Exit Function	Немедленно завершает выполнение процедуры Function, в которой появляется эта инструкция.  Выполнение продолжается с инструкции, следующей за инструкцией, в которой вызывалась процедура Function.
Exit Property	Немедленно завершает выполнение процедуры Property, в которой появляется эта инструкция.  Выполнение продолжается с инструкции, следующей за инструкцией, в которой вызывалась процедура Property.
Exit Sub	Немедленно завершает выполнение процедуры Sub, в которой появляется эта инструкция.  Выполнение продолжается с инструкции, следующей за инструкцией, в которой вызывалась процедура Sub.
Дополнительные сведения

Не следует путать инструкции Exit с инструкциями End.  Инструкция Exit не определяет конец структуры.


Инструкция For Each...Next

Повторяет выполнение группы инструкций для каждого элемента массива или семейства.

Синтаксис

For Each элемент In группа
[инструкции]
[Exit For]
[инструкции]

Next [элемент]

Синтаксис инструкции For...Each...Next содержит следующие элементы:

Элемент	Описание
элемент	Обязательный.  Переменная, используемая для выполнения итераций по элементам семейства или массива.  Для семейств элемент может быть только переменной типа Variant, универсальной объектной переменной или переменной, представляющей любой конкретный объект.  Для массивов элемент может быть только переменной типа Variant.
группа	Обязательный.  Имя семейства объектов или массива (за исключением массивов с определяемыми пользователем типами).
инструкции	Необязательный.  Одна или несколько инструкций, которые выполняются над каждым элементом группы.
Дополнительные сведения

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

В любых местах цикла может размещаться любое число инструкций Exit For, позволяющих выйти из цикла.  Инструкция Exit For часто применяется вместе с проверкой некоторого условия (например, If…Then). Она передает управление инструкции, непосредственно следующей за инструкцией Next.

Допускается организация вложенных циклов For...Each...Next (один цикл For...Each...Next располагается внутри другого).  Однако каждый элемент цикла должен быть уникальным.

Примечание.   Если опустить элемент в инструкции Next, выполнение продолжается так же, как если бы элемент был указан.  При обнаружении инструкции Next до соответствующей инструкции For возникает ошибка.

Не допускается использование инструкции For...Each...Next с массивами, определяемых пользователями типов, поскольку значение типа Variant не может содержать тип, определяемый пользователем.


Инструкция For...Next

Повторяет выполнение группы инструкций указанное число раз.

Синтаксис

For счетчик = начало To конец [Step шаг]
[инструкции]
[Exit For]
[инструкции]

Next [счетчик]

Синтаксис инструкции For…Next содержит следующие элементы:

Элемент	Описание
счетчик	Обязательный.  Числовая переменная, используемая в качестве счетчика цикла.  Эта переменная не может принадлежать к типу Boolean или быть элементом массива.
начало	Обязательный.  Начальное значение переменной счетчик.
Конец	Обязательный.  Конечное значение переменной счетчик.
Шаг	Необязательный.  Значение, на которое изменяется счетчик при каждом выполнении тела цикла.  Если это значение не задано, по умолчанию шаг равен единице.
инструкции	Необязательный.  Одна или несколько инструкций между For и Next, которые выполняются указанное число раз.
Дополнительные сведения

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

Значение	Условие выполнения цикла
Положительное или 0	счетчик <= конец
Отрицательное	счетчик >= конец
После выполнения всех инструкций цикла значение шаг добавляется к текущему значению переменной счетчик.  После этого инструкции цикла либо выполняются еще раз (на основе того же условия, которое привело к начальному выполнению цикла), либо цикл завершается и выполнение продолжается с инструкции, следующей за инструкцией Next.

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

Альтернативный способ выхода из цикла предоставляет инструкция Exit For. В любых местах цикла может размещаться любое число таких инструкций.  Инструкция Exit For часто применяется вместе с проверкой некоторого условия (например, If...Then). Эта инструкция передает управление инструкции, непосредственно следующей за инструкцией Next.

Допускается организация вложенных циклов For...Next (один цикл For...Next располагается внутри другого).  Счетчик каждого цикла должен иметь уникальное имя.  Допускаются следующие конструкции:

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

Примечание.   Если опустить переменную счетчик в инструкции Next, выполнение продолжается, как и при ее наличии.  При обнаружении инструкции Next до соответствующей инструкции For возникает ошибка.


Инструкция GoSub...Return

Задает переход в подпрограмму и возвращение из нее в процедуру.

Синтаксис

GoSub строка
...
строка
...

Return

Аргумент строка может быть любой меткой строки или номером строки.

Дополнительные сведения

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

Примечание.   Невозможен вызов или завершение процедур Sub с помощью GoSub...Return.

Совет.   Создание отдельных процедур для вызова из программы может обеспечить более структурированный подход, чем использование конструкций GoSub...Return.


Инструкция GoTo

Задает безусловный переход на указанную строку внутри процедуры.

Синтаксис

GoTo строка

Обязательный аргумент строка может быть любой меткой строки или номером строки.

Дополнительные сведения

Инструкция GoTo позволяет переходить только на строки внутри той процедуры, в которой она находится.

Примечание.   Слишком большое число инструкций GoTo затрудняет чтение и отладку программ.  По возможности следует использовать структурные управляющие инструкции (Do...Loop, For...Next, If...Then...Else, Select Case).


Инструкция If...Then...Else

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

Синтаксис

If условие Then [инструкции] [Else инструкции_else]

Допускается также использование блоковой формы синтаксиса:

If условие Then
[инструкции]

[ElseIf условие-n Then
[инструкции_elseif] ...

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

End If

Синтаксис инструкции If...Then...Else содержит следующие элементы:

Элемент	Описание
условие	Обязательный.  Одно или несколько выражений одного из двух типов:
	Числовое выражение или строковое выражение, имеющее значение True или False.  Если аргумент условие имеет значение Null, то условие рассматривается как значение False.
	Выражение вида TypeOf имяОбъекта Is типОбъекта. Аргумент имяОбъекта может быть любой ссылкой на объект, а типОбъекта представлять любой допустимый тип объекта.  Выражение имеет значение True, если объект имяОбъекта имеет тип объекта, указанный в аргументе типОбъекта; в противном случае выражение имеет значение False.
инструкции	Необязательный в блоковый форме; обязательный в строчной форме без предложения Else.  Одна или несколько инструкций, разделяемых двоеточиями; выполняются, если условие имеет значение True.
условие-n	Необязательный.  Аналогичен элементу условие.
инструкции_elseif	Необязательный.  Одна или несколько инструкций, которые выполняются, если соответствующее условие-n имеет значение True.
инструкции_else	Необязательный.  Одна или несколько инструкций, которые выполняются, если ни одно из предыдущих выражений условие или условие-n не имеет значение True.
Дополнительные сведения

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

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

If A > 10 Then A = A + 1 : B = B + A : C = C + B

В блоковой форме инструкция If должна быть первой инструкцией в строке.  Компоненты Else, ElseIf и End If могут иметь перед собой только номер строки или метку строки.  Блок If должен заканчиваться инструкцией End If.

Для того чтобы определить, представляет инструкция блок If или нет, проверяется элемент, следующий за ключевым словом Then.  Если после Then на той же строке стоит любой элемент, не являющийся комментарием, эта инструкция рассматривается как однострочная инструкция If.

Оба предложения Else и ElseIf являются необязательными.  В блоке If допускается любое число предложений ElseIf, но ни одно такое предложение не может появляться после предложения Else.  Допускаются вложенные блоки инструкций If; то есть блоки If, содержащиеся в других блоках.

При выполнении блока If (вторая форма синтаксиса), проверяется условие.  Если условие имеет значение True, выполняются инструкции, следующие за Then.  Если условие имеет значение False, то по очереди оценивается каждое условие ElseIf (если такие имеются).  При обнаружении условия со значением True выполняются инструкции, непосредственно следующие за соответствующим предложением Then.  Если ни одно из условий ElseIf не имеет значение True (или предложения ElseIf отсутствуют), выполняются инструкции, следующие за Else.  После выполнения инструкций, следующих за Then или Else, выполнение продолжается с инструкции, следующей за End If.

Совет.   При оценке одного выражения, которое имеет несколько возможных значений, более полезной может оказаться конструкция Select Case. Однако предложение TypeOf имяОбъекта Is типОбъекта не может использоваться с инструкцией Select Case.


Функция IIf

Возвращает одно из двух значений в зависимости от истинности указанного выражения.

Синтаксис

IIf(expr, truepart, falsepart)

Синтаксис функции IIf содержит следующие именованные аргументы:

Элемент	Описание
expr	Обязательный.  Проверяемое выражение.
truepart	Обязательный.  Значение или выражение, возвращаемое, если expr имеет значение True.
falsepart	Обязательный.  Значение или выражение, возвращаемое, если expr имеет значение False.
Дополнительные сведения

Функция IIf  вычисляет оба выражения (truepart и falsepart), несмотря на то, что возвращается только одно из них.  В некоторых случаях это приводит к нежелательным побочным эффектам.  Например, если при вычислении выражения falsepart имеет место деление на нуль, то возникнет ошибка, даже если значение expr имеет значение True.


Инструкции On...GoSub, On...GoTo

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

Синтаксис

On выражение GoSub списокНазначений

On выражение GoTo списокНазначений

Синтаксис инструкций On...GoSub и On...GoTo содержит следующие элементы:

Элемент	Описание
выражение	Обязательный.  Любое числовое выражение, которое имеет целое значение от 0 до 255 включительно.  Если выражение является нецелым числовым выражением, оно округляется до его оценки.
списокНазначений	Обязательный.  Список номеров строк или меток строк, разделяемых запятыми.
Дополнительные сведения

Значение аргумента выражение определяет, к какой строке из спискаНазначений.   выполняется переход.  Если значение выражения меньше 1 или превышает число элементов списка, происходит одно из следующих событий:

выражение	Результат
Равняется 0	Управление передается инструкции, следующей за On...GoSub или On...GoTo.
Превышает число элементов списка	Управление передается инструкции, следующей за On...GoSub или On...GoTo.
Отрицательное	Возникает ошибка.
Больше 255	Возникает ошибка.
В одном списке допускается совместное использование номеров и меток строк.  Не существует практического ограничения на число меток и номеров строк, используемых с инструкциями On...GoSub... и On...GoTo.  Однако при использовании большего число меток или номеров, чем может уместиться на одной строке, необходимо применять символ продолжения строки для распространения логической строки на несколько физических строк.

Совет.   Инструкция Select Case обеспечивает более структурированный и гибкий способ выполнения множественных ветвлений.


Функция Partition

Возвращает значение типа Variant (String), указывающее положение числа в вычисляемом наборе диапазонов.

Синтаксис

Partition(number, start, stop, interval)

Синтаксис функции Partition содержит следующие именованные аргументы:

Элемент	Описание
number	Обязательный.  Целое число, для которого проверяется положение относительно набора диапазонов.
start	Обязательный.  Целое число, задающее начало набора диапазонов.  Это число должно быть неотрицательным.
stop	Обязательный.  Целое число, задающее конец набора диапазонов.  Это число должно быть больше, чем значение start.
interval	Обязательный.  Целое число, задающее размер каждого диапазона в наборе диапазонов от start до stop.  Это число не может быть меньше 1.
Дополнительные сведения

Функция Partition определяет диапазон, который содержит указанное значение number. Функция возвращает значение типа Variant (String), описывающую этот диапазон.  Обычно функция Partition используется в запросах.  Например, можно создать запрос на выборку, показывающий распределение стоимости заказов по диапазонам (например, от 1 до 1000 тыс. руб., от 1001 до 2000 тыс. руб. и т.п.).

В следующей таблице показано, как определяются диапазоны с помощью трех наборов аргументов start, stop и interval.  Столбцы "Первый диапазон" и "Последний диапазон" содержат строки, возвращаемые функцией Partition.  Описание диапазона имеет вид нижняяГраница:верхняяГраница, причем нижняяГраница и верхняяГраница диапазона разделяются двоеточием (:).

start	stop	interval	До первого	Первый диапазон	Последний диапазон	За последним
0	99	5	"   :-1"	"      0:  4"	"     95: 99"	"   100:   "
20	199	10	"   :  19"	"    20:  29"	"   190: 199"	"   200:   "
100	1010	20	"   :   99"	"  100:  119"	" 1000: 1010"	" 1011:   "
В приведенной выше таблице третья строка описывает ситуацию, когда разность между значениями аргументов start и stop не делится нацело на значение аргумента interval. Верхняя граница последнего диапазона равняется значению аргумента stop (1010), хотя interval имеет значение 20.

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

Если interval равняется 1, возвращаемый диапазон имеет вид number:number, независимо от значений аргументов start и stop.  Например, если interval имеет значение 1, number имеет значение 100 и stop имеет значение 1000, функция Partition возвращает строку "  100:  100".

Если любой из аргументов имеет значение Null, возвращается значение Null.


Инструкция Select Case

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

Синтаксис

Select Case выражение
[Case списокВыражений-n
[инструкции-n]] ...
[Case Else
[инструкции_else]]

End Select

Синтаксис инструкции Select Case содержит следующие элементы:

Элемент	Описание
выражение	Обязательный.  Любое числовое выражение или строковое выражение.
списокВыражений-n	Обязательный при наличии предложения Case.  Список с разделителями, состоящий из одной или нескольких форм следующего вида: выражение, выражение To выражение, Is операторСравнения выражение.  Ключевое слово To задает диапазон значений.  При использовании ключевого слова To перед ним должно находиться меньшее значение.  Ключевое слово Is с операторами сравнения (кроме Is и Like) задает диапазон значений.  Если ключевое слово Is не указано, оно вставляется по умолчанию.
инструкции-n	Необязательный.  Одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка списокВыражений-n.
инструкции_else	Необязательный.  Одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает не совпадает ни с одним из предложений Case.
Дополнительные сведения

Если выражение совпадает с любым выражением из спискаВыражений в предложении Case, выполняются все инструкции, следующие за данным предложением Case до следующего предложения Case, или, для последнего предложения, до инструкции End Select.  Затем управление передается инструкции, следующей за End Select.  Если выражение совпадает с выражениями из списка в нескольких предложениях Case, выполняется только первый подходящий набор инструкций.

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

В каждом предложении Case допускается использование нескольких выражений или диапазонов.  Например допустима следующая строка:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

Примечание.   Следует отличать оператор сравнения Is от ключевого слова Is, используемого в инструкции Select Case.

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

Case "все", "орехи" To "яблоки", TestItem

Допускаются вложенные инструкции Select Case.  Каждой вложенной инструкции Select Case должна соответствовать инструкция End Select.


Функция Shell

Запускает исполняемую программу и при успешном запуске программы возвращает значение типа Variant (Double), представляющее идентификатор программы; в противном возвращается нуль.

Синтаксис

Shell(pathname[,windowstyle])

Синтаксис функции Shell содержит следующие именованные аргументы:

Элемент	Описание
pathname	Обязательный.  Значение типа Variant (String).  Имя выполняемой программы и любые требуемые аргументы или ключи командной строки; допускает включение каталога или папки и диска.
windowstyle	Необязательный.  Значение типа Variant (Integer), соответствующее типу окна, в котором выполняется программа.  Если аргумент windowstyle опущен, программа запускается в свернутом окне и получает фокус.
Именованный аргумент windowstyle имеет следующие значения:

Константа	Значение	Описание
vbHide	0	Окно скрыто, и фокус передается скрытому окну.
vbNormalFocus	1	Окно имеет фокус и восстанавливает свои стандартные размер и положение.
vbMinimizedFocus	2	Окно отображается в виде значка с фокусом.
vbMaximizedFocus	3	Окно развертывается на полный экран с фокусом.
vbNormalNoFocus	4	Восстанавливаются предыдущие размер и положение окна. Активным остается текущее окно.
vbMinimizedNoFocus	6	Окно отображается в виде значка. Активным остается текущее окно.
Дополнительные сведения

При успешном запуске функцией Shell указанного файла она возвращает идентификатор (ID) запущенной программы.  Идентификатор задачи ID является уникальным номером, указывающим на выполняемую программу.  Если функция Shell не может запустить указанную программу, возникает ошибка.  При использовании функции MacID с функцией Shell в Microsoft Windows возникает ошибка.

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


Инструкция Stop

Приостанавливает выполнение.

Синтаксис

Stop

Дополнительные сведения

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

Инструкция Stop приостанавливает выполнение программы, но, в отличие от инструкции End, она не закрывает все файлы и не очищает все переменные, если только не находится в откомпилированном выполняемом файле (.exe).


Функция Switch

Вычисляет список выражений и возвращает значение типа Variant или выражение, соответствующее первому выражению в списке, которое имеет значение True.

Синтаксис

Switch(выражение-1, значение-1[, выражение-2, значение-2 … [, выражение-n, значение-n]])

Синтаксис функции Switch содержит следующие элементы:

Элемент	Описание
выражение	Обязательный.  Выражение типа Variant, подлежащее вычислению.
значение	Обязательный.  Значение или выражение, возвращаемое, если соответствующее выражение имеет значение True.
Дополнительные сведения

Список аргументов функции Switch содержит пары выражений и значений.  Выражения вычисляются в том порядке, в котором они включены в список (слева направо). Возвращается значение, соответствующее первому истинному выражению в списке.  Если разбиение выражений и значений на пары выполнено неправильно, возникает ошибка выполнения.  Например, если выражение-1 имеет значение True, функция Switch возвращает значение-1. Если выражение-1 имеет значение False, а выражение-2 имеет значение True, функция Switch возвращает значение-2, и т.д.

Switch возвращает значение Null в следующих случаях:

·	Ни одно из выражений не имеет значение True.

·	Первому выражению, имеющему значение True, соответствует значение Null.

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


Инструкция While...Wend

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

Синтаксис

While условие
[инструкции]

Wend

Синтаксис инструкции While...Wend содержит следующие элементы:

Элемент	Описание
условие	Обязательный.  Числовое выражение или строковое выражение, которое имеет значение True или False.  Если условие имеет значение Null, условие рассматривается как имеющее значение False.
инструкции	Необязательный.  Одна или несколько инструкций, выполняемых, пока условие имеет значение True.
Дополнительные сведения

Если условие имеет значение True, выполняются все инструкции до инструкции Wend.  Затем управление возвращается инструкции While и вновь проверяется условие.  Если условие по-прежнему имеет значение True, процесс повторяется.  Если оно не имеет значение True, выполнение возобновляется с инструкции, следующей за инструкцией Wend.

Циклы While...Wend могут иметь любую глубину вложенности.  Каждая инструкция Wend соответствует предшествующей инструкции While.

Совет.   Инструкция Do...Loop обеспечивает более структурированный и гибкий способ организации циклов.


Инструкция With

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

Синтаксис

With объект
[инструкции]

End With

Синтаксис инструкции With содержит следующие элементы:

Элемент	Описание
объект	Обязательный.  Имя объекта или определяемого пользователем типа.
инструкции	Необязательный.  Одна или несколько инструкций, выполняемых над объектом.
Дополнительные сведения

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

With MyLabel

.Height = 2000

.Width = 2000

.Caption = "Объект MyLabel"

End With

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

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

Внимание!   Нельзя выполнять переходы внутрь или из блоков With. Если не выполнены инструкции  With или End With, возможно возникновение ошибок или непредсказуемое поведение объектов.


Пример использования функции Asc

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

Dim MyNumber

MyNumber = Asc("A")	' Возвращает 65.

MyNumber = Asc("a")	' Возвращает 97.

MyNumber = Asc("Apple")	' Возвращает 65.


Пример использования функции CBool

В данном примере функция CBool используется для преобразования выражения к типу Boolean.  Если результатом выражения является ненулевое значение, CBool возвращает True; в противном случае возвращается False.

Dim A, B, Check

A = 5: B = 5	' Инициализирует переменные.

Check = CBool(A = B)	' Check содержит True.

A = 0	' Определяет переменную.

Check = CBool(A)	' Check содержит False.


Пример использования функции CByte

В данном примере функция CByte используется для преобразования выражения к типу Byte.

Dim MyDouble, MyByte

MyDouble = 125.5678	' MyDouble имеет тип Double.

MyByte = CByte(MyDouble)	' MyByte содержит 126.


Пример использования функции CDate

В данном примере функция CDate используется для преобразования строки к типу Date.  В общем случае явное задание даты и времени в виде строки (как показано в данном примере) не рекомендуется.  Вместо этого следует использовать текстовые константы даты и времени (например #2/12/1969# и #4:45:23 PM#).

Dim MyDate, MyShortDate, MyTime, MyShortTime

MyDate = "February 12, 1969"	' Определяет дату.

MyShortDate = CDate(MyDate)	' Преобразует к типу Date.

MyTime = "4:35:47 PM"	' Определяет время.

MyShortTime = CDate(MyTime)	' Преобразует к типу Date.


Пример использования функции CCur

В данном примере функция CCur используется для преобразования выражения к типу Currency.

Dim MyDouble, MyCurr

MyDouble = 543.214588	' MyDouble имеет тип Double.

MyCurr = CCur(MyDouble * 2)	' Преобразует результат выражения

' MyDouble * 2 (1086.429176) в

' значение типа Currency (1086.4292).


Пример использования функции CDbl

В данном примере функция CDbl используется для преобразования выражения к типу Double.

Dim MyCurr, MyDouble

MyCurr = CCur(234.456784)	' MyCurr имеет тип Currency.

MyDouble = CDbl(MyCurr * 8.2 * 0.01)	' Преобразует результат

' к типу Double.


Пример использования функции CInt

В данном примере функция CInt используется для преобразования выражения к типу Integer.

Dim MyDouble, MyInt

MyDouble = 2345.5678	' MyDouble имеет тип Double.

MyInt = CInt(MyDouble)	' MyInt содержит 2346.


Пример использования функции CLng

В данном примере функция CLng используется для преобразования выражения к типу Long.

Dim MyVal1, MyVal2, MyLong1, MyLong2

MyVal1 = 25427.45: MyVal2 = 25427.55	' MyVal1 и MyVal2 имеют тип Doubles.

MyLong1 = CLng(MyVal1)	' MyLong1 содержит 25427.

MyLong2 = CLng(MyVal2)	' MyLong2 содержит 25428.


Пример использования функции CSng

В данном примере функция CSng используется для преобразования выражения к типу Single.

Dim MyDouble1, MyDouble2, MySingle1, MySingle2

' MyDouble1 и MyDouble2 имеют тип Doubles.

MyDouble1 = 75.3421115: MyDouble2 = 75.3421555

MySingle1 = CSng(MyDouble1)	' MySingle1 содержит 75.34211.

MySingle2 = CSng(MyDouble2)	' MySingle2 содержит 75.34216.


Пример использования функции CStr

В данном примере функция CStr используется для преобразования числового значения в строку (к типу String).

Dim MyDouble, MyString

MyDouble = 437.324	' MyDouble имеет тип Double.

MyString = CStr(MyDouble)	' MyString содержит "437.324".


Пример использования функции CVar

В данном примере функция CVar используется для преобразования выражения к типу Variant.

Dim MyInt, MyVar

MyInt = 4534	' MyInt имеет тип Integer.

MyVar = CVar(MyInt & "000")	' MyVar содержит строку 4534000.


Пример использования функции CVErr

В данном примере функция CVErr возвращает значение типа Variant, которому соответствует VarType (подтип) vbError (10).  Определенная пользователем функция CalculateDouble возвращает ошибку, если ей передан нечисловой аргумент.  Функцию CVErr можно использовать для возврата кодов ошибок, определенных пользователем, из процедур, также определенных пользователем, или отложенной обработки ошибок, обнаруженных на стадии выполнения.  С помощью функции IsError можно проверить, является ли значение ошибкой.

' Вызывает CalculateDouble с недопустимым аргументом.

Sub Test()

Debug.Print CalculateDouble("345.45роберт")

End Sub

' Описывает процедуру Function CalculateDouble.

Function CalculateDouble(Number)

If IsNumeric(Number) Then

CalculateDouble = Number * 2	' Возвращает результат.

Else

CalculateDouble = CVErr(2001)	' Возвращает код ошибки,

End If	' определенный пользователем.

End Function


Пример использования функции Val

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

Dim MyValue

MyValue = Val("2457")	' Возвращает 2457.

MyValue = Val(" 2 45 7")	' Возвращает 2457.

MyValue = Val("24 and 57")	' Возвращает 24.


Функции преобразований

Функция Asc

Функция CBool

Функция CByte

Функция CCur

Функция CDate

Функция CDec

Функция CDbl

Функция Chr

Функция CInt

Функция CLng

Функция CSng

Функция CStr

Функция CVar

Функция CVErr

Функция Format

Функция Hex

Функция Oct

Функция Str

Функция Val


Функция Asc

Возвращает значение типа Integer, представляющее код символа для первого символа строки.

Синтаксис

Asc(строка)

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

Дополнительные сведения

Возвращаемые значения лежат в диапазоне 0 – 255 для однобайтовых наборов, и в диапазоне -32768 – 32767 для двухбайтовых наборов символов (DBCS).

Примечание.   Для работы с байтами данных, содержащихся в строке, предназначена другая функция (AscB).  Вместо кода первого символа AscB возвращает первый байт.  Функция AscW возвращает код символа, соответствующий кодировке Unicode, за исключением платформ, в которых Unicode не поддерживается и поведение функции аналогично функции Asc.


Функция CVErr

Возвращает значение типа Variant с подтипом Error, содержащее код ошибки, указанный пользователем.

Синтаксис

CVErr(кодОшибки)

Обязательный аргумент кодОшибки является любым допустимым кодом ошибки.

Дополнительные сведения

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

Следует отметить, что неявное преобразование значения Error не допускается.  Например, не допускается прямое присвоение возвращаемого значения CVErr переменной с типом, отличным от Variant.  Однако имеется возможность выполнить явное преобразование (с помощью CInt, CDbl и т.п.) значения, возвращаемого CVErr, и присвоить это значение переменной с соответствующим типом данных.


Функция Val

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

Синтаксис

Val(строка)

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

Дополнительные сведения

Функция Val прекращает чтение строки на первом символе, который она не может распознать в качестве части числа.  Символы, которые часто рассматриваются в качестве частей числовых значений, типа знака доллара и запятых, не распознаются.  Однако эта функция распознает префикс основания &O (для восьмеричных) и &H (для шестнадцатеричных значений).  Пробелы, символы табуляции и символы перевода строк удаляются из значения аргумента.

В следующем примере возвращается числовое значение 1615198:

Val("    1615 198-я ул. Н.Й.")

Следующая функция Val возвращает десятичное значение -1 для показанного шестнадцатеричного значения:

Val("&HFFFF")

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


Функции преобразования типов данных

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

Синтаксис

CBool(выражение)

CByte(выражение)

CCur(выражение)

CDate(выражение)

CDbl(выражение)

CDec(выражение)

CInt(выражение)

CLng(выражение)

CSng(выражение)

CVar(выражение)

CStr(выражение)

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

Возвращаемые типы

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

Функция	Тип	Диапазон аргумента выражение
CBool	Boolean	Любая допустимая строка или числовое выражение.
CByte	Byte	От 0 до 255.
CCur	Currency	От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
CDate	Date	Любое допустимое выражение даты.
CDbl	Double	От -1,79769313486232E308 до  -4,94065645841247E-324 для отрицательных чисел; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных чисел.
CDec	Decimal	+/-79 228 162 514 264 337 593 543 950 335 без масштабирования, т.е. для чисел без дробной части. Диапазон чисел с 28 знаками в дробной части +/-7,9228162514264337593543950335. Минимальное ненулевое число 0,0000000000000000000000000001.
CInt	Integer	От -32 768 до 32 767 с округлением дробной части.
CLng	Long	От -2 147 483 648 до 2 147 483 647 с округлением дробной части.
CSng	Single	От -3,402823E38 до -1,401298E-45 для отрицательных чисел;  от 1,401298E-45 до 3,402823E38 для положительных чисел.
CVar	Variant	Диапазон значений Double для числовых значений.  Диапазон значений String для нечисловых значений.
CStr	String	Возвращаемые значения функции CStr зависят от аргумента выражение.
Дополнительные сведения

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

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

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

Если дробная часть числа в точности равна 0,5, то функции CInt и CLng всегда округляют число до ближайшего четного числа.  Например, 0,5 округляется до 0, а 1,5 до 2.  Необходимо отличать функции CInt и CLng от функций Fix и Int, которые выполняют усечение, а не округление дробной части числа.  Кроме того, функции Fix и Int всегда возвращают значение с тем же типом данных, который был передан в аргументе.

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

Функция CDate распознает форматы дат в соответствии с национальной настройкой системы.  Правильный порядок дней, месяцев и годов может не быть определен, если дата задается в формате, отличном от распознаваемых форматов дат.  Кроме того, длинный формат даты также не распознается, если он содержит строку для дня недели.

Для обеспечения совместимости с предыдущими версиями Visual Basic поддерживается также функция CVDate.  Синтаксис функции CVDate совпадает с синтаксисом функции CDate, но CVDate возвращает значение с подтипом Date типа Variant, а не значение типа Date.  Поскольку теперь определен внутренний тип данных Date, больше нет необходимости в использовании функции CVDate.  Тот же результат получается при преобразовании выражения к типу Date, а затем присвоении его переменной типа Variant.  Это соответствует преобразованию всех других внутренних типов данных к их эквивалентным подтипам Variant.

Примечание.   Функция CDec не возвращает конкретный тип данных; вместо этого всегда возвращается значение типа Variant, преобразованное к подтипу Decimal.


Возвращаемые значения функции CStr

Тип выражения	Возвращаемое значение CStr
Boolean	Строка, содержащая True или False.
Date	Строка, содержащая дату в кратком системном формате даты.
Null	Ошибка выполнения.
Empty	Пустая строка ("").
Error	Строка, содержащая слово Error с последующим кодом ошибки.
Другие числовые типы	Строка, содержащая число.


Тип данных Boolean

Переменные типа Boolean (логические значения) сохраняются как 16-разрядные (двухбайтовые) числа, но могут иметь только значения True или False.  Переменные типа Boolean отображаются как строковые значения True или False (при использовании метода Print) или как #TRUE# или #FALSE# (если используется инструкция Write #). Для присваивания переменным одного из двух логических значений ИСТИНА или ЛОЖЬ следует использовать ключевые слова True или False.

При преобразовании других числовых типов данных к типу Boolean значение 0 преобразуется в False, а все остальные значения преобразуются в True.  Если значения типа Boolean преобразуются к другим типам данных, то False превращается в 0, а True в -1.


Тип данных Byte

Переменные типа Byte сохраняются как 8-разрядные (1 байт) числа без знака в диапазоне от 0 до 255.

Тип данных Byte используется для записи двоичных значений.


Тип данных Currency

Переменные типа Currency (денежные значения) сохраняются как  64-разрядные (8-байтовые) целые числа, которые после деления на 10000 дают число с фиксированной десятичной точкой с 15 разрядами в целой части и 4 разрядами в дробной.  Такое представление позволяет отобразить числа в диапазоне от -922 337 203 685 477,5808 до 922 337 203 685 477,5807.  Символом описания типа для типа Currency служит символ (@).

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


Типы данных

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

Тип данных	Размер	Диапазон значений
Byte (байт)	1 байт	От 0 до 255.
Boolean (логический)	2 байт	True или False.
Integer  (целое)	2 байт	От -32 768 до 32 767.
Long (длинное целое)	4 байт	От -2 147 483 648 до 2 147 483 647.
Single  (с плавающей точкой обычной точности)	4 байт	От -3,402823E38 до -1,401298E-45 для отрицательных значений;  от 1,401298E-45 до 3,402823E38 для положительных значений.
Double  (с плавающей точкой двойной точности)	8 байт	От -1,79769313486232E308 до  -4,94065645841247E-324 для отрицательных значений;  от 4,94065645841247E-324 до  1,79769313486232E308 для положительных значений.
Currency  (денежный)	8 байт	От -922 337 203 685 477,5808 до  922 337 203 685 477,5807.
Decimal  (масштабируемое целое)	14 байт	+/-79 228 162 514 264 337 593 543 950 335 без дробной части;  +/-7,9228162514264337593543950335 с 28 знаками справа от запятой; минимальное ненулевое значение имеет вид  +/-0,0000000000000000000000000001.
Date (даты и время)	8 байт	От 1 января 100 г. до 31 декабря 9999 г.
Object (объект)	4 байт	Любой указатель объекта.
String  (строка переменной длины)	10 байт + длина строки	От 0 до приблизительно 2 миллиардов.
String (строка постоянной длины)	Длина строки	От 1 до приблизительно 65 400.
Variant (числовые подтипы)	16 байт	Любое числовое значение вплоть до границ диапазона для типа Double.
Variant (строковые подтипы)	22 байт + длина строки	Как для строки (String) переменной длины.
Тип данных, определяемый пользователем (с помощью ключевого слова  Type)	Объем определяется элементами	Диапазон каждого элемента определяется его типом данных.
Примечание.   Массивы любых типов данных требуют 20 байт памяти плюс 4 байт на каждую размерность массива плюс число байт, требуемых для хранения данных.  Объем памяти, требуемый для сохранения данных, рассчитывается как произведение числа элементов на размер элемента.  Например, данные в одномерном массиве, который содержит четыре элемента типа Integer, требующих по 2 байт на элемент, занимают 8 байт. Вместе с 20 байт на массив и 4 байт на размерность общий требуемый объем составляет 32 байт.

Значение типа Variant, содержащее массив, требует 12 байт в дополнение к объему, требуемому массивом.


Тип данных Date

Переменные типа Date (значения даты и времени) сохраняются как 64-разрядные (8-байтовые) числа с плавающей точкой стандарта IEEE, представляющие даты в диапазоне от 1 января 100 г. до 31 декабря 9999 г. и значения времени от 0:00:00 до 23:59:59.  Переменным типа Date могут быть присвоены любые значения, задаваемые распознаваемыми датами в явном представлении (литералами даты).  Литералы даты следует окружать символами (#), например, #January 1, 1996# или #1 Jan 96#.

Значения типа Date выводятся с использованием краткого формата даты, установленного для компьютера.  Значения времени выводятся в установленном 12-часовом или 24-часовом формате.

При преобразовании других числовых типов данных к типу Date целая часть числа представляет значение даты, а дробная значение времени.  Полночь представляется значением 0, а полдень значением .5.  Отрицательные целые числа представляют даты до 30 декабря 1899 г.


Тип данных Decimal

Переменные типа Decimal сохраняются как 96-разрядные (12-байт) целые без знака, масштабируемые степенями 10.  Степень масштабирования определяет число знаков дробной части, которое может изменяться от 0 до 28.  Для степени масштабирования 0 (числа без дробной части), максимальными по абсолютной величине значениями являются +/-79 228 162 514 264 337 593 543 950 335.  При 28 знаках дробной части максимальными по абсолютной величине значениями являются +/-7,9228162514264337593543950335, а минимальными +/-0,0000000000000000000000000001.

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


Тип данных Double

Переменные типа Double (числа с плавающей точкой двойной точности) сохраняются как 64-разрядные (8-байтовые) числа с плавающей точкой стандарта IEEE в диапазоне от -1,79769313486232E308 до -4,94065645841247E-324 для отрицательных значений и от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений.  Символом описания типа для типа Double служит символ (#).


Тип данных Integer

Переменные типа Integer (целые) сохраняются как 16-разрядные (2-байтовые) числа в диапазоне от -32 768 до 32 767.  Символом описания типа для типа Integer служит символ процентов (%).

Переменные типа Integer используются также для представления перечисляемых наборов.  Перечисляемый набор может содержать конечный набор уникальных целых значений, каждое из которых имеет особый смысл в текущем контексте.  Перечисляемые наборы являются удобным инструментом, обеспечивающим выбор из ограниченного набора параметров.  Например, если пользователь должен выбрать цвет из списка, то можно установить соответствие: черный = 0, белый = 1 и т.д.  Хорошим стилем программирования является определение константы для каждого элемента перечисляемого набора с помощью инструкции Const.


Тип данных Long

Переменные типа Long (длинное целое) сохраняются как 32-разрядные (4-байтовые) числа со знаком в диапазоне от -2 147 483 648 до 2 147 483 647.  Символом описания типа для типа Long служит символ (&).


Тип данных Object

Переменные типа Object сохраняются как 32-разрядные (4-байтовые) адреса, в которых содержатся ссылки на объекты.  Переменной, описанной с типом Object, можно затем присвоить (с помощью инструкции Set) ссылку на любой объект, созданный в приложении.

Примечание.   Хотя описание переменной с типом Object является достаточно гибким средством, позволяющим создать ссылку на любой объект, связывание переменной с объектом осуществляется при выполнении.  Для предварительного связывания переменной с объектом (при компиляции) следует указать ссылку на объект в переменной, описанной с конкретным именем класса.


Тип данных Single

Переменные типа Single (числа с плавающей точкой обычной точности) сохраняются как 32-разрядные (4-байтовые) числа с плавающей точкой стандарта IEEE в диапазоне от -3,402823E38 до -1,401298E-45 для отрицательных значений и от 1,401298E-45 до 3,402823E38 для положительных значений.  Символом описания типа для типа Single служит восклицательный знак (!).


Тип данных String

Существует два типа строковых значений:

•	Строки переменной длины, которые могут содержать до приблизительно 2 миллиардов (2^31) символов.

•	Строки постоянной длины, которые могут содержать от 1 до приблизительно 64K (2^16) символов.

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

Кодами для символов, образующих значения типа String, служат целые числа в диапазоне от 0 до 255.  Первые 128 символов (0–127) набора символов, соответствуют буквам и символам стандартной американской клавиатуры.  Эти первые 128 символов совпадают с набором символов ASCII.  Следующие 128 символов (128–255) представляют буквы национальных алфавитов, буквы с надстрочными символами, символы денежной единицы и дроби.  Символом описания типа для типа String служит символ доллара ($).


Определяемый пользователем тип данных

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

Type MyType

MyName As String	' Имя записывается в строковую переменную.

MyBirthDate As Date	' День рождения записывается в переменную даты.

MySex As Integer	' Пол записывается в целую переменную

End Type	' (0 для женщины, 1 для мужчины).


Тип данных Variant

Тип данных Variant является типом, к которому относятся все переменные, не описанные явно с другим типом данных (с помощью инструкций Dim, Private, Public или Static).  Для типа Variant не определен символ описания типа.

Variant является особым типом данных.  Переменные этого типа могут содержать любые данные, за исключением строк (тип String) фиксированной длины и определяемых пользователем типов.  Переменная типа Variant может также содержать специальные значения Empty, Error, Nothing и Null.  Указать характер подтипов типа Variant позволяют функции VarType или TypeName.

Допустимыми числовыми данными являются любые целые или действительные числа в диапазоне от -1,797693134862315E308 до -4,94066E-324 для отрицательных значений и от 4,94066E-324 до 1,797693134862315E308 для положительных значений.  В общем случае, числовые данные типа Variant сохраняют свой исходный тип данных внутри типа Variant.  Например, если присвоить переменной типа Variant значение типа Integer, то в последующих операциях Variant трактуется как Integer.  Однако, если арифметическая операция, выполненная над переменной типа Variant, содержащей значение типа Byte, Integer, Long или Single, приводит к тому, что результат выходит за границы диапазона допустимых значений исходного типа, то результат преобразуется к следующему более широкому типу внутри типа Variant.  Значение типа Byte преобразуется к типу Integer, Integer преобразуется к типу Long, а значения типа Long и Single преобразуются к типу Double.  Ошибка возникает, если за пределы допустимого диапазона значений выходят переменные типа Variant, содержащие значения типа Currency, Decimal или Double.

Пользователь имеет возможность использовать тип Variant вместо любого типа данных, чтобы обеспечить большую гибкость при обработке данных.  Если содержимым переменной типа Variant являются цифры, то в разном контексте они могут рассматриваться либо как строковое представление числа, либо как число.  Например:

Dim MyVar As Variant

MyVar = 98052

В этом примере переменная MyVar содержит представление числового значения 98052.  Арифметические операторы можно применять к значениям типа Variant, содержащим как числа, так и строковые значения, которые могут быть интерпретированы как числа.  Если применить оператор + для сложения переменной MyVar с другой переменной типа Variant, содержащей число, или с переменной числового типа, то результатом будет арифметическая сумма.

Значение Empty определяет переменную типа Variant, которая не была инициализирована (не получила начальное значение).  Переменная типа Variant, содержащая значение Empty, рассматривается как 0 в контексте математических операций и как пустая строка ("") в контексте операций со строковыми значениями.

Не следует путать значения Empty и Null. Null указывает, что переменная типа Variant имеет пустое значение в результате конкретных операций.

Для типа Variant значение Error является специальным значением, которое используется для указания возникновения условия ошибки в  процедуре.  Однако в отличие от других типов ошибок при этом не происходит нормальной обработки ошибок на уровне приложения.  Это позволяет пользователю или приложению выбрать несколько альтернативных действий на основании значения ошибки.  Значения Error создаются путем преобразования действительных чисел в значения ошибки с помощью функции CVErr.


Пример использования функции Date

В данном примере функция Date используется для определения текущей системной даты.

Dim MyDate

MyDate = Date	' MyDate содержит текущую системную дату.


Пример использования инструкции Date

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

Dim MyDate

MyDate = #February 12, 1985#	' Присваивает дату.

Date = MyDate	' Изменяет системную дату.


Пример использования функции DateAdd

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

Dim FirstDate As Date	' Объявляет переменные.

Dim IntervalType As String

Dim Number As Integer

Dim Msg

IntervalType = "м"	' Интервал указывается в месяцах.

FirstDate = InputBox("Введите дату")

Number = InputBox("Введите число месяцев, которое следует добавить")

Msg = "Новая дата: " & DateAdd(IntervalType, Number, FirstDate)

MsgBox Msg


Пример использования функции DateDiff

В данном примере функция DateDiff используется для определения числа дней между указанной и текущей датой.

Dim TheDate As Date	' Объявляет переменные.

Dim Msg

TheDate = InputBox("Введите дату:")

Msg = "Разность (дней): " & DateDiff("д", Now, TheDate)

MsgBox Msg


Пример использования функции DatePart

В данном примере функция DatePart используется для определения квартала, к которому относится указанная дата.

Dim TheDate As Date	' Объявляет переменные.

Dim Msg

TheDate = InputBox("Введите дату:")

Msg = "Квартал: " & DatePart("к", TheDate)

MsgBox Msg


Пример использования функции DateSerial

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

Dim MyDate

' MyDate содержит дату, соответствующую 12 февраля 1969 года.

MyDate = DateSerial(1969, 2, 12)	' Возвращает дату.


Пример использования функции DateValue

В данном примере функция DateValue используется для преобразования строки в дату.  Кроме того, можно использовать текстовые константы даты для непосредственного присвоения даты переменной типа Variant или Date, например, MyDate = #2/12/69#.

Dim MyDate

MyDate = DateValue("February 12, 1969")	' Возвращает дату.


Пример использования функции Day

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

Dim MyDate, MyDay

MyDate = #February 12, 1969#	' Присваивает дату.

MyDay = Day(MyDate)	' MyDay содержит 12.


Пример использования функции Hour

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

Dim MyTime, MyHour

MyTime = #4:35:17 PM#	' Присваивает время.

MyHour = Hour(MyTime)	' MyHour содержит 16.


Пример использования функции Minute

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

Dim MyTime, MyMinute

MyTime = #4:35:17 PM#	' Присваивает время.

MyMinute = Minute(MyTime)	' MyMinute содержит 35.


Пример использования функции Month

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

Dim MyDate, MyMonth

MyDate = #February 12, 1969#	' Присваивает дату.

MyMonth = Month(MyDate)	' MyMonth содержит 2.


Пример использования функции Now

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

Dim Today

Today = Now	' Присваивает текущую системную дату и время.


Пример использования функции Second

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

Dim MyTime, MySecond

MyTime = #4:35:17 PM#	' Присваивает время.

MySecond = Second(MyTime)	' MySecond содержит 17.


Пример использования функции Time

В данном примере функция Time используется для определения текущего системного времени.

Dim MyTime

MyTime = Time	' Возвращает текущее системное время.


Пример использования инструкции Time

В данном примере инструкция Time используется для изменения системного времени.

Dim MyTime

MyTime = #4:35:17 PM#	' Присваивает время.

Time = MyTime	' Изменяет системное время.


Пример использования функции Timer

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

Dim PauseTime, Start, Finish, TotalTime

If (MsgBox("Нажмите Да, чтобы прервать выполнение на 5 секунд", 4)) = vbYes Then

PauseTime = 5	' Задает длительность.

Start = Timer	' Задает начало паузы.

Do While Timer < Start + PauseTime

DoEvents	' Передает управление другим процессам.

Loop

Finish = Timer	' Задает конец паузы.

TotalTime = Finish - Start	' Вычисляет длительность паузы.

MsgBox "Длительность паузы: " & TotalTime & " секунд"

Else

End

End If


Пример использования функции TimeSerial

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

Dim MyTime

MyTime = TimeSerial(16, 35, 17)	' MyTime содержит время

' соответствующее 16:35:17.


Пример использования функции TimeValue

В данном примере функция  TimeValue используется для преобразования строки во время.  Кроме того, можно использовать текстовые константы даты для непосредственного присвоения времени переменной типа Variant или Date, например, MyTime = #4:35:17 PM#.

Dim MyTime

MyTime = TimeValue("4:35:17 PM")	' Возвращает время.


Пример использования функции Weekday

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

Dim MyDate, MyWeekDay

MyDate = #February 12, 1969#	' Присваивает дату.

MyWeekDay = Weekday(MyDate)	' MyWeekDay содержит 4, поскольку

' MyDate соответствует среде.


Пример использования функции Year

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

Dim MyDate, MyYear

MyDate = #February 12, 1969#	' Присваивает дату.

MyYear = Year(MyDate)	' MyYear содержит 1969.


Функция Date

Возвращает значение типа Variant (Date), содержащее текущую системную дату.

Синтаксис

Date

Дополнительные сведения

Для установки системной даты используйте инструкцию Date.


Инструкция Date

Устанавливает текущую системную дату.

Синтаксис

Date = дата

Для компьютеров, работающих под управлением Microsoft Windows 95, аргумент дата должен задавать дату в интервале от 1 января 1980 года до 31 декабря 2099 года.  Для компьютеров, работающих под управлением Microsoft Windows NT, дата в интервале от 1 января 1980 года до 31 декабря 2079 года.


Функция DateAdd

Возвращает значение типа Variant (Date), содержащее дату, к которой добавлен указанный временной интервал.

Синтаксис

DateAdd(interval, number, date)

Синтаксис функции DateAdd содержит следующие именованные аргументы:

Элемент	Описание
interval	Обязательный.  Строковое выражение, указывающее тип добавляемого временного интервала.
number	Обязательный.  Числовое выражение, указывающее число временных интервалов, которое следует добавить.  Оно может быть положительным (для получения более поздних дат) или отрицательным (для получения более ранних дат).
date	Обязательный.  Значение типа Variant (Date) или литерал даты, представляющий дату, к которой добавляется указанный временной интервал.
Значения

Ниже перечислены допустимые значения аргумента interval:

Значение	Описание
yyyy	Год.
Q	Квартал.
m	Месяц.
Y	День года.
D	День месяца.
w	День недели.
ww	Неделя.
H	Часы.
N	Минуты.
S	Секунды.
Дополнительные сведения

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

Для добавления дней к аргументу date можно задавать временной интервал как день года ("y"), день месяца ("d") или день недели ("w").

Функция DateAdd не возвращает неправильных дат.  Следующее выражение добавляет один месяц к 31 января:

DateAdd("m", 1, "31-янв-95")

В данном случае будет возвращена дата 28-фев-95, а не 31-фев-95.  Если в качестве аргумента date указать 31-янв-96, то возвращается дата 29-фев-96, поскольку 1996 год является високосным.

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

Если number не является значением типа Long, оно округляется до ближайшего целого числа перед выполнением операции.


Функция DateDiff

Возвращает значение типа Variant (Long), указывающее число временных интервалов между двумя датами.

Синтаксис

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

Синтаксис функции DateDiff содержит следующие именованные аргументы:

Элемент	Описание
interval	Обязательный.  Строковое выражение, указывающее тип временного интервала, который следует использовать при вычислении разности между датами date1 и date2.
date1, date2	Обязательные.  Значения типа Variant (Date).  Две даты, разность между которыми следует вычислить.
firstdayofweek	Необязательный.  Константа, указывающая первый день недели.  Если этот аргумент опущен, считается, что неделя начинается с воскресенья.
firstweekofyear	Необязательный.  Константа, указывающая первую неделю года.  Если этот аргумент опущен, первой неделей считается неделя, содержащая 1 января.
Значения

Ниже перечислены допустимые значения аргумента interval:

Значение	Описание
yyyy	Год.
q	Квартал.
m	Месяц.
y	День года.
d	День месяца.
w	День недели.
ww	Неделя.
h	Часы.
n	Минуты.
s	Секунды.
Ниже перечислены допустимые значения аргумента firstdayofweek:

Константа	Значение	Описание
vbUseSystem	0	Используется значение NLS API.
VbSunday	1	Воскресенье (по умолчанию).
VbMonday	2	Понедельник.
VbTuesday	3	Вторник.
VbWednesday	4	Среда.
VbThursday	5	Четверг.
VbFriday	6	Пятница.
VbSaturday	7	Суббота.
Ниже перечислены допустимые значения аргумента firstweekofyear:

Константа	Значение	Описание
vbUseSystem	0	Используется значение NLS API.
VbFirstJan1	1	Неделя, которая содержит 1 января (по умолчанию).
VbFirstFourDays	2	Первая неделя, которая содержит по крайней мере четыре дня нового года.
VbFirstFullWeek	3	Первая полная неделя года.
Дополнительные сведения

Функция DateDiff предназначена для определения числа указанных временных интервалов между двумя датами.  Например, с помощью этой функции можно вычислить число дней между двумя датами или число недель между текущей датой и концом года.

Для вычисления числа дней между датами date1 и date2 можно использовать временные интервалы типа день года ("y") или день месяца ("d").  Если interval задается как день недели ("w"), возвращается число недель между двумя датами.  Если date1 соответствует понедельнику, подсчитывается число понедельников между date1 и date2.  При этом date2 учитывается, а date1 нет.  Если interval задается в неделях ("ww"), функция DateDiff возвращает число календарных недель между двумя датами, т.е. число воскресений между date1 и date2.  При этом дата date2 учитывается (если ей соответствует воскресенье), а date1 нет (даже если ей соответствует воскресенье).

Если date1 определяет дату, более позднюю, чем date2, возвращается отрицательное значение.

Аргумент firstdayofweek влияет на вычисления, использующие временные интервалы типа "w" и "ww".

Если дата задается как литерал даты, указанный год становится постоянной частью даты.  Однако если дата заключается в прямые кавычки (" "), а год опущен, то при каждом вычислении выражения даты в него будет подставляться текущий год.  Это позволяет написать код, который может использоваться в течение нескольких лет.

При сравнении дат 31 декабря и 1 января следующего года функция DateDiff для интервала типа год ("yyyy") возвращает значение 1, хотя разница между датами составляет всего один день.


Функция DatePart

Возвращает значение типа Variant (Integer), содержащее указанный компонент даты.

Синтаксис

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

Синтаксис функции DatePart содержит следующие именованные аргументы:

Элемент	Описание
interval	Обязательный.  Строковое выражение, определяющее тип возвращаемого временного интервала.
date	Обязательный.  Значение типа Variant (Date), представляющее дату, подлежащую обработке.
Firstdayofweek	Необязательный.  Константа, указывающая первый день недели.  Если этот аргумент опущен, считается, что неделя начинается с воскресенья.
Firstweekofyear	Необязательный.  Константа, указывающая первую неделю года.  Если этот аргумент опущен, первой неделей считается неделя, содержащая 1 января.
Значения

Ниже перечислены допустимые значения аргумента interval:

Значение	Описание
yyyy	Год.
Q	Квартал.
m	Месяц.
Y	День года.
D	День месяца.
w	День недели.
ww	Неделя.
h	Часы.
n	Минуты.
s	Секунды.
Ниже перечислены допустимые значения аргумента firstdayofweek:

Константа	Значение	Описание
vbUseSystem	0	Используется значение NLS API.
vbSunday	1	Воскресенье (по умолчанию).
vbMonday	2	Понедельник.
vbTuesday	3	Вторник.
vbWednesday	4	Среда.
vbThursday	5	Четверг.
vbFriday	6	Пятница.
vbSaturday	7	Суббота.
Ниже перечислены допустимые значения аргумента firstweekofyear:

Константа	Значение	Описание
vbUseSystem	0	Используется значение NLS API.
vbFirstJan1	1	Неделя, которая содержит 1 января (по умолчанию).
vbFirstFourDays	2	Первая неделя, которая содержит по крайней мере четыре дня нового года.
vbFirstFullWeek	3	Первая полная неделя года.
Дополнительные сведения

Функция DatePart предназначена для определения указанного компонента даты.  Например, с помощью этой функции можно определить день недели или текущий час.

Аргумент firstdayofweek влияет на вычисления, использующие временные интервалы типа "w" и "ww".

Если дата задается как литерал даты, указанный год становится постоянной частью даты.  Однако если дата заключается в прямые кавычки (" "), а год опущен, то при каждом вычислении выражения даты в него будет подставляться текущий год.  Это позволяет написать код, который может использоваться в течение нескольких лет.


Функция DateSerial

Возвращает значение типа Variant (Date), соответствующее указанному году, месяцу и дню.

Синтаксис

DateSerial(year, month, day)

Синтаксис функции DateSerial содержит следующие именованные аргументы:

Элемент	Описание
year	Обязательный.  Значение типа Integer.  Число от 100 до 9999 включительно или числовое выражение.
month	Обязательный.  Значение типа Integer.  Любое числовое выражение.
day	Обязательный.  Значение типа Integer.  Любое числовое выражение.
Дополнительные сведения

Значение каждого аргумента функции DateSerial должно лежать в соответствующем диапазоне: 1 — 31 для дней и 1 — 12 для месяцев.  Кроме того, можно использовать числовые выражения для описания относительной даты, т.е. на определенное число дней, месяцев и лет более поздней или ранней, чем указанная.

В следующем примере аргументами функции DateSerial являются не абсолютные значения, а числовые выражения.  Таким образом определяется дата, на 1 день, 2 месяца и 10 лет более ранняя, чем 1 августа 1990 года, т.е. 31 мая 1980 года.

DateSerial(1990 - 10, 8 - 2, 1 - 1)

Значения аргумента year, лежащие между 0 и 99 включительно, соответствуют годам двадцатого столетия (1900 — 1999).  При описании дат, не относящихся к двадцатому столетию, необходимо использовать все четыре цифры года (например, 1800).

Если значение какого-либо аргумента превышает максимально допустимое для него, то соответствующим образом увеличивается более старший компонент даты.  Например, 35 дней означают 1 месяц и несколько оставшихся дней (в зависимости от числа дней в конкретном месяце).  Однако если значение любого аргумента лежит вне диапазона -32 768 — 32 767, или сочетание всех трех аргументов описывает дату, лежащую вне допустимого диапазона дат, возникает ошибка.


Функция DateValue

Возвращает значение типа Variant (Date).

Синтаксис

DateValue(дата)

Обязательный аргумент дата обычно является строковым выражением, представляющим дату в интервале от 1 января 100 года до 31 декабря 9999 года.  Кроме того, в качестве этого аргумента можно использовать любое выражение, представляющее дату, время или сочетание даты и времени, лежащие в указанном диапазоне.

Дополнительные сведения

Строка, содержащая только числа и допустимые разделители компонентов даты, функция DateValue определяет порядок компонентов даты (месяц, день и год) согласно системному краткому формату даты.  Кроме того, функция DateValue правильно обрабатывает допустимые даты, содержащие полные или краткие названия месяцев.  Например, все следующие представления даты являются допустимыми: 30.12.1991, 30.12.91, 30 декабря 1991 и 30-дек-91.

Если дата не содержит сведений о годе, функция DateValue использует текущий год по системному календарю компьютера.

Если дата содержит сведения о времени, они не возвращаются функцией DateValue.  Однако если дата содержит неправильные сведения о времени (например "89:98"), возникает ошибка


Функция Day

Возвращает значение типа Variant (Integer), содержащее целое число (от 1 до 31 включительно), которое представляет день месяца

Синтаксис

Day(дата)

Обязательный аргумент дата может быть любым значением типа Variant, числовым выражением, строковым выражением или любым их сочетанием, которое представляет дату.  Если дата содержит значение Null, возвращается значение Null.


Функция Hour

Возвращает значение типа Variant (Integer), содержащее целое число (от 0 до 23 включительно), которое представляет часы в значении времени.

Синтаксис

Hour(время)

Обязательный аргумент время может быть любым значением типа Variant, числовым выражением, строковым выражением или любым их сочетанием, которое представляет значение времени.  Если время содержит значение Null, возвращается значение Null.


Функция Minute

Возвращает значение типа Variant (Integer), содержащее целое число (от 0 до 59 включительно), которое представляет минуты в значении времени.

Синтаксис

Minute(время)

Обязательный аргумент время может быть любым значением типа Variant, числовым выражением, строковым выражением или любым их сочетанием, которое представляет значение времени.  Если время содержит значение Null, возвращается значение Null.


Функция Month

Возвращает значение типа Variant (Integer), содержащее целое число (от 0 до 12 включительно), которое представляет месяц в значении даты.

Синтаксис

Month(дата)

Обязательный аргумент дата может быть любым значением типа Variant, числовым выражением, строковым выражением или любым их сочетанием, которое представляет дату.  Если дата содержит значение Null, возвращается значение Null.


Функция Now

Возвращает значение типа Variant (Date), содержащее текущую дату и время по системному календарю и часам компьютера.

Синтаксис

Now


Функция Second

Возвращает значение типа Variant (Integer), содержащее целое число (от 0 до 59 включительно), которое представляет секунды в значении времени.

Синтаксис

Second(время)

Обязательный аргумент время может быть любым значением типа Variant, числовым выражением, строковым выражением или любым их сочетанием, которое представляет значение времени.  Если время содержит значение Null, возвращается значение Null.


Функция Time

Возвращает значение типа Variant (Date), содержащее текущее время по системным часам компьютера.

Синтаксис

Time

Дополнительные сведения

Для установки системного времени используйте инструкцию Time.


Инструкция Time

Устанавливает системное время.

Синтаксис

Time = время

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

Дополнительные сведения

Если аргумент время является строкой, инструкция Time пытается преобразовать ее в значение времени, используя разделители компонентов времени, определенные в текущей системе.  Если указанную строку не удастся преобразовать в допустимое время, возникает ошибка.


Функция Timer

Возвращает значение типа Single, представляющее число секунд, прошедших после полуночи.

Синтаксис

Timer


Функция TimeSerial

Возвращает значение типа Variant (Date), содержащее значение времени, соответствующее указанным часу, минуте и секунде.

Синтаксис

TimeSerial(hour, minute, second)

Синтаксис функции TimeSerial содержит следующие именованные аргументы:

Элемент	Описание
hour	Обязательный.  Значение типа Variant (Integer).  Число от 0 (12:00 A.M.) до 23 (11:00 P.M.) включительно или числовое выражение.
minute	Обязательный.  Значение типа Variant (Integer).  Любое числовое выражение.
second	Обязательный.  Значение типа Variant (Integer).  Любое числовое выражение.
Дополнительные сведения

Значение каждого аргумента функции TimeSerial  должно лежать в соответствующем диапазоне: 0 — 23 для часов и 0 — 59 для минут и секунд.  Кроме того, можно использовать числовые выражения для описания времени, на определенное число часов, минут и секунд более позднего или раннего, чем указанное.  В следующем примере аргументами функции TimeSerial являются не абсолютные значения, а числовые выражения.  Возвращается время, на 6 часов и 15 минут более раннее, чем полдень, т.е. 5:45:00.

TimeSerial(12 - 6, -15, 0)

Если значение какого-либо аргумента превышает максимально допустимое для него, то соответствующим образом увеличивается более старший компонент времени.  Например, 75 минут означают 1 час и 15 минут.  Однако если значение любого аргумента лежит вне диапазона -32 768 — 32 767, или сочетание всех трех аргументов описывает дату, лежащую вне допустимого диапазона дат, возникает ошибка.


Функция TimeValue

Возвращает значение типа Variant (Date), содержащее время.

Синтаксис

TimeValue(время)

Обязательный аргумент время обычно задается строковым выражением, представляющим время от 0:00:00 (12:00:00 A.M.) до 23:59:59 (11:59:59 P.M.) включительно.  Кроме того, в качестве аргумента время можно использовать любое выражение, представляющее время в этом диапазоне.  Если аргумент время содержит значение Null, возвращается значение Null.

Дополнительные сведения

При вводе времени можно использовать как 12-часовой, так и 24-часовой формат.  Например, и "2:24PM", и "14:24" являются допустимыми значениями аргумента время.

Если время содержит сведения о дате, они не возвращаются функцией TimeValue.  Однако если время содержит недопустимые сведения о дате, возникает ошибка.


Функция Weekday

Возвращает значение типа Variant (Integer), содержащее целое число, представляющее день недели.

Синтаксис

Weekday(date, [firstdayofweek])

Синтаксис функции Weekday содержит следующие именованные аргументы:

Элемент	Описание
date	Обязательный.  Значение типа Variant, числовое выражение, строковое выражение или любое их сочетание, представляющее дату.  Если date имеет значение Null, возвращается значение Null.
firstdayofweek	Необязательный.  Константа указывающая первый день недели.  Если этот аргумент опущен, подразумевается константа vbSunday.
Значения

Ниже перечислены допустимые значения аргумента firstdayofweek:

Константа	Значение	Описание
vbUseSystem	0	Используется значение NLS API.
vbSunday	1	Воскресенье (по умолчанию).
vbMonday	2	Понедельник.
vbTuesday	3	Вторник.
vbWednesday	4	Среда.
vbThursday	5	Четверг.
vbFriday	6	Пятница.
vbSaturday	7	Суббота.
Возвращаемые значения

Ниже перечислены значения, возвращаемые функцией Weekday:

Константа	Значение	Описание
vbSunday	1	Воскресенье.
vbMonday	2	Понедельник.
vbTuesday	3	Вторник.
vbWednesday	4	Среда.
vbThursday	5	Четверг.
vbFriday	6	Пятница.
vbSaturday	7	Суббота.


Функция Year

Возвращает значение типа Variant (Integer), содержащее целое число, представляющее год.

Синтаксис

Year(дата)

Обязательный аргумент дата может быть любым значением типа Variant, числовым выражением, строковым выражением или любым их сочетанием, которое представляет дату.  Если дата содержит значение Null, возвращается значение Null.


Пример использования функции Array

В данном примере функция Array используется для возвращения значения типа Variant, содержащего массив.

Dim MyWeek, MyDay

MyWeek = Array("Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс")

' Предполагается, что нижняя граница индексов массива установлена равной 1

' (с помощью инструкции Option Base).

MyDay = MyWeek(2)	' MyDay содержит "Вт".

MyDay = MyWeek(4)	' MyDay содержит "Чт".


Пример использования инструкции Const

В данном примере инструкция Const используется для описания констант, используемых вместо текстовых значений. Общие (Public) константы размещаются в общем разделе стандартного модуля, но не модуля класса. Личные (Private) константы могут быть описаны в общем разделе модуля любого типа.

' По умолчанию константы являются личными (Private).

Const MyVar = 459

' Объявляет общую (Public) константу.

Public Const MyString = "СПРАВКА"

' Объявляет личную (Private) целую (Integer) константу.

Private Const MyInt As Integer = 5

' Объявляет несколько констант в одной строке.

Const MyStr = "Привет", MyDouble As Double = 3.4567


Пример использования функции CreateObject

В данном примере функция CreateObject создает ссылку (xlApp) на Microsoft Excel. Эта ссылка используется для доступа к свойству Visible Microsoft Excel, а затем для закрытия Microsoft Excel с помощью метода Quit. После этого ссылка очищается.

Dim xlApp As Object	' Переменная, которая будет содержать ссылку.

Set xlApp = CreateObject("excel.application")

' Необходимо задать для свойства Visible

' значение True, чтобы приложение было видимым.

xlApp.Visible = True

' Использование xlApp для доступа к другим

' объектам Microsoft Excel.

xlApp.Quit	' По окончании работы вызывается метод Quit для выхода

Set xlApp = Nothing	' из приложения. Ссылка очищается.


Пример использования инструкции Declare

В данном примере показано, как использовать инструкцию Declare на уровне модуля в стандартном модуле для описания ссылки на внешнюю процедуру из библиотеки динамической компоновки (DLL) или на программный ресурс Macintosh. Инструкции Declare могут быть помещены в модули класса, если они являются личными (Private).

' В Microsoft Windows (16-разрядной):

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

' Пусть SomeBeep является псевдонимом для имени процедуры.

Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer)

' Для вызова GetWinFlags в предложении Alias

' используется порядковый номер.

Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

' В 32-разрядной Microsoft Windows используется библиотека USER32.DLL,

' а не USER.DLL. Для написания программы, способной работать в 32- или

' 16- разрядной Microsoft Windows, используется условная компиляция.

#If Win32 Then

Declare Sub MessageBeep Lib "User32" (ByVal N As Long)

#Else

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

#End If

' На Macintosh:

Declare Sub MessageAlert Lib "MyHd:MyAlert" Alias "MyAlert" (ByVal N _

As Integer)

' В предложении Alias используется ресурс программы.

Declare Sub MessageAlert Lib "MyHd:MyAlert" Alias "XTST$MyAlert" _

(ByVal N As Integer)

' Если указатель типа ресурса программы содержит только три символа,

' пробел на месте четвертого символа является обязательным.

Declare Sub MessageAlert Lib "MyHd:AnAlert" Alias "COD $AnAlert" _

(ByVal N As Integer)


Пример использования инструкций Defтип

В данном примере инструкции Defтип используются для задания по умолчанию типов данных для переменных и процедур Function, имена которых начинаются с указанных символов. Используемый по умолчанию тип данных может быть изменен только явным присвоением с использованием инструкции Dim. Инструкции Defтип можно использовать только на уровне модуля (т.е. нельзя использовать внутри процедур.

' Переменные, имена которых начинаются с букв "A" - "K",

' будут по умолчанию Integer.

DefInt A-K

' Переменные, имена которых начинаются с букв "L" - "Z",

' будут по умолчанию String.

DefStr L-Z

CalcVar = 4	' Инициализирует переменную типа Integer.

StringVar = "Всем привет"	' Инициализирует переменную типа String.

AnyVar = "Привет" 	' Будет обнаружено несовпадение типов.

Dim Calc As Double	' Явно объявлена переменная типа  Double.

Calc = 2.3455	' Присваивает значение переменной типа Double.

' Инструкции Defтип также применимы к функциям.

CalcNum = ATestFunction(4)	' Вызывает процедуру Function, определенную пользователем.

' Описание процедуры Function ATestFunction.

Function ATestFunction(INumber)

ATestFunction = INumber * 2	' Возвращает значение типа Integer.

End Function


Пример использования инструкции Dim

В данном примере инструкция Dim используется для объявления переменных и массивов. По умолчанию нижняя граница индексов массива равняется 0; для ее изменения следует использовать инструкцию Option Base на уровне модуля.

' По умолчанию AnyValue и MyValue являются переменными типа Variant

' и имеют пустые значения.

Dim AnyValue, MyValue

' Явно объявляет переменную типа Integer.

Dim Number As Integer

' Несколько объявлений на одной строке. AnotherVar является переменной

' типа Variant, поскольку ее тип опущен.

Dim AnotherVar, Choice As Boolean, BirthDate As Date

' DayArray является массивом, состоящим из 51 элемента типа Variant.

' Индексы элементов массива лежат в диапазоне от 0 до 50, если для

' текущего модуля используемая по умолчанию нижняя граница элементов

' массива (0) не изменена с помощью инструкции Option Base.

Dim DayArray(50)

' Matrix является двумерным массивом значений типа Integer.

Dim Matrix(3, 4) As Integer

' MyMatrix является трехмерным массивом значений типа Double с явно

' заданными границами индексов.

Dim MyMatrix(1 To 5,  4 To 9,  3 To 5) As Double

' BirthDay является массивом дат с индексами от 1 до 10.

Dim BirthDay(1 To 10) As Date

' MyArray является динамическим массивом значений типа Variant.

Dim MyArray()


Пример использования инструкции Erase

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

' Объявляет переменные-массивы.

Dim NumArray(10) As Integer	' Массив значений типа Integer.

Dim StrVarArray(10) As String	' Массив строк переменной длины.

Dim StrFixArray(10) As String * 10	' Массив строк фиксированной длины.

Dim VarArray(10) As Variant	' Массив типа Variant.

Dim DynamicArray() As Integer	' Динамический массив.

ReDim DynamicArray(10)	' Занимает память.

Erase NumArray	' Каждый элемент становится равным 0.

Erase StrVarArray	' Каждый элемент становится пустой строкой ("").

Erase StrFixArray	' Каждый элемент становится равным 0.

Erase VarArray	' Каждый элемент становится пустым.

Erase DynamicArray	' Освобождает память, используемую массивом.


Пример использования инструкции Function

В данном примере инструкция Function используется для объявления имени, аргументов и кода, составляющих основу процедуры Function. В последнем примере используются инициализированные аргументы Optional с заданным типом.

' Следующая функция, определенная пользователем, возвращает

' квадратный корень из переданного ей аргумента.

Function CalculateSquareRoot(NumberArg As Double) As Double

If NumberArg < 0 Then	' Анализирует аргумент.

Exit Function	' Возврат в вызывающую

' процедуру.

Else

CalculateSquareRoot = Sqr(NumberArg)	' Возвращает квадратный

' корень.

End If

End Function

Ключевое слово ParamArray позволяет функции принимать переменное число аргументов. В следующем описании FirstArg передается по значению.

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs())

Dim ReturnValue

' Если функция вызывается следующим образом:

ReturnValue = CalcSum(4, 3 ,2 ,1)

' Локальные переменные принимают следующие значения: FirstArg = 4,

' OtherArgs(1) = 3, OtherArgs(2) = 2 и т.п., если нижняя граница

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

Аргументы Optional могут иметь значения по умолчанию и типы, отличные от Variant.

' Если аргументы функции описаны следующим образом:

Function MyFunc(MyStr As String, Optional MyArg1 As _ Integer = 5, Optional MyArg2 = "Мария")

Dim RetVal

' Функция может быть вызвана следующим образом:

RetVal = MyFunc("Всем", 2, "Привет")	' Указаны все 3 аргумента.

RetVal = MyFunc("Тест", , 5)	' Второй аргумент опущен.

' Первый и третий аргументы(именованные аргументы).

RetVal = MyFunc(MyStr:="Привет ", MyArg1:=7)


Пример использования функции GetObject

В данном примере функция GetObject создает ссылку на конкретный лист Microsoft Excel Worksheet (MyXL). Для того чтобы сделать Microsoft Excel видимым, закрыть его и т.д., используется свойство Application объекта Worksheet. С помощью двух вызовов API процедура Sub DetectExcel ищет Microsoft Excel и, если он выполняется, вводит его в таблицу выполняемых объектов (Running Object Table). Первый вызов GetObject приводит к ошибке, если Microsoft Excel еще не запущен. В этой программе ошибка приводит к установке значения True для флага ExcelWasNotRunning. Второй вызов GetObject указывает открываемый файл. Если Microsoft Excel не был запущен, то в результате второго вызова функции это приложение запускается, при этом возвращается ссылка на лист, соответствующий указанному файлу. Файл mytest.xls должен существовать в указанном каталоге; в противном случае возникает ошибка Visual Basic "Ошибка программирования объектов". Далее в программе делаются видимыми окно Microsoft Excel и окно, содержащее указанный лист. И наконец, если Microsoft Excel не выполнялся при запуске этой программы, метод Quit объекта Application закрывает Microsoft Excel. Если это приложение выполнялось до запуска данной программы, попытка закрыть его не предпринимается. Ссылка на лист освобождается путем указания для нее состояния Nothing.

' Описываем необходимые процедуры API:

Declare Function FindWindow Lib "user32" Alias _

"FindWindowA" (ByVal lpClassName as String, _

ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _

"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _

ByVal wParam as Long _

ByVal lParam As Long) As Long

Sub GetExcel()

Dim MyXL As Object	' Переменная для сохранения

' ссылки на Microsoft Excel.

Dim ExcelWasNotRunning As Boolean	' Флаг для выхода из приложения.

' Проверка, выполняется ли Microsoft Excel.

On Error Resume Next	' Отложенный перехват ошибок.

' Функция GetObject, вызванная без указания первого аргумента,

' возвращает ссылку на экземпляр приложения. Если это приложение

' не запущено, возвращается ошибка. Обратите внимание на запятую,

' стоящую на месте отсутствующего первого аргумента.

Set MyXL = Getobject(, "Excel.Application")

If Err.Number <> 0 Then ExcelWasNotRunning = True

Err.Clear	' Очищаем объект Err на случай ошибки.

' Проверка Excel. Если Excel выполняется,

' он вводится в таблицу выполняемых объектов (Running Object table).

DetectExcel

Задаем в объектной переменной ссылку на открываемый файл.

Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Делаем видимым  Excel с помощью свойства Application. Затем делаем

' видимым окно, содержащее файл, с помощью семейства Windows объекта,

' определяемого ссылкой MyXL.

MyXL.Application.Visible = True

MyXL.Parent.Windows(1).Visible = True

' Здесь помещаем инструкции

 	' по обработке вызванного файла.

' ...

' Если приложение Microsoft Excel не выполнялось при запуске данной

' программы, закрываем его с помощью метода Quit свойства Application.

' Отметим, что при попытке выхода из Microsoft Excel строка заголовка

' мигает и выводится приглашение сохранить все загруженные файлы.

If ExcelWasNotRunning = True Then

MyXL.Application.Quit

End IF

Set MyXL = Nothing	' Освобождаем ссылку на

' приложение и электронную таблицу.

End Sub

Sub DetectExcel()

' Процедура находит выполняемый Excel и регистрирует его.

Const WM_USER = 1024

Dim hWnd As Long

' Если Excel выполняется, этот вызов API возвращает его дескриптор.

hWnd = FindWindow("XLMAIN", 0)

If hWnd = 0 Then	' 0 означает, что Excel не выполняется.

Exit Sub

Else

' Excel выполняется. Используйте функцию API SendMessage, чтобы ввести его в таблицу выполняемых объектов (Running Object Table).

SendMessage hWnd, WM_USER + 18, 0, 0

End If

End Sub


Пример использования функции LBound

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

Dim Lower

Dim MyArray(1 To 10, 5 To 15, 10 To 20) 	' Объявляет переменные-массивы.

Dim AnyArray(10)

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

Lower = Lbound(MyArray, 3)	' Возвращает 10.

Lower = Lbound(AnyArray)	' Возвращает 0 или 1 (как

' указано в инструкции

' Option Base).


Пример использования инструкции Let

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

Dim MyStr, MyInt

' Следующие присвоения используют инструкцию Let.

Let MyStr = "Привет"

Let MyInt = 5

Ниже приведены эквивалентные присвоения, не использующие инструкцию Let.

Dim MyStr, MyInt

MyStr = "Привет"

MyInt = 5


Пример использования инструкции 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.


Пример использования инструкции Option Compare

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

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

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

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

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


Пример использования инструкции Option Explicit

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

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

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

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

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

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


Пример использования инструкции Option Private

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

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


Пример использования инструкции Private

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

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

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

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

Private MyVar, YourVar, ThisVar As Integer


Пример использования инструкции Property Get

В данном примере инструкция 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


Пример использования инструкции Property 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"


Пример использования инструкции Property Set

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

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

Property Set Pen(P As Object)

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

End Property


Пример использования инструкции Public

В данном примере инструкция 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


Пример использования инструкции ReDim

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

Dim MyArray() As Integer	' Объявляет динамический массив.

Redim MyArray(5)	' Размещает 5 элементов.

For I = 1 To 5	' Выполняет цикл 5 раз.

MyArray(I) = I	' Инициализирует массив.

Next I

Следующая инструкция изменяет размер массива и обнуляет его элементы.

Redim MyArray(10)	' Увеличивает размер массива до 10 элементов.

For I = 1 To 10	' Выполняет цикл 10 раз.

MyArray(I) = I	' Инициализирует массив.

Next I

Следующая инструкция изменяет размер массива, но сохраняет существующие элементы.

Redim Preserve MyArray(15)	' Увеличивает размер массива до 15 элементов.


Пример использования инструкции Rem

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

Rem Это первая форма синтаксиса.

Ниже показана вторая форма синтаксиса.

Dim MyStr1, MyStr2

MyStr1 = "Привет": Rem Пояснение отделяется двоеточием.

MyStr2 = "До свидания" 	' Можно и без двоеточия.


Пример использования инструкции Set

В данном примере инструкция Set используется для присвоения переменным ссылок на объект.  Предполагается, что YourObject является допустимым объектом, обладающим свойством Text.

Dim YourObject, MyObject, MyStr

Set MyObject = YourObject	' Присваивает ссылку на объект.

' MyObject и YourObject ссылаются на один и тот же объект.

YourObject.Text = "Всем привет"	' Инициализирует свойство.

MyStr = MyObject.Text	' Возвращает "Всем привет".

' Разрыв связи: MyObject больше не ссылается на YourObject.

Set MyObject = Nothing	' Освобождает объект.


Пример использования инструкции Static

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

' Описание функции.

Function KeepTotal(Number)

' Только переменная Accumulate сохраняет свое значение

' от вызова к вызову.

Static Accumulate

Accumulate = Accumulate + Number

KeepTotal = Accumulate

End Function

' Описание функции Static.

Static Function MyFunction(Arg1, Arg2, Arg3)

' Все локальные переменные сохраняют свои значения

' между вызовами функции.

Accumulate = Arg1 + Arg2 + Arg3

Half = Accumulate / 2

MyFunction = Half

End Function


Пример использования инструкции Sub

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

' Описание процедуры Sub.

' Процедура Sub с двумя аргументами.

Sub SubComputeArea(Length, TheWidth)

Dim Area As Double	' Объявляет локальную переменную.

If Length = 0 Or TheWidth = 0 Then

' Если хотя бы один из аргументов равен 0.

Exit Sub	' Немедленно завершает процедуру Sub.

End If

Area = Length * TheWidth	' Вычисляет площадь прямоугольника.

Debug.Print Area	' Выводит полученное значение в окно отладки.

End Sub


Пример использования инструкции Type

В данном примере инструкция Type используется для определения типа данных.  Инструкция Type используется только на уровне модуля.  При появлении в модуле класса инструкции Type должно предшествовать ключевое слово Private.

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

ID As Integer	' Элементы типа данных.

Name As String * 20

Address As String * 30

Phone As Long

HireDate As Date

End Type

Sub CreateRecord()

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

' Присвоение значений элементам переменной EmployeeRecord

' должно выполняться в процедуре.

MyRecord.ID = 12003	' Присваивает значение элементу.

End Sub


Пример использования функции UBound

В данном примере функция UBound используется для определения максимального доступного индекса указанной размерности массива.

Dim Upper

Dim MyArray(1 To 10, 5 To 15, 10 To 20)	' Объявляет переменные-массивы.

Dim AnyArray(10)

Upper = UBound(MyArray, 1)	' Возвращает 10.

Upper = UBound(MyArray, 3)	' Возвращает 20.

Upper = UBound(AnyArray)	' Возвращает 10.


Функция Array

Возвращает значение типа Variant, содержащее массив.

Синтаксис

Array(списокАргументов)

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

Дополнительные сведения

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

Dim A As Variant

A = Array(10,20,30)

B = A(2)

Нижняя граница индексов массива, созданного с помощью функции Array, всегда равняется нулю.  В отличие от массивов других типов, она не определяется нижней границей, заданной в инструкции Option Base.

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


Инструкция Const

Описывает константы, используемые вместо констант в явном представлении (литералов).

Синтаксис

[Public | Private] Const имяКонстанты [As тип] = выражение

Синтаксис инструкции Const содержит следующие элементы:

Элемент	Описание
Public	Необязательный.  Ключевое слово, используемое на уровне модуля для описания констант, доступных всем процедурам во всех модулях.  Не допускается в процедурах.
Private	Необязательный.  Ключевое слово, используемое на уровне модуля для описания констант, доступных только внутри модуля, в котором выполняется описание.  Не допускается в процедурах.
имяКонстанты	Обязательный.  Имя константы, удовлетворяющее стандартным правилам именования переменных.
тип	Необязательный.   Один из поддерживаемых типов данных: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String или Variant.  Для каждой описываемой константы следует использовать отдельное предложение As тип.
выражение	Обязательный.  Литерал, другая константа или любое сочетание, которое включает все арифметические или логические операторы за исключением Is.
Дополнительные сведения

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

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

Не допускается использование переменных, определяемых пользователем функций или внутренних функций языка Visual Basic (типа Chr) в выражениях, присваиваемых константам.

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

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

Константы, описанные в процедурах Sub, Function или Property являются локальными для этих процедур.  Областью определения константы, описанной вне процедуры, является модуль, в котором она описана.   В любом месте, в котором возможно использование выражений, допускается использование и констант.


Функция CreateObject

Создает и возвращает ссылку на объект ActiveX.

Синтаксис

CreateObject(класс)

Аргумент класс использует синтаксис имяПриложения.типОбъекта, который содержит следующие элементы:

Элемент	Описание
имяПриложения	Обязательный; Variant (String).  Имя приложения, являющегося источником объекта.
типОбъекта	Обязательный; Variant (String).  Тип или класс объекта, который следует создать.
Дополнительные сведения

Каждое приложение, поддерживающее программирование объектов, может создавать объекты по крайней мере одного типа.  Например, текстовым процессором могут быть созданы объект Application (приложение), объект Document (документ) и объект Toolbar (панель инструментов).

Чтобы создать объект ActiveX, следует присвоить объектной переменной объект, возвращенный функцией CreateObject:

‘ Описывает объектную переменную, содержащую ссылку на объект.

‘ Предложение Dim as Object задает связывание на поздней стадии.

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Sheet")

Эти инструкции запускают приложение, являющееся источником объекта, в данном случае, электронную таблицу Microsoft Excel.  После создания объекта следует присвоить ссылку на него предварительно описанной объектной переменной.  В следующем примере доступ к свойствам и методам нового объекта осуществляется через объектную переменную ExcelSheet и другие объекты Microsoft Excel, включая объект Application и семейство Cells.

' Делает Excel видимым через объект Application.

ExcelSheet.Application.Visible = True

' Помещает текст в первую ячейку электронной таблицы.

ExcelSheet.Cells(1, 1).Value = "Это столбец A, строка 1"

' Сохраняет электронную таблицу в каталоге C:\test.doc.

ExcelSheet.SaveAs "C:\ TEST.DOC"

' Закрывает Excel, вызвав метод Quit объекта Application.

ExcelSheet.Application.Quit

' Освобождает объектную переменную.

Set ExcelSheet = Nothing

Описание объектной переменной с предложением As Object создает переменную, которая может содержать ссылку на объект любого типа.  Однако доступ к объекту через эту переменную возможен на стадии позднего связывания; это означает, что связывание осуществляется при выполнении программы.  Чтобы создать объектную переменную, обеспечивающую связывание на ранней стадии; т.е. связывание при компиляции программы, следует описать объектную переменную со специфическим кодом класса.  Например, пользователь имеет возможность описать и создать следующие ссылки для Microsoft Excel:

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.WorkSheet

Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets(1)

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

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

Call MySub (CreateObject("Excel.Application"))

Примечание.   Функцию CreateObject следует использовать в отсутствие текущего экземпляра объекта.  Если имеется уже выполняющийся экземпляр объекта, запускается новый экземпляр, и создается объект указанного типа.  При наличии текущего экземпляра или необходимости запуска приложения и загрузки файла можно использовать функцию GetObject.

Если объект зарегистрирован как уникальный, создается только один экземпляр этого объекта, вне зависимости от числа вызовов функции CreateObject.


Инструкция Declare

Применяется на уровне модуля ссылок на внешние процедуры в библиотеке динамической компоновки (DLL).

Синтаксис 1

[Public | Private] Declare Sub имя Lib "имяБиблиотеки" [Alias "псевдоним"] [([списокАргументов])]

Синтаксис 2

[Public | Private] Declare Function имя Lib "имяБиблиотеки" [Alias "псевдоним"] [([списокАргументов])] [As тип]

Синтаксис инструкции Declare содержит следующие элементы:

Элемент	Описание
Public	Необязательный.  Используется для описания процедур, которые доступны для всех других процедур во всех модулях.
Private	Необязательный.  Используется для описания процедур, которые доступны только в модуле, в котором выполняется описание.
Sub	Необязательный (должно быть указано одно из ключевых слов Sub или Function).  Указывает, что процедура не возвращает значение.
Function	Необязательный (должно быть указано одно из ключевых слов Sub или Function).  Указывает, что процедура возвращает значение, которое может быть использовано в выражении.
имя	Обязательный.  Любое допустимое имя процедуры.  Следует помнить, что вход в библиотеки динамической компоновки осуществляется с учетом регистра.
Lib	Обязательный.  Указывает, что описываемая процедура содержится в библиотеке динамической компоновки или в программном ресурсе.  Предложение Lib обязательно для каждого описания.
имяБиблиотеки	Обязательный.  Имя библиотеки динамической компоновки или программного ресурса, которые содержат описываемую процедуру.
Alias	Необязательный.  Указывает, что вызываемая процедура имеет другое имя в библиотеке динамической компоновки.  Это полезно, когда имя внешней процедуры совпадает с ключевым словом.  Имеет смысл использовать Alias и в том случае, когда имя процедуры библиотеки динамической компоновки совпадает с именем общей переменной, константы или любой другой процедуры в той же области определения.  Alias полезен также, если некоторые символы в имени процедуры библиотеки динамической компоновки не соответствуют правилам именования для библиотек динамической компоновки.
псевдоним	Необязательный.  Имя процедуры в библиотеке динамической компоновки или в программном ресурсе.  Если первым символом не является символ (#), псевдоним является именем точки входа процедуры в библиотеке динамической компоновки.  Если символ (#) является первым символом, все последующие символы должны указывать порядковый номер точки входа в процедуру.
списокАргументов	Необязательный.  Список переменных, представляющий аргументы, которые передаются в процедуру при ее вызове.
тип	Необязательный.  Тип данных значения, возвращаемого процедурой Function; допускаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Variant, определяемый пользователем тип или объектный тип.
Аргумент списокАргументов имеет следующий синтаксис и элементы:

[Optional] [ByVal | ByRef] [ParamArray] имяПеременной[( )] [As тип]

Элемент	Описание
Optional	Необязательный.  Указывает, что этот аргумент необязателен.  При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional.  Не допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray.
ByVal	Необязательный.  Указывает, что этот аргумент передается по значению.
ByRef	Указывает, что этот аргумент передается по ссылке.  Описание ByRef используется в Visual Basic по умолчанию.
ParamArray	Необязательный.  Используется только в качестве последнего элемента в списке списокАргументов для указания, что конечным аргументом является массив типа Optional элементов типа Variant.  Ключевое слово ParamArray позволяет передавать произвольное число аргументов.  Это ключевое слово не может использоваться со словами ByVal, ByRef или Optional.
имяПеременной	Обязательный.  Имя переменной, представляющее передаваемый в процедуру аргумент; должно соответствовать стандартным правилам именования переменных.
Тип	Необязательный.  Тип данных аргумента, передаваемого в процедуру; допускаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant, определяемый пользователем тип или объектный тип.
Дополнительные сведения

Для процедур Function тип данных процедуры определяет тип возвращаемых данных.  Воспользуйтесь предложением As после элемента списокАргументов, чтобы определить тип данных, возвращаемых функцией.  Внутри элемента списокАргументов можно использовать предложение As для задания типа данных любого из аргументов, передаваемых в процедуру.  В дополнение к указанию любого стандартного типа данных, предложение As Any в аргументе списокАргументов позволяет приостановить проверку типа данных и разрешить передачу в процедуру любого типа данных.

Пустые скобки указывают, что процедура Sub или Function не имеет аргументов, и что в конструкции Visual Basic следует обеспечить отсутствие передачи аргументов.  В следующем примере, процедура First не имеет аргументов.  Если при вызове процедуры First будут заданы аргументы, возникнет ошибка:

Declare Sub First Lib "MyLib" ()

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

Declare Sub First Lib "MyLib" (X As Long)

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

Примечание.   В языке Visual Basic имеется константа vbNullString для использования при вызове внешних процедур, когда внешней процедуре требуется строка без значения.  Это не то же самое, что пустая строка  ("").


Инструкции DefТип

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

Синтаксис

DefBool диапазонБукв[, диапазонБукв] . . .

DefByte диапазонБукв[, диапазонБукв] . . .

DefInt диапазонБукв[, диапазонБукв] . . .

DefLng диапазонБукв[, диапазонБукв] . . .

DefCur диапазонБукв[, диапазонБукв] . . .

DefSng диапазонБукв[, диапазонБукв] . . .

DefDbl диапазонБукв[, диапазонБукв] . . .

DefDec диапазонБукв[, диапазонБукв] . . .

DefDate диапазонБукв[, диапазонБукв] . . .

DefStr диапазонБукв[, диапазонБукв] . . .

DefObj диапазонБукв[, диапазонБукв] . . .

DefVar диапазонБукв[, диапазонБукв] . . .

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

буква_1[-буква_2]

Аргументы буква_1 и буква_2 указывают диапазон имен, для которых задается тип данных по умолчанию.  Каждый аргумент представляет первую букву имени переменной, аргумента, процедуры Function или Property Get и может быть любой буквой алфавита.  Регистр символов в аргументе диапазонБукв не существенен.

Дополнительные сведения

Имя инструкции определяет тип данных:

Инструкция	Тип данных
DefBool	Boolean
DefByte	Byte
DefInt	Integer
DefLng	Long
DefCur	Currency
DefSng	Single
DefDbl	Double
DefDec	Decimal (в настоящее время не поддерживается)
DefDate	Date
DefStr	String
DefObj	Object
DefVar	Variant
Например, в следующем фрагменте программы Message представляет собой строковую переменную:

DefStr A-Q

. . .

Message = "Переполнение стека."

Инструкция DefТип действует только на модуль, в котором она используется.  Например, инструкция DefInt в одном модуле действует только на типы данных по умолчанию для переменных, передаваемых в процедуры аргументов, и возвращаемых типов процедур Function и Property Get, описанных в данном модуле.  Типы данных по умолчанию для переменных, передаваемых в процедуры аргументов, и возвращаемых типов данных в других модулях остаются без изменений.  Если тип данных не описан явно с помощью инструкции DefТип, то для всех переменных, аргументов, процедур Function и Property Get по умолчанию используется тип данных Variant.

При указании диапазона букв обычно определяется тип данных по умолчанию для переменных, которые начинаются с первых 128 символов набора.  Однако при указании диапазона A – Z задается тип данных по умолчанию для всех переменных, включая те, что начинаются с международных символов из расширенной части набора (128 – 255).

После указания диапазона A – Z имеется возможность переопределять с помощью инструкций DefТип подчиненные диапазоны переменных.  Если после задания диапазона включить ранее определенную букву в другую инструкцию DefТип, возникает ошибка.  Однако возможно явное указание типа данных любой определенной или не определенной ранее переменной с помощью инструкции Dim с предложением As тип.  Например, имеется возможность использовать следующую программу на уровне модуля для определения переменной с типом Double, хотя был задан тип данных по умолчанию Integer:

DefInt A-Z

Dim TaxRate As Double

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


Инструкция Dim

Описывает переменные и выделяет для них память.

Синтаксис

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

Синтаксис инструкции Dim содержит следующие элементы:

Элемент	Описание
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 тип.
Дополнительные сведения

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

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

Dim NumberOfEmployees As Integer

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

Dim X As New Worksheet

Если при описании объектной переменной не используется ключевое слово New, то для использования объекта, на который ссылается переменная, существующий объект должен быть с помощью инструкции Set присвоен переменной.  До присвоения объекта описанная объектная переменная имеет специальное значение Nothing, которое указывает, что она не содержит ссылку на какой-либо определенный экземпляр объекта.

Имеется также возможность применять инструкцию Dim с пустыми скобками для описания динамического массива.  После описания динамического массива, воспользуйтесь инструкцией ReDim в процедуре для определения числа размерностей и элементов массива.  При попытке переопределить размерности переменной-массива, чей размер был явно указан в инструкции Private, Public или Dim, возникает ошибка.

Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant.

При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями.  Переменные типа Variant получают при инициализации значение Empty.  Каждый элемент переменной определяемого пользователем типа при инициализации получает значение, которые он получил бы, если бы являлся отдельной переменной.

Примечание.   При использовании инструкции Dim в процедуре ее обычно помещают в начало процедуры.


Инструкция Erase

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

Синтаксис

Erase списокМассивов

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

Дополнительные сведения

Важно знать, имеет ли массив фиксированный размер (обычный массив) или является динамическим, поскольку инструкция Erase выполняется по-разному, в зависимости от типа массива.  Инструкция Erase не освобождает память для массивов фиксированной длины.  Инструкция Erase устанавливает элементы массивов фиксированной длины следующим образом:

Тип массива	Действие Erase на массив фиксированной длины
Массив чисел	Присваивает каждому элементу значение 0.
Массив строк (переменной длины)	Присваивает каждому элементу значение пустой строки ("").
Массив строк (фиксированной длины)	Присваивает каждому элементу значение нуля.
Массив типа Variant	Присваивает каждому элементу значение Empty.
Массив определяемого пользователем типа	Присваивает каждому элементу значение, как отдельной переменной.
Массив объектов	Присваивает каждому элементу специальное значение Nothing.
Erase освобождает память, используемую динамическими массивами.  Перед тем как из программы вновь станет возможна ссылка на динамический массив, необходимо переопределить размерности переменной массива с помощью инструкции ReDim.


Инструкция Function

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

Синтаксис

[Public | Private] [Static] Function имя [(списокАргументов)] [As тип]
[инструкции]
[имя = выражение]
[Exit Function]
[инструкции]
[имя = выражение]

End Function

Синтаксис инструкции Function содержит следующие элементы:

Элемент	Описание
Public	Необязательный.  Указывает, что процедура Function доступна для всех других процедур во всех модулях.  При использовании в личном модуле (содержащем инструкцию Option Private) такая процедура недоступна вне проекта.
Private	Необязательный.  Указывает, что процедура Function доступна для других процедур только того модуля, в котором она описана.
Static	Необязательный.  Указывает, что локальные переменные процедуры Function сохраняются в промежутках времени между вызовами этой процедуры.  Атрибут Static не действует на переменные, описанные вне процедуры Function, даже если они используются в этой процедуре.
имя	Обязательный.  Имя процедуры Function, удовлетворяющее стандартным правилам именования переменных.
списокАргументов	Необязательный.  Список переменных, представляющий аргументы, которые передаются в процедуру Function при ее вызове.  Имена переменных разделяются запятой.
тип	Необязательный.  Тип данных значения, возвращаемого процедурой Function, поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (за исключением строк фиксированной длины), Object, Variant или любой определяемый пользователем тип.  Невозможен возврат массивов любого типа, однако допускается возврат значения типа Variant, содержащего массив.
инструкции	Необязательный.  Любая группа инструкций, выполняемых внутри процедуры Function.
выражение	Необязательный.  Возвращаемое значение процедуры Function.
Аргумент списокАргументов имеет следующий синтаксис и элементы:

[Optional] [ByVal | ByRef] [ParamArray] имяПеременной[( )] [As тип] [= поУмолчанию]

Элемент	Описание
Optional	Необязательный.  Указывает, что этот аргумент необязателен.  При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional.  Не допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray.
ByVal	Необязательный.  Указывает, что этот аргумент передается по значению.
ByRef	Необязательный.  Указывает, что этот аргумент передается по ссылке.  Описание ByRef используется в Visual Basic по умолчанию.
ParamArray	Необязательный.  Используется только в качестве последнего элемента в списке списокАргументов для указания, что конечным аргументом является описанный как Optional массив типа Variant.  Ключевое слово ParamArray позволяет задавать произвольное количество аргументов.  Оно не может быть использовано со словами ByVal, ByRef или Optional.
имяПеременной	Обязательный.  Имя переменной, удовлетворяющее стандартным правилам именования переменных.
тип	Необязательный.  Тип данных аргумента, передаваемого в процедуру; допускаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается) Date, String (только строки переменной длины), Object, Variant.  Если отсутствует ключевое слово Optional, допускается указание определяемого пользователем типа или объектного типа.
поУмолчанию	Необязательный.  Любая константа или выражение, дающее константу.  Используется только вместе с параметром Optional.  Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.
Дополнительные сведения

Процедуры Function, не описанные явно с помощью ключевых слов Public или Private, по умолчанию являются общими.  Если не используется ключевое слово Static, значения локальных переменных не сохраняются между вызовами.

Внимание!   Допускаются рекурсивные процедуры Function; то есть они могут вызывать сами себя для выполнения определенных задач.  Однако рекурсия может приводить к переполнению стека.  Ключевое слово Static обычно не используется с рекурсивными процедурами Function.

Все выполняемые команды должны содержаться в процедурах.  Не допускается определение процедуры Function внутри другой процедуры Function, Sub или Property.

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

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

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

Для возврата значения из функции следует присвоить значение имени функции.  Любое число таких инструкций присвоения может находиться в любом месте процедуры.  Если имени процедуры не присваивается никакого значения, процедура возвращает значение по умолчанию: числовая функция возвращает нулевое значение, строковая функция возвращает значение пустой строки (""), а функция типа Variant возвращает значение Empty.  Функция, которая возвращает ссылку на объект, возвращает значение Nothing, если внутри процедуры Function никакая ссылка на объект не присваивается имени функции с помощью инструкции Set.

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

Function BinarySearch(. . .) As Boolean

. . .

' Значение не найдено. Возвращается значение False.

If lower > upper Then

BinarySearch = False

Exit Function

End If

. . .

End Function

Переменные, используемые в процедурах Function, разбиваются на две категории: явно описанные внутри процедуры и не описанные внутри процедуры.  Переменные, которые явно описаны в процедуре (с помощью ключевого слова Dim или эквивалентного ему), всегда являются локальными для этой процедуры. Переменные, которые используются, но явно не описаны в процедуре, также являются локальными, если они явно не описаны на более высоком уровне.

Внимание!   В процедуре допускается использование переменной, которая явно не описана в этой процедуре, но при этом может возникать конфликт имен, если на уровне модуля был определен элемент с тем же самым именем.  Если в процедуре содержится ссылка на неописанную переменную, имя которой совпадает с именем другой процедуры, константы или переменной, то подразумевается, что процедура ссылается на это имя на уровне модуля.  Чтобы избежать возникновения конфликтов такого рода, следует пользоваться явным описанием переменных.  Для включения обязательного явного описания переменных используется инструкция Option Explicit.

Внимание!   В языке Visual Basic возможна реорганизация арифметических выражений для увеличения скорости их выполнения.  Избегайте применения процедуры Function в арифметическом выражении, если эта процедура изменяет значения переменных, используемых в этом же выражении.


Функция GetObject

Возвращает ссылку на объект ActiveX, сохраненный в файле.

Синтаксис

GetObject([pathname] [, class])

Синтаксис функции GetObject содержит следующие именованные аргументы:

Элемент	Описание
pathname	Необязательный; Variant (String). Полный путь и имя файла, содержащего объект, который следует загрузить.  Если аргумент pathname опущен, должен быть указан аргумент class.
class	Необязательный; Variant (String).  Строка, представляющая класс объекта.
Аргумент class использует синтаксис имяПриложения.типОбъекта, который содержит следующие элементы:

Элемент	Описание
имяПриложения	Обязательный; Variant (String).  Имя приложения, являющегося источником объекта.
типОбъекта	Обязательный; Variant (String). Тип или класс создаваемого объекта.
Дополнительные сведения

Функцию GetObject используют для доступа к объекту ActiveX, сохраненному в файле, и присвоения объекта объектной переменной.  Присвоить объект, возвращаемый функцией GetObject, объектной переменной позволяет инструкция Set.  Например:

Dim CADObject As Object

Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

Эти инструкции запускают приложение, указанное с помощью аргумента pathname, и активизируют объект, находящийся в указанном файле.

Если pathname является пустой строкой (""), GetObject возвращает новый экземпляр объекта указанного типа.  Если аргумент pathname опущен, GetObject возвращает текущий активный объект указанного типа.  Если ни одного объекта указанного типа не существует, возникает ошибка.

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

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

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

Если class для объекта не указан, механизм программирования объектов определяет приложение, которое следует запустить, и объект, который следует активизировать, по указанному имени файла.  Однако некоторые файлы могут содержать несколько классов объектов.  Например, один файл рисунка может содержать три разных типа объектов: объект Application (приложение), объект Drawing (рисунок) и объект Toolbar (панель инструментов).  Чтобы указать, какой объект из файла следует активизировать, используют необязательный аргумент class.  Например:

Dim MyObject As Object

Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

В приведенном выше примере FIGMENT является именем графического приложения, а DRAWING одним из поддерживаемых им типов объектов.

После активизации объекта следует присвоить ссылку на него предварительно описанной объектной переменной.  В приведенном выше примере для доступа к свойствам и методам нового объекта следует использовать объектную переменную MyObject.  Например:

MyObject.Line 9, 90

MyObject.InsertText 9, 100, "Всем привет!"

MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Примечание.   Функцию GetObject следует использовать при наличии текущего экземпляра объекта или для создания объекта с использованием уже загруженного файла.  Если текущего экземпляра объекта не существует или запуск объекта из загруженного файла являются нежелательными, следует использовать функцию CreateObject.

Если объект зарегистрирован как уникальный, создается только один экземпляр этого объекта независимо от числа вызовов функции CreateObject.  Для уникального объекта функция GetObject всегда возвращает один и тот же экземпляр, если при ее вызове указана пустая строка ("").  Ошибка возникает, если аргумент pathname опущен.  Нельзя использовать функцию GetObject для получения ссылки на класс, созданный с помощью Visual Basic.


Функция LBound

Возвращает значение типа Long, содержащее минимальный доступный индекс указанной размерности массива.

Синтаксис

LBound(имяМассива[, размерность])

Синтаксис функции LBound содержит следующие элементы:

Элемент	Описание
имяМассива	Обязательный.  Имя переменной массива, удовлетворяющее стандартным правилам именования переменных.
размерность	Необязательный; Variant (Long).  Целое число, указывающее размерность, нижнюю границу которой возвращает функция.  Для первой размерности следует указать 1, для второй 2 и т.д.  Если аргумент размерность опущен, подразумевается значение 1.
Дополнительные сведения

Функция LBound вместе с функцией UBound используется для определения размеров массива.  Функция UBound применяется для выяснения верхнего предела размерности массива.

LBound возвращает значения, перечисленные в приводимой ниже таблице, для массива со следующими размерностями:

Dim A(1 To 100, 0 To 3, -3 To 4)

Инструкция	Возвращаемое значение
LBound(A, 1)	1
LBound(A, 2)	0
LBound(A, 3)	-3
По умолчанию нижняя граница любой размерности имеет значение 0 или 1, в зависимости от значения задаваемого в инструкции Option Base.  Нижней границей в массивах, созданных с помощью функции Array, всегда является нуль; вне зависимости от инструкции Option Base.

Массивы, размерности которых задаются с помощью предложения To в инструкции Dim, Private, Public, ReDim или Static, могут иметь в качестве нижней границы индекса любое целое значение.


Инструкция Let

Присваивает значение выражения переменной или свойству.

Синтаксис

[Let] имяПеременной = выражение

Синтаксис инструкции Let содержит следующие элементы:

Элемент	Описание
Let	Необязательный.  Явное использование ключевого слова Let зависит от вкуса пользователя, обычно это слово опускают.
имяПеременной	Обязательный.  Имя переменной или свойства, удовлетворяющее стандартным правилам именования переменных.
выражение	Обязательный.  Значение, присваиваемое переменной или свойству.
Дополнительные сведения

Значение выражения может быть присвоено переменной или свойству, только если оно имеет совместимый с этой переменной тип данных.  Невозможно присвоить строковое выражение числовой переменной или числовое выражение строковой переменной.  Такая попытка приведет к ошибке во время компиляции.

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

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

Инструкция Let может быть использована для присвоения одной переменной-записи другой, только если обе переменные имеют одинаковый определяемый пользователем тип.  Для присвоения переменных-записей различных определяемых пользователем типов используется инструкция LSet.  Для присвоения переменным ссылок на объекты применяется инструкция Set.


Инструкция 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 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 Explicit

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

Синтаксис

Option Explicit

Дополнительные сведения

Инструкция Option Explicit при ее использовании должна находиться в модуле до любой процедуры.

При использовании инструкции Option Explicit необходимо явно описать все переменные с помощью инструкций Dim, Private, Public, ReDim или Static.  При попытке использовать неописанное имя переменной возникает ошибка во время компиляции.

Когда инструкция Option Explicit не используется, все неописанные переменные имеют тип Variant, если используемый по умолчанию тип данных не задается с помощью инструкции DefТип.

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


Инструкция 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 не разрешены.


Инструкция Private

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

Синтаксис

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

Синтаксис инструкции Private содержит следующие элементы:

Элемент	Описание
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 в процедуре она обычно помещается в начало процедуры.


Инструкция Property Get

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

Синтаксис

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

End Property

Синтаксис инструкции Property Get содержит следующие элементы:

Элемент	Описание
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 (если она имеется).
тип	Необязательный.  Тип данных значения, возвращаемого процедурой Property Get; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (за исключением строк фиксированной длины), Object, Variant или определяемый пользователем тип.  Невозможен возврат массивов любого типа, однако допускается возврат значения типа Variant, содержащего массив. Тип данных значения, возвращаемого процедурой Property Get , должен совпадать с типом последнего (или иногда единственного) аргумента соответствующей процедуры Property Let (если она имеется), который определяет значение, присваиваемое свойству с правой стороны выражения.
инструкции	Необязательный.  Любая группа инструкций, выполняемых внутри процедуры Property Get.
выражение	Необязательный.  Значение свойства, возвращаемое процедурой, которая определяется инструкцией Property Get.
Аргумент списокАргументов имеет следующий синтаксис и элементы:

[Optional] [ByVal | ByRef] имяПеременной[( )] [As тип] [= поУмолчанию]

Элемент	Описание
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 Let

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

Синтаксис

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

End Property

Синтаксис инструкции Property Let содержит следующие элементы:

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

[Optional] [ByVal | ByRef] имяПеременной[( )] [As тип] [= поУмолчанию]

Элемент	Описание
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, тип которых не указан явно с помощью слов 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 Set

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

Синтаксис

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

End Property

Синтаксис инструкции Property Set содержит следующие элементы:

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

[Optional] [ByVal | ByRef] имяПеременной[( )] [As тип] [= поУмолчанию]

Элемент	Описание
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 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).


Инструкция Public

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

Синтаксис

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

Синтаксис инструкции Public содержит следующие элементы:

Элемент	Описание
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.  Каждый элемент переменной типа, определяемого пользователем, при инициализации получает значение, которые он получил бы, если бы являлся отдельной переменной.


Инструкция ReDim

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

Синтаксис

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

Синтаксис инструкции ReDim содержит следующие элементы:

Элемент	Описание
Preserve	Необязательный.  Ключевое слово, используемое для сохранения данных в существующем массиве при изменении значения последней размерности.
имяПеременной	Обязательный.  Имя переменной, удовлетворяющее стандартным правилам именования переменных.
индексы	Обязательный.  Размерности переменной массива; допускается описание до 60 размерностей.  Аргумент индексы использует следующий синтаксис:
	[нижний To] верхний [,[нижний To] верхний] . . .
	Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base.  Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю.
тип	Необязательный.  Тип данных переменной; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, определяемый пользователем тип или объектный тип.  Для каждой описываемой переменной следует использовать отдельное предложение As тип.  Для значения типа Variant, содержащего массив, тип описывает тип данных каждого элемента массива, но не заменяет тип Variant на какой-либо другой тип.
Дополнительные сведения

Инструкция ReDim  используется для задания или изменения размера динамического массива, который уже был формально описан с помощью инструкции Private, Public или Dim с пустыми скобками (без индексов размерностей).

Имеется возможность повторно использовать инструкцию ReDim для изменения числа элементов и размерностей массива.  Однако не допускается описание массива с одним типом данных и использование инструкции ReDim для последующего изменения типа данных этого массива, если массив не содержится в переменной типа Variant.  Тип элементов массива, содержащегося в переменной типа Variant, может быть изменен с помощью предложения As тип, если ранее не было использовано ключевое слово Preserve, запрещающее изменение типа данных.

При использовании ключевого слова Preserve имеется возможность изменить значение только последней размерности массива и не допускается изменение числа размерностей.  Например, если массив имеет только одну размерность, имеется возможность изменить эту размерность, так как она является последней и единственной размерностью.  Однако, если массив имеет две или более размерности, возможно изменение значения только последней размерности, сохраняя при этом содержимое массива.  В следующем примере показывается, как можно увеличить значение последней размерности динамического массива без уничтожения данных, содержащихся в этом массиве.

ReDim X(10, 10, 10)

. . .

ReDim Preserve X(10, 10, 15)

Кроме того, при использовании ключевого слова Preserve допускается изменение размера массива только за счет изменения верхней границы индекс; попытка изменить нижнюю границу приведет к ошибке.

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

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

Внимание!   Инструкция ReDim действует как инструкция описания, даже если описываемая в ней переменная не существует на уровне модуля или на уровне процедуры.  При создании в дальнейшем переменной с тем же именем, возможно, в более широкой области определения, инструкция ReDim будет ссылаться на эту последнюю переменную и не обязательно вызовет ошибку компиляции, даже при действующей инструкции Option Explicit.  Во избежание подобных конфликтов не следует использовать инструкцию ReDim как инструкцию описания. Пользуйтесь ей только для изменения размеров массивов.

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


Инструкция Rem

Используется для добавления в программу дополнительных пояснений.

Синтаксис

Rem примечание

Возможно использование следующего синтаксиса:

' примечание

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

Дополнительные сведения

При использовании номеров строк или меток строк имеется возможность выполнить с помощью инструкции GoTo или GoSub переход на строку, содержащую инструкцию Rem.  Выполнение программы продолжится с первой выполняемой инструкции, следующей за инструкцией Rem.  Если за ключевым словом Rem на строке имеются другие инструкции, инструкции должны разделяться двоеточием (:).

Как показано в примере синтаксиса, вместо ключевого слова Rem возможно использование апострофа (').  При использовании апострофа двоеточие не требуется.


Инструкция Set

Присваивает ссылку на объект переменной или свойству.

Синтаксис

Set объектнаяПеременная = {[New] объектноеВыражение | Nothing}

Синтаксис инструкции Set содержит следующие элементы:

Элемент	Описание
объектнаяПеременная	Обязательный.  Имя переменной или свойства, удовлетворяющее стандартным правилам именования переменных.
New	Необязательный.  Ключевое слово New обычно используется при описании, чтобы включить возможность неявного создания нового экземпляра объекта. Ключевое слово New в инструкции Set задает создание нового экземпляра класса.  Если объектнаяПеременная содержит ссылку на объект, эта ссылка освобождается при новом присвоении. Не допускается использование ключевого слова New для создания новых экземпляров любого внутреннего типа данных и для создания зависимых объектов.
объектноеВыражение	Обязательный.  Выражение, состоящее из имени объекта, другой описанной переменной того же объектного типа или функции или метода, которые возвращают объект того же объектного типа.
Nothing	Необязательный.  Разрывает связь объектнойПеременной с каким-либо определенным объектом.  При этом объектнаяПеременная получает значение Nothing, освобождающее все системные ресурсы и ресурсы памяти, выделенные для объекта, на который имелась ссылка, если никакие другие переменные также не содержат на него ссылок.
Дополнительные сведения

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

Инструкции Dim, Private, Public, ReDim и Static описывают только переменную, которая ссылается на объект.  Ссылка на реальный объект не возникает до присвоения определенного объекта в инструкции Set.

В следующем примере показано, как инструкция Dim используется для описания массива с типом Form1.  Реально не существует ни одного экземпляра объекта Form1.  Затем с помощью инструкции Set ссылка на новый экземпляр объекта Form1 присваивается переменной myChildForms.  Такая программа позволяет создать дочерние формы в многооконном приложении (MDI).

Dim myChildForms(1 to 4) As Form1

Set myChildForms(1) = New Form1

Set myChildForms(2) = New Form1

Set myChildForms(3) = New Form1

Set myChildForms(4) = New Form1

Обычно при использовании инструкции Set для присвоения переменной ссылки на объект, не создается копия объекта для этой переменной.  Вместо этого создается ссылка на объект.  Несколько объектных переменных могут ссылаться на один и тот же объект.  Поскольку эти переменные являются ссылками (а не его копиями) на объект, любые изменения этого объекта отражаются на всех переменных, которые ссылаются на него.  Однако если в инструкции Set используется ключевое слово New, то в самом деле создается новый экземпляр этого объекта.


Инструкция Static

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

Синтаксис

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

Синтаксис инструкции Static содержит следующие элементы:

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

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

Инструкция Static в процедуре предназначена для описания типа данных переменной, которая сохраняет свое значение в промежутках между вызовами процедуры.  Например, в следующей инструкции описывается массив целых чисел фиксированного размера:

Static EmployeeNumber(200) As Integer

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

Static X As New Worksheet

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

Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant.

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

При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями.  Переменные типа Variant получают при инициализации значение Empty.  Каждый элемент переменной с типом, определяемым пользователем, при инициализации получает значение, которые он получил бы, если бы являлся одиночной переменной.

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


Инструкция Sub

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

Синтаксис

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

End Sub

Синтаксис инструкции Sub содержит следующие элементы:

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

[Optional] [ByVal | ByRef] [ParamArray] имяПеременной[( )] [As тип] [= поУмолчанию]

Элемент	Описание
Optional	Необязательный.  Ключевое слово, указывающее, что аргумент не является обязательным.  При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional. Все аргументы, описанные как Optional, должны иметь тип Variant.  Не допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray.
ByVal	Необязательный.  Указывает, что этот аргумент передается по значению.
ByRef	Необязательный.  Указывает, что этот аргумент передается по ссылке.  Описание ByRef используется в Visual Basic по умолчанию.
ParamArray	Необязательный.  Используется только в качестве последнего элемента в списке списокАргументов для указания, что конечным аргументом является описанный как Optional массив значений типа Variant.  Ключевое слово ParamArray позволяет задавать произвольное количество аргументов.  Оно не может быть использовано со словами ByVal, ByRef или Optional.
имяПеременной	Обязательный.  Имя переменной, удовлетворяющее стандартным правилам именования переменных.
тип	Необязательный.  Тип данных аргумента, переданного в процедуру; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant.  Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип.
поУмолчанию	Необязательный.  Любая константа или  выражение, дающее константу. Используется только вместе с параметром Optional.  Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.
Дополнительные сведения

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

Внимание!   Допускаются рекурсивные процедуры Sub; т.е. они могут вызывать сами себя для выполнения определенных задач.  Однако рекурсия может приводить к переполнению стека.  Ключевое слово Static обычно не используется с рекурсивными процедурами Sub.

Все выполняемые команды должны содержаться в процедурах.  Не допускается определение процедуры Sub внутри другой процедуры Sub, Function или Property.

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

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

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

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

Внимание!   В процедуре допускается использование переменной, которая явно не описана в этой процедуре, но при этом может возникать конфликт имен, если на уровне модуля был определен элемент с тем же самым именем.  Если в процедуре содержится ссылка на неописанную переменную, имя которой совпадает с именем другой процедуры, константы или переменной, то подразумевается, что процедура ссылается на это имя на уровне модуля.  Чтобы избежать возникновения конфликтов такого рода, следует пользоваться явным описанием переменных.  Для включения обязательного явного описания переменных используется инструкция Option Explicit.

Примечание.   Для входа или выхода из процедуры Sub нельзя использовать инструкции GoSub, GoTo или Return.


Инструкция Type

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

Синтаксис

[Private | Public] Type имяПеременной
 имяЭлемента [([индексы])] As тип
[имяЭлемента [([индексы])] As тип]
. . .

End Type

Синтаксис инструкции Type содержит следующие элементы:

Элемент	Описание
Public	Необязательный.  Используется для описания определяемых пользователем типов, которые доступны для всех процедур во всех модулях всех проектов.
Private	Необязательный.  Используется для описания определяемых пользователем типов, которые доступны только в модуле, в котором выполняется описание.
имяПеременной	Обязательный.  Имя типа, определяемого пользователем, удовлетворяющее правилам именования переменных.
имяЭлемента	Обязательный.  Имя элемента определяемого пользователем типа.  Имена элементов также должны соответствовать правилам именования переменных, за исключением того, что для их задания разрешается использовать ключевые слова.
индексы	Необязательный.  Размерности элемента, являющегося массивом.  Для задания массива, размеры которого могут изменяться, указываются только скобки.  Аргумент индексы использует следующий синтаксис:
	[нижний To] верхний [,[нижний To] верхний] . . .
	Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base.  Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю.
тип	Обязательный.  Тип данных элемента; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String(для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, другой определяемый пользователем тип или объектный тип.
Дополнительные сведения

Инструкция Type допускает использование только на уровне модуля.  После определения типа данных с помощью инструкции Type имеется возможность в любом месте описать переменную этого типа в заданной области определения.  Для описания переменной определяемого пользователем типа используются инструкции Dim, Private, Public, ReDim или Static.

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

Не допускается появление номеров строк и меток строк в блоках Type...End Type.

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

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

Type StateData

CityCode (1 To 100) As Integer	' Описывает статический массив.

County As String * 30

End Type

Dim Washington(1 To 100) As StateData

В предыдущем примере StateData включает статический массив CityCode, а запись Washington имеет одинаковую со StateData структуру.

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

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


Функция UBound

Возвращает значение типа Long, содержащее максимальный доступный индекс указанной размерности массива.

Синтаксис

UBound(имяМассива[, размерность])

Синтаксис функции UBound содержит следующие элементы:

Элемент	Описание
имяМассива	Обязательный.  Имя переменной массива, удовлетворяющее стандартным правилам именования переменных.
размерность	Необязательный; Variant (Long).  Целое число, указывающее размерность, верхнюю границу которой возвращает функция.  Для первой размерности используется значение 1, для второй 2 и т.д.  Если аргумент размерность опущен, подразумевается значение 1.
Дополнительные сведения

Функция UBound вместе с функцией LBound используется для определения размеров массива.  Функция LBound применяется для выяснения нижнего предела размерности массива.

UBound возвращает значения, перечисленные в приводимой ниже таблице, для массива со следующими размерностями:

Dim A(1 To 100, 0 To 3, -3 To 4)

Инструкция	Возвращаемое значение
UBound(A, 1)	100
UBound(A, 2)	3
UBound(A, 3)	4


As

Ключевое слово As используется в следующем контексте:

Инструкция Const

Инструкция Declare

Инструкция Dim

Инструкция Function

Инструкция Name

Инструкция Open

Инструкция Private

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set

Инструкция Public

Инструкция ReDim

Инструкция Static

Инструкция Sub

Инструкция Type


Binary

Ключевое слово Binary используется в следующем контексте:

Инструкция Open

Инструкция Option Compare


ByRef

Ключевое слово ByRef используется в следующем контексте:

Инструкция Call

Инструкция Declare

Инструкция Function

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set

Инструкция Sub


ByVal

Ключевое слово ByVal используется в следующем контексте:

Инструкция Call

Инструкция Declare

Инструкция Function

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set

Инструкция Sub


Date

Ключевое слово Date используется в следующем контексте:

Тип данных Date

Функция Date

Инструкция Date


Else

Ключевое слово Else используется в следующем контексте:

Инструкция If...Then...Else

Инструкция Select Case


Error

Ключевое слово Error используется в следующем контексте:

Функция Error

Инструкция Error

Инструкция On Error


For

Ключевое слово For используется в следующем контексте:

Инструкция For...Next

Инструкция For Each...Next

Инструкция Open


Get

Ключевое слово Get используется в следующем контексте:

Инструкция Get

Инструкция Property Get


Input

Ключевое слово Input используется в следующем контексте:

Функция Input

Инструкция Input #

Инструкция Line Input #

Инструкция Open


Is

Ключевое слово Is используется в следующем контексте:

Инструкция If...Then...Else

Оператор Is

Инструкция Select Case


Len

Ключевое слово Len используется в следующем контексте:

Функция Len

Инструкция Open


Let

Ключевое слово Let используется в следующем контексте:

Инструкция Let

Инструкция Property Let


Lock

Ключевое слово Lock используется в следующем контексте:

Инструкции Lock, Unlock

Инструкция Open


Mid

Ключевое слово Mid используется в следующем контексте:

Функция Mid

Инструкция Mid


New

Ключевое слово New используется в следующем контексте:

Инструкция Dim

Инструкция Private

Инструкция Public

Инструкция Set

Инструкция Static


Next

Ключевое слово Next используется в следующем контексте:

Инструкция For...Next

Инструкция For Each...Next

Инструкция On Error

Инструкция Resume


On

Ключевое слово On используется в следующем контексте:

Инструкция On Error

Инструкция On...GoSub

Инструкция On...GoTo


Option

Ключевое слово Option используется в следующем контексте:

Инструкция Option Base

Инструкция Option Compare

Инструкция Option Explicit

Инструкция Option Private


Optional

Ключевое слово Optional используется в следующем контексте:

Инструкция Declare

Инструкция Function

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set

Инструкция Sub


ParamArray

Ключевое слово ParamArray используется в следующем контексте:

Инструкция Declare

Инструкция Function

Инструкция Sub


Print

Ключевое слово Print используется в следующем контексте:

Метод Print

Инструкция Print #


Private

Ключевое слово Private используется в следующем контексте:

Инструкция Const

Инструкция Declare

Инструкция Function

Инструкция Option Private

Инструкция Private

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set

Инструкция Sub

Инструкция Type


Property

Ключевое слово Property используется в следующем контексте:

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set


Public

Ключевое слово Public используется в следующем контексте:

Инструкция Const

Инструкция Declare

Инструкция Function

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set

Инструкция Public

Инструкция Sub

Инструкция Type


Resume

Ключевое слово  Resume используется в следующем контексте:

Инструкция On Error

Инструкция Resume


Seek

Ключевое слово Seek используется в следующем контексте:

Функция Seek

Инструкция Seek


Set

Ключевое слово Set используется в следующем контексте:

Инструкция Set

Инструкция Property Set


Static

Ключевое слово Static используется в следующем контексте:

Инструкция Function

Инструкция Property Get

Инструкция Property Let

Инструкция Property Set

Инструкция Static

Инструкция Sub


Step

Ключевое слово Step используется в следующем контексте:

Инструкция For...Next

Инструкция For Each...Next


String

Ключевое слово String используется в следующем контексте:

Тип данных String

Функция String


Then

Ключевое слово Then используется в следующем контексте:

Директива #If...Then...#Else

Инструкция If...Then...Else


Time

Ключевое слово Time используется в следующем контексте:

Функция Time

Инструкция Time


To

Ключевое слово To используется в следующем контексте:

Инструкция Dim

Инструкция For...Next

Инструкции Lock, Unlock

Инструкция Private

Инструкция Public

Инструкция ReDim

Инструкция Select Case

Инструкция Static

Инструкция Type


WithEvents

Ключевое слово WithEvents используется в следующем контексте:

Инструкция Dim

Инструкция Private

Инструкция Public


Соглашения по печати

В документации Visual Basic используются следующие соглашения по печати.

Соглашение	Описание
Sub, If, ChDir, Print, True, Debug	Ключевые слова языка выделяются полужирным шрифтом и начинаются с прописной буквы.
setup	Слова, подлежащие буквальному вводу, выделяются полужирным шрифтом.
объект, переменная, список	Прототипы сведений, которые должны быть указаны пользователем, выделяются курсивом и начинаются со строчной буквы.
pathname, filenumber	Прототипы позиционных и именованных аргументов функций выделяются одновременно полужирным шрифтом и курсивом и начинаются со строчной буквы.
[список_выражений]	При описании синтаксиса необязательные элементы заключаются в квадратные скобки.
{While | Until}	При описании синтаксиса фигурные скобки и вертикальная черта указывают, что следует выбрать один из предложенных двух или более элементов. Наличие одного из этих элементов является обязательным за исключением случая, когда все эти элементы заключены еще и в квадратные скобки. Например:
	[{Это | ИлиТо}]
ESC, ENTER	Слова, состоящие только из прописных букв, являются названиями клавиш и последовательностей нажатия клавищ.
ALT+F1, CTRL+R	Названия клавиш, объединенные знаком плюс (+), являются комбинациями клавиш.  Например, ALT+F1 означает, что следует одновременно нажать клавиши ALT и F1.
Cоглашения по оформлению программ

Используются следующие соглашения по оформлению программ:

Программные строки	Описание
MyString = "Всем привет!"	Этот шрифт используется для оформления программы, переменных и сообщений об ошибках.
' Это примечание.	Апостроф (') указывает на начало пояснения к программе.
MyVar = "Здесь приведен " _ & "пример" _ & " продолжения строки."	Пробел и символ подчеркивания ( _) продолжают строку программы.


Свойство Caption


Свойство Enabled


Свойство Height


Свойство HelpContextID


Метод Hide


Свойство Left


Метод Move


Свойство Name


Метод PrintForm


Метод Show


Метод StartUpPosition


Свойство Tag


Свойство Top


Свойство Visible


Свойство WhatsThisButton


Свойство WhatsThisHelp


Метод WhatsThisMode


Свойство Width


Неоднозначный выбор

Ситуация неоднозначного выбора возникает, если пользователь произвел неоднозначный выбор ключевого слова или запросил справку о компоненте интегрированной среды разработчика (IDE). Если была сделана попытка выбора ключевого слова, следует повторить попытку и на этот раз выбрать только одно слово. Если же была сделана попытка получить сведения об IDE, следует выбрать один из следующих пунктов.

Окно программы или модуля

Окно или область окна отладки

Окно или область окна локальных переменных

Окно просмотра объектов

Окно или область окна контрольного значения


Пример использования функции Error

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

Dim ErrorNumber

For ErrorNumber = 61 To 64	' Цикл по значениям 61 - 64.

Debug.Print Error(ErrorNumber)	' Вывод сообщений в окно отладки.

Next ErrorNumber


Пример использования инструкции Error

В данном примере инструкция Error используется для имитации ошибки с кодом 11.

On Error Resume Next	' Отложенный перехват ошибок.

Error 11	' Имитация ошибки "Деление на нуль".


Пример использования инструкции On Error

В начале этой программы инструкция On Error GoTo определяет положение подпрограммы обработки ошибок в процедуре. В данном примере попытка удалить открытый файл приводит к возникновению ошибки с кодом 55. Ошибка обрабатывается в подпрограмме, после чего управление возвращается инструкции, которая привела к возникновению ошибки. Инструкция On Error GoTo 0 отключает перехват ошибок. После этого инструкция On Error Resume Next задает отложенный перехват ошибок, что позволяет точно определить, в каком контексте возникла ошибка, генерируемая в следующей инструкции. Следует отметить, что после обработки ошибки вызывается метод Err.Clear для сброса значений свойств объекта Err.

Sub OnErrorStatementDemo()

On Error GoTo ErrorHandler	' Включаем программу обработки

' ошибок.

Open "TESTFILE" For Output As #1	' Открываем файл.

Kill "TESTFILE"	' Попытка удалить открытый

' файл.

On Error Goto 0	' Отключаем перехват ошибок.

On Error Resume Next	' Откладываем перехват ошибок.

ObjectRef = GetObject("MyWord.Basic")	' Запускаем несуществующий

' объект, а затем проверяем

' ошибку механизма управления

' программируемыми объектами.

If Err.Number = 440 Or Err.Number = 432 Then

' Выводим сообщение для пользователя и очищаем объект Err.

Msg = "Ошибка при попытке открыть программируемый объект!"

MsgBox Msg, , "Проверка отложенной ошибки"

Err.Clear	' Очищаем поля объекта Err.

End If

Exit Sub	' Выходим из процедуры, чтобы

' не попасть в обработчик.

ErrorHandler:	' Обработчик ошибок.

Select Case Err.Number	' Определяем код ошибки.

Case 55	' "Ошибка "Файл уже открыт".

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

Case Else

' Здесь размещаются инструкции для обработки других ошибок...

End Select

Resume	' Возобновляем выполнение

' со строки, вызвавшей ошибку.

End Sub


Пример использования инструкции Resume

В данном примере инструкция Resume используется для прекращения обработки ошибок в процедуре и возобновлению выполнения инструкции, которая привела к ошибке. Для иллюстрации создается ошибка с кодом 55.

Sub ResumeStatementDemo()

On Error GoTo ErrorHandler	' Включаем обработчик ошибок.

Open "TESTFILE" For Output As #1	' Открываем файл.

Kill "TESTFILE"	' Попытка удалить открытый файл.

Exit Sub	' Выходим из процедуры, чтобы

' не попасть в обработчик.

ErrorHandler:	' Подпрограмма обработки ошибок.

Select Case Err.Number	' Определяем код ошибки.

Case 55	' "Ошибка "Файл уже открыт".

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

Case Else

' Здесь размещаются инструкции для обработки других ошибок...

End Select

Resume	' Возобновляем выполнение процедуры

' со строки, вызвавшей ошибку.

End Sub


Функция Error

Возвращает сообщение об ошибке, соответствующее определенному коду ошибки.

Синтаксис

Error[(кодОшибки)]

Необязательный аргумент кодОшибки может представлять любое допустимое значение кода ошибки.  Если в аргументе кодОшибки задан допустимый, но не определенный код ошибки, метод Error возвращает строку "Ошибка, определяемая приложением или объектом".  Недопустимое значение аргумента кодОшибки приводит к возникновению ошибки.  Если кодОшибки опущен, возвращается сообщение, соответствующее последней ошибке выполнения.  Если ошибка выполнения не возникала или аргумент  кодОшибки имеет значение 0, функция Error возвращает пустую строку ("").

Дополнительные сведения

Для того чтобы определить последнюю ошибку выполнения следует проверить значения свойств объекта Err.  Значение, возвращаемое функцией Error, соответствует значению свойства Description объекта Err.


Инструкция Error

Имитирует возникновение ошибки.

Синтаксис

Error кодОшибки

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

Дополнительные сведения

Инструкция Error поддерживается для совместимости с предыдущими версиями.  В новой программе, в особенности при создании объектов, следует применять для создания ошибок выполнения метод Raise объекта Err.

Если аргумент кодОшибки определен, инструкция Error заполняет свойства объекта Err значениями по умолчанию (перечисленными в следующей таблице), после чего вызывает обработчик ошибок:

Свойство	Значение
Number	Значение, указанное в аргументе инструкции Error.  Любой допустимый код ошибки.
Source	Имя текущего проекта Visual Basic.
Описание	Строковое выражение, соответствующее значению, возвращаемому функцией Error для кода ошибки, указанного в свойстве Number, если такая строка сообщения существует.  Если возвращаемое сообщение не определено, значением свойства Description становится пустая строка ("").
HelpFile	Полное имя (включая диск им путь) соответствующего файла справочной системы Visual Basic.
HelpContext	Контекстный идентификатор раздела файла справочной системы Visual Basic, соответствующего ошибке с кодом Number.
LastDLLError	Нуль.
Если обработчик ошибок отсутствует или не активизирован, то сообщение об ошибке создается и выводится на основании значений свойств объекта Err.

Примечание.   Не все главные приложения Visual Basic позволяют создавать объекты.  О возможности создания в приложении классов и объектов см. в документации приложения.


Инструкция On Error

Активизирует подпрограмму обработки ошибок и указывает положение подпрограммы в процедуре; используется также для отключения подпрограммы обработки ошибок.

Синтаксис

On Error GoTo строка

On Error Resume Next

On Error GoTo 0

Инструкция On Error допускает любую из следующих форм синтаксиса:

Инструкция	Описание
On Error GoTo строка	Активизирует подпрограмму обработки ошибок, начало которой определяется обязательным аргументом строка, значением которого может быть любая метка строки или номер строки.  Если возвращается ошибка выполнения, управление передается на указанную строку и запускается обработчик ошибок.  Аргумент строка должен определять строку в той же процедуре, в которой находится инструкция On Error; в противном случае возникает ошибка компиляции.
On Error Resume Next	Указывает, что возникновение ошибки выполнения приводит к передаче управления на инструкцию, непосредственно следующую за инструкцией, при выполнении которой возникла ошибка.  Рекомендуется при доступе к объектам использовать эту форму инструкции, а не On Error GoTo.
On Error GoTo 0	Отключает любой активизированный обработчик ошибок в текущей процедуре.
Дополнительные сведения

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

"Включенным" обработчиком ошибок называют подпрограмму, которая указана в инструкции On Error; "активным" обработчиком ошибок является включенный обработчик ошибок, который обрабатывает текущую ошибку.  Если ошибка возникает в самом обработчике ошибок (в промежутке между возникновением ошибки и выполнением инструкции Resume, Exit Sub, Exit Function или Exit Property), то обработчик ошибок, определенный в текущей процедуре, не может обработать ошибку.  Управление в этом случае возвращается в вызывающую процедуру; если в вызывающей процедуре включен обработчик ошибок, то обработка ошибки передается ему.  Если этот обработчик ошибок является в данный момент  активным, т.е. уже обрабатывает ошибку, то управление снова передается назад в вызывающую процедуру и т.д. до тех пор, пока не будет найден включенный, но не активный обработчик ошибок.  Если включенный, но неактивный обработчик ошибок найден не будет, ошибка становится фатальной в том месте программы, в котором она впервые возникла.  При каждой передаче управления обработчиком ошибок в вызывающую процедуру эта процедура становится текущей.  После завершения обработки ошибки обработчиком в любой процедуре возобновляется выполнение текущей процедуры с той ее части, которая указана в инструкции Resume.

Примечание.   Подпрограмма обработки ошибок не может быть процедурой Sub или Function.  Эта подпрограмма должна быть частью программы, которая отмечается с помощью метки строки или номера строки.

Для определения причины ошибки в подпрограммах обработки ошибок используют значение свойства Number объекта Err.  Необходимо обеспечить в подпрограммах обработки ошибок проверку или сохранение существенных значений свойств объекта Err  перед тем, как может возникнуть новая ошибка или перед вызовом процедуры, в которой может возникнуть новая ошибка.  Значения свойств объекта Err описывают последнюю ошибку.  Текст сообщения об ошибке, соответствующего коду ошибки Err.Number содержится в свойстве Err.Description.

Конструкция On Error Resume Next  задает продолжение выполнения с инструкции, непосредственно следующей за инструкцией, которая привела к ошибке выполнения, или с инструкции, непосредственно следующей за вызывающей инструкцией в процедуре, содержащей конструкцию On Error Resume Next.  Это позволяет продолжить исполнение программы несмотря на ошибку выполнения. Это позволяет также встроить подпрограмму обработки ошибок в процедуру, а не передавать управление в другую часть процедуры.  Конструкция On Error Resume Next становится неактивной при вызове новой процедуры, поэтому для внутренней обработки ошибок необходимо выполнять инструкцию On Error Resume Next в каждой вызываемой процедуре.

Примечание.   При обработке ошибок, возникающих при доступе к другим объектам, рекомендуется использовать конструкцию On Error Resume Next, а не конструкцию On Error GoTo.  Проверка объекта Err после каждого взаимодействия с другим объектом позволяет устранить неопределенность в том, при доступе к какому объекту возникла ошибка.  Это позволяет всегда точно знать, какой объект поместил значение кода ошибки в свойство Err.Number, а также в каком объекте возникла ошибка (эта информация содержится в свойстве Err.Source).

Конструкция On Error GoTo 0 отключает обработку ошибок в текущей процедуре. Эта конструкция не задает переход на строку 0 для обработки ошибок, даже если в процедуре имеется строка с номером 0.  Если инструкция On Error GoTo 0 не выполнялась, то обработчик автоматически отключается при выходе из процедуры.

Для того чтобы предотвратить выполнение программы обработки ошибок в тех случаях, когда ошибка не возникла, следует помещать соответствующую инструкцию Exit Sub, Exit Function или Exit Property сразу после подпрограммы обработки ошибки, как в следующем примере:

Sub InitializeMatrix(Var1, Var2, Var3, Var4)

On Error GoTo ОбработкаОшибок

. . .

Exit Sub

ОбработкаОшибок:

. . .

Resume Next

End Sub

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

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

При написании программы для объекта, из которого осуществляется доступ к другим объектам, следует попытаться обработать ошибки, которые передаются из этих объектов без обработки.  Если такие ошибки обработать нельзя, следует заменить код ошибки в свойстве Err.Number на один из кодов ошибки, определенных в собственной программе, а затем передать ошибку назад в программу, из которой этот объект был вызван.  Разработчик должен определить ошибку путем сложения собственного кода ошибки с константой vbObjectError.  Например, если собственный код ошибки равен 1052, то определяют его следующим образом:

Err.Number = vbObjectError + 1052

Примечание.   Системные ошибки при вызовах библиотек динамической компоновки (DLL) не приводят к возникновению исключений и не перехватываются средствами Visual Basic.  При вызове функций из библиотек DLL необходимо проверять, успешно ли возвращается каждое значение (согласно спецификациям API), и в случае неудачи проверять значение свойства LastDLLError объекта Err.


Инструкция Resume

Продолжает выполнение программы после завершения подпрограммы обработки ошибок.

Синтаксис

Resume [0]

Resume Next

Resume строка

Инструкция Resume допускает любую из следующих форм синтаксиса:

Инструкция	Описание
Resume	Если ошибка возникла в процедуре, в которой находится обработчик ошибок, то выполнение программы продолжается с инструкции, следующей за той, которая привела к ошибке.  Если ошибка возникла в вызванной процедуре, выполнение продолжается с инструкции в процедуре, содержащей обработчик ошибок, из которой был сделан последний вызов.
Resume Next	Если ошибка возникла в процедуре, в которой находится обработчик ошибок, то выполнение программы продолжается с инструкции, следующей за той, которая привела к ошибке.  Если ошибка возникла в вызванной процедуре, выполнение продолжается с инструкции, непосредственно следующей за той инструкцией в процедуре, содержащей обработчик ошибок (или инструкцию On Error Resume Next), из которой был сделан последний вызов.
Resume строка	Выполнение программы продолжается со строки, указанной в обязательном аргументе строка.  Аргумент строка должен определять метку строки или номер строки внутри процедуры, содержащей данный обработчик ошибок.
Дополнительные сведения

Если инструкция Resume используется в любой другой программе, помимо обработчика ошибок, то возникает ошибка.


Предложению #Else должно предшествовать предложение #If

#Else - это условная директива компилятора. Причины возникновения этой ошибки и способы ее устранения:

•	Предложению #Else не предшествует соответствующее предложение #If или #ElseIf.

Проверьте, отделено ли предложение #If от #Else предложением #End If. В каждом блоке #If может быть только одно #Else, поэтому два #Else вызовут такую ошибку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Предложениям #ElseIf, #Else или #EndIf должно предшествовать соответствующее предложение #If

#Else If, #Else и #End If - это условные директивы компилятора. Причины возникновения этой ошибки и способы ее устранения:

•	Предложениям #Else If, #Else или #End If не предшествует соответствующее предложение #If.

Проверьте, не стоит ли какой-нибудь мешающий блок между предложением #If и рассматриваемым предложением (#Else If, #Else или #End If). Убедитесь, что перед предложением #If стоит знак #. Если все остальное в порядке, поместите #If на соответствующее место.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Предложению #ElseIf должно предшествовать предложение #If или #ElseIf, а за ним должно следовать предложение #ElseIf, #Else или
Предложению #ElseIf должно предшествовать предложение #If или #ElseIf, а за ним должно следовать предложение #ElseIf, #Else или #End If

#ElseIf - это условная директива компилятора. Причины возникновения этой ошибки и способы ее устранения:

•	Предложению #ElseIf не предшествует предложение #If или #ElseIf.

Поместите предложение #If перед #ElseIf или удалите не там поставленное предложение #End If.

•	Предложению #ElseIf предшествует предложение #Else или #End If.

Закончите блок #If или измените предшествующее предложение #Else на #ElseIf.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Совместимый компонент ActiveX должен быть исполняемым модулем или библиотекой  Visual Basic

Совместимый компонент ActiveX - это объект, обозначенный как совместимый компонент ActiveX. Причины возникновения этой ошибки и способы ее устранения:

•	Visual Basic пытается осуществить доступ к объекту, обозначенному как совместимый компонент ActiveX, но указанный файл не является исполняемым файлом или библиотекой динамической компоновки (DLL) Visual Basic.

Только файлы с расширением .exe и библиотеки динамической компоновки, созданные Visual Basic могут быть введены в поле "Совместимый компонент ActiveX" окна диалога Свойства проекта (меню Проект). Для создания исполняемого файла Visual Basic загрузите проект в Visual Basic и выберите команду Создать файл Project.exe в меню Файл. Если файл уже является исполняемым, но он был создан не в Visual Basic, или если файл не загружается в Visual Basic, обратитесь к документации по файлу. Выясните, может ли файл быть преобразован в исполняемый файл Visual Basic или обратитесь к поставщику продукта за исполняемым файлом, созданным в Visual Basic.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Надстройка не может адресовать проект

Проекты динамичны, а надстройки статичны. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка создания надстройки из проекта, адресующего другой проект.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Модуль недопустимого типа

Стандартный модуль не является классом и не может быть переменной. Причины возникновения этой ошибки и способы ее устранения:

•	Имя стандартного модуля используется в описании Dim или Set.

Проверьте орфографию в имени модуля и убедитесь, что он соответствует форме, форме MDI или модулю класса.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Процедура с аргументом ParamArray не вызывается с именованными аргументами

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

•	Синтаксис именованных аргументов применяется при вызове процедуры.

Синтаксис вызова именованного аргумента не может быть использован для вызова процедуры, включающей параметр ParamArray. Для передачи только некоторых элементов ParamArray следует поставить запятые вместо тех значений, которые нужно опустить. Например, в следующем вызове, если аргументы ParamArray начинаются после Arg2, будут переданы только первое, третье и шестое значения ParamArray:

MySub Arg1, Arg2, 7,, 44,,,3

Примечание. ParamArray всегда представляет последние элементы в списке аргументов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Обнаружено неоднозначное имя

Идентификатор вступает в конфликт с другим идентификатором или требуется указание объекта. Причины возникновения этой ошибки и способы ее устранения:

•	Несколько объектов в одной области определения имеют элементы с одинаковыми именами.

Укажите полное имя элемента, добавляя имя объекта и точку. Например:

объект.свойства

Идентификаторы уровня модуля и уровня проекта (имена из модуля и адресуемого проекта) могут поочередно использоваться в процедуре, хотя это усложняет разработку и отладку программы. Однако, если требуется ссылка на оба элемента в одной и той же процедуре, для элемента с более широкой областью определения необходим указатель объекта. Например, если идентификатор MyID описан на уровне модуля MyModule, а затем в этом модуле описана переменная уровня процедуры с тем же именем, ссылка на переменную уровня модуля должна иметь соответствующий указатель:

Dim MyID As String

Sub MySub

MyModule.MyID = "Это переменная уровня модуля"

Dim MyID As String

MyID = "Это переменная уровня процедуры"

Debug.Print MyID

Debug.Print MyModule.MyID

End Sub

•	Идентификатор, описанный на уровне модуля, вступает в конфликт с именем процедуры. Например, эта ошибка возникает, если на уровне модуля описана переменная MyID, а затем определяется процедура с тем же именем:

Public MyID

Sub MyID

. . .

End Sub

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка AppleScript

Возникла ошибка при выполнении макроса пользователя. Причины возникновения этой ошибки и способы ее устранения:

•	Эта ошибка может быть связана с адресуемым приложением.

Проверьте, совпадают ли идентификаторы макроса с идентификаторами приложения.

•	Эта ошибка может быть связана с AppleScript.

Убедитесь, что используемый в макросе синтаксис является допустимым с точки зрения AppleScript.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка, определяемая приложением или объектом

Это сообщение появляется при несоответствии ошибки, созданной с помощью инструкции Error или метода Raise, и ошибки, определенной Visual Basic. Также оно вызывается функцией Error для аргументов, не соответствующих ошибкам, определенным Visual Basic. Таким образом, это может быть ошибка, определенная пользователем или объектом, в том числе главными приложениями, такими как Microsoft Excel, Visual Basic и т. д. Например, формы Visual Basic создают связанные с формами ошибки, которые не могут быть созданы из программы путем указанием номера в качестве аргумента для метода Raise или инструкции Error. Причины возникновения этой ошибки и способы ее устранения:

•	Приложение выполнило инструкцию Err.Raise n или Error n, но номер n не определен Visual Basic.

Если так и нужно, следует использовать Err.Raise и обозначить дополнительные аргументы с тем, чтобы конечный пользователь смог понять природу ошибки. Например, можно добавить описание, источник и справочную информацию. Чтобы восстановить найденную ошибку, не следует выполнять перед этим Err.Clear. Если же сначала была выполнена Err.Clear, необходимо добавить дополнительные аргументы для метода Raise. Просмотрите контекст, в котором возникла ошибка, и убедитесь, что восстанавливается та же самая ошибка.

•	При попытке доступа к объектам из других приложений ошибка распространилась и на программу пользователя и не может быть отнесена к ошибкам Visual Basic.

Проверьте документацию для всех объектов, к которым осуществлялся доступ. Свойство Source объекта Err должно содержать идентификатор приложения или объекта, создавшего ошибку. Для понимания контекста ошибки, созданной объектом можно использовать конструкцию On Error Resume Next в программе, осуществляющей доступ к объектам, вместо синтаксиса On Error GoTo строка.

Примечание.   Раньше программисты часто использовали цикл для печати списка всех сообщений об перехватываемых ошибках. Теперь для этого существует следующая программа:

For index = 1 to 500

Debug.Print Error$(index)

Next index

Такая программа не только по-прежнему печатает список всех сообщений об ошибках Visual Basic, но еще и выдает на экран сообщение "Ошибка, определяемая приложением или объектом" для основных ошибок, например, ошибок в Visual Basic, связанных с формами, элементами управления и т. д. Многие из этих ошибок являются ошибками выполнения. Для поиска списка перехватываемых ошибок конкретно для данного приложения используется окно диалога справки. Выберите вкладку Поиск, введите слово перехватываемые в текстовое поле в верхней части, выберите раздел Перехватываемые ошибки в списке в нижней части окна и нажмите кнопку Вывести.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Обязательный аргумент для Property Let или Property Set

Целью процедур Property Let и Property Set является задание нового значения для свойства. Причины возникновения этой ошибки и способы ее устранения:

•	При задании значения свойства это значение находится не в правой части выражения.

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

•	При определении процедуры параметр для переданного значения отсутствует или расположен неверно.

Укажите параметр в списке значений аргументов при определении процедуры. Если процедура требует нескольких аргументов, параметр со значением свойства должен быть последним в списке.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Размерность массива уже определена

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

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

Устраните оператор изменения размерности или используйте динамический массив. Для определения динамического массива воспользуйтесь инструкциями Dim, Public, Private или Static с пустыми скобками. Например:

Dim MyArray()

В процедуре можно определить динамический массив с помощью инструкции ReDim или Static и переменной, задающей число элементов:

ReDim MyArray(n)

•	Инструкция Option Base появляется после определения размерности массива.

Убедитесь, что любая инструкция Option Base находится перед всеми инструкциями описаний массивов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Аргумент-массив должен передаваться по значению (ByRef)

Массивы, описанные с помощью слов Dim, ReDim или Static, не могут передаваться по значению (с помощью ByVal). Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка передать полный массив по значению (ByVal).

Отдельный элемент массива может быть передан с помощью ключевого слова ByVal (по значению), но полный массив должен передаваться с помощью ByRef (по ссылке). Следует отметить, что ByRef используется по умолчанию. Если имеется массив и его необходимо передавать с помощью ByVal, например, чтобы предотвратить передачу изменений элементов массива вызывающей программе, то можно передать аргумент массива, заключенный в собственную пару скобок, или поместить массив в значение типа Variant, а затем передать это значение в параметр ByVal следующим образом:

Dim MyVar As Variant

MyVar = OldArray()

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Достигнуто начало диапазона поиска; продолжить поиск с конца?

Неудачный поиск образца. Причины возникновения этого состояния и способы его устранения:

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

Имеется возможность продолжить поиск с конца области или отменить операцию и изменить область поиска.


Блок If без End If

Возникла ошибка из-за наличия неполной инструкции. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция If используется без соответствующей инструкции End If.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Точка останова не допускается на данной строке

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

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

•	Строка, содержащая только комментарии.

•	Строка, содержащая только метки.

•	Строка, содержащая только описания (Const, Dim, Static, Type и т. д.).

•	Любая строка скрытого модуля.

•	Любая строка окна отладки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Несоответствие типа аргумента ByRef

Аргумент, переданный по ссылке, (по умолчанию ByRef) должен иметь тип данных, точно совпадающий с типом, ожидаемым в процедуре. Причины возникновения этой ошибки и способы ее устранения:

•	Тип переданного аргумента не может быть преобразован к ожидаемому типу.

Например, если предпринимается попытка передать переменную типа Integer, когда ожидается тип Long, возникает данная ошибка.  Когда требуется выполнение преобразования, даже в том случае, если это может привести к потере информации, имеется возможность передать этот аргумент, заключенный в скобки.  Например, чтобы передать аргумент MyVar типа Variant в процедуру, ожидающую целый аргумент, запишите следующий вызов:

Dim MyVar

MyVar = 3.1415

Call SomeSub((MyVar))

Sub SomeSub (MyNum As Integer)

MyNum = MyNum + MyNum

End Sub

Помещение аргумента в скобки приводит к его определению как выражения. При выполнении этой оценки дробная часть числа округляется (не усекается), приводя его к виду аргумента ожидаемого типа. Результат оценки помещается во временную область памяти, ссылка на которую принимается в процедуре.  Таким образом, исходная переменная MyVar сохраняет свое значение.

Примечание.   Если не указать тип переменной, она по умолчанию получает тип Variant. Это не всегда очевидно. Например в следующей программе описываются две переменные: первая, MyVar, имеет тип Variant; вторая, AnotherVar, имеет тип Integer.

Dim MyVar, AnotherVar As Integer

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Это соглашение о вызовах не поддерживается в Visual Basic

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

•	Процедура была вызвана с помощью соглашения о вызове, которое не поддерживается в Visual Basic. Например, Visual Basic не поддерживает соглашение о вызовах языка Pascal в 16-битной версии среды Microsoft Windows.

Если соглашение о вызовах не поддерживается Visual Basic, то процедура не может быть вызвана из Visual Basic. Чтобы выяснить существует ли альтернатива, проверьте документацию объектов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно добавление ссылки на указанный файл

Не все библиотеки объектов или библиотеки типов доступны для Visual Basic. Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка использования окна диалога для добавления ссылки на библиотеку типов или объектов, которая не может быть использована Visual Basic.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно присвоение или преобразование массива строк фиксированной длины или определяемого пользователем типа к типу Variant

Значение типа Variant допускает присвоение данных, имеющих допустимый тип VarType. Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка присвоить массив строк фиксированной длины. При присвоении одной строки фиксированной длины переменной типа Variant она преобразуется в строку переменной длины, но это невозможно проделать для массива строк фиксированной длины.

Чтобы передать массив, воспользуйтесь циклом для присвоения отдельных элементов массива элементам временного массива строк переменной длины. Затем можно присвоить массив значению типа Variant и использовать Erase для освобождения памяти, занятой временный массивом. Однако с помощью Erase невозможно освобождение массивов фиксированных размеров.

•	Попытка передать строку фиксированной длины или определяемого пользователем типа в функцию VarType или TypeName.

Аргументом функции VarType или TypeName должен быть допустимый тип Variant.

•	Попытка присвоить определяемый пользователем тип переменной типа Variant.

Хотя невозможно прямое присвоение всей переменной определяемого пользователем типа значению типа Variant, имеется возможность использовать функцию Array для присвоения этому значению отдельных элементов данной переменной.  Это приведет к созданию значения типа Variant, содержащего массив элементов типа Variant.  Тип VarType для каждого элемента этого массива будет соответствовать исходному типу каждого элемента определяемого пользователем типа.

•	Попытка передать массив строк фиксированной длины или определяемых пользователем типов в качестве аргумента при вызове процедуры, требующей аргумент типа Variant. Следует отметить, что, если в процедуре используется позднее связывание, то есть, когда вызов организуется во время выполнения, все аргументы должны передаваться как типы Variant. Например следующая программа приводит к возникновению данной ошибки:

Dim MyForm As Object	' Так как MyForm - объект, применяется позднее связывание.

Set MyForm = New Form1

Dim StringArray(10) As String * 12

' На следующей строки возникает ошибка.

MyForm.MyProc StringArray

Для массивов строк следует использовать цикл для присвоения каждого отдельного компонента массива временному массиву строк переменной длины. Затем можно присвоить этот массив значению типа Variant для передачи процедуре.  Для массива определяемых пользователем типов возможно использование функции Array для присвоения отдельных элементов переменной определяемого пользователем типа значению типа Variant.  Это приводит к значению типа Variant, содержащему массив значений типа Variant.  VarType каждого элемента этого массива соответствует исходному типу каждого элемента определяемого пользователем типа.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно присвоение значений массиву

Каждый элемент массива должен иметь индивидуально присвоенное значение. Причины возникновения этой ошибки и способы ее устранения:

•	Случайно предпринята попытка присвоить отдельное значение переменной массива без указания элемента для присвоения значения.

Для присвоения элемента массива необходимо указать элемент в индексе. Например, если MyArray - массив целых чисел, выражение MyArray = 5 недопустимо, но допускается следующее выражение:

MyArray(UBound(MyArray)) = 5

•	Попытка присвоить полный массив другому массиву. Например, если Arr1 является массивом, а Arr2 является другим массивом, то недопустимы следующие присвоения:

Arr1 = Arr2	' Недопустимая инструкция.

Arr1() = Arr2()	' Недопустимое присвоение.

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

For count = LBound(Arr2) to UBound(Arr2)

Arr1(count) = Arr2(count)

Next count

Возможно размещение всего массива в значении типа Variant:

Dim MyArr As Variant

MyVar = Arr2()

Затем возможно обращение к элементам массива в значении типа Variant с тем же способом задания индексов, как и в обычном массиве, например:

MyVar(3) = MyVar(1) + MyVar(5)

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно изменение типов данных элементов массива

ReDim используется только для изменения числа элементов массива. Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка переопределить тип данных массива с помощью ReDim.

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

Также можно поместить массив в переменную типа Variant. Это можно выполнить простым присвоением:

Dim MyVar As Variant

MyVar = MyIntegerArray()

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно описать общий (Public) определяемый пользователем тип в модуле объекта

Определяемый пользователем тип, который появляется в модуле объекта не может быть Общим (Public). Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка определить Общий (Public) определяемый пользователем тип в модуле объекта.

Переместите определение типа, определяемого пользователем, в стандартный модуль, а затем укажите переменные этого типа в модуле объекта или других модулях. Чтобы данный тип был доступен в том модуле, где он появляется, следует поместить его определение Type...End Type  в модуль объекта и перед ним поставить ключевое слово Private.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно отображение скрытой процедуры

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

•	Предпринята попытка просмотреть процедуру скрытого модуля.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно изменение модуля

Защищенные модули доступны для просмотра, но не для редактирования. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка изменения защищенного модуля.

Снимите защиту модуля и повторите операцию.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


В данное время невозможен переход в режим прерывания

Режим прерывания - это такое состояние, когда программа все еще выполняется, но ее исполнение приостанавливается. Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка перехода в режим прерывания, например, путем нажатия клавиш CTRL+BREAK, кнопки Прервать на стандартной или отладочной панели инструментов или с помощью точки останова в выполняемой программе.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно выполнение инструкций отладки во время разработки

Время разработки - это время, когда программа не выполняется или приостановлена. Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка выполнения инструкции в окне отладки, но программа в данный момент не выполняется.

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

Для получения дополнительных сведений установите курсор в окно отладки и нажмите клавишу F1.


Невозможно найти проект или библиотеку

Невозможен запуск программы, пока не будут разрешены все недоступные ссылки. Причины возникновения этой ошибки и способы ее устранения:

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

В окне диалога Ссылки неразрешенные ссылки отмечаются префиксом "ОТСУТСТВУЕТ:".  Выберите недоступную ссылку для отображения пути и языка для недоступного проекта или библиотеки. Для разрешения ссылки или ссылок выполните следующее:

Для разрешения ссылок

1	Выведите на экран окно диалога Ссылки.

2	Выберите отсутствующие ссылки.

3	Откройте окно Просмотр объектов

4	Используйте окно диалога Обзор для поиска недоступных ссылок.

5	Нажмите кнопку OK.

6	Повторите эти шаги для восстановления всех недоступных ссылок.

После обнаружения недоступного элемента префикс "ОТСУТСТВУЕТ:" удаляется, чтобы показать, что ссылка восстановлена.  Если имя файла адресуемого проекта было изменено, добавляется новая ссылка, а старая ссылка должна быть удалена.

Для удаления ненужных более ссылок снимите флажок для этой ссылки. Невозможно удаление ссылок на библиотеку объектов Visual Basic и главного приложения.

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

Библиотеки объектов могут представлять собой отдельные файлы с расширением .OLB, или они могут быть объединены в библиотеку динамической компоновки (DLL). Они существуют в разных версиях для каждой платформы. Таким образом при переносе проектов с платформы на платформу, например, с Macintosh на Microsoft Windows, правильная языковая версия ссылочной библиотеки для данной платформы должна быть доступна в нужном месте, указанном в документации главного приложения.

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

•	Windows (версии 3.1 и ниже): Код приложения + Код языка + [Версия].OLB. Например:

vafr2.olb - библиотека объектов для французского варианта Visual Basic для приложений, версии 2.

xlfr50.olb - библиотека объектов для французского варианта Microsoft Excel 5.0.

•	Macintosh: Имя приложения Код языка [Версия] OLB. Например:

VA FR 2 OLB - библиотека объектов для французского варианта Visual Basic для приложений, версии 2.

MS Excel FR 50 OLB - библиотека объектов для французского варианта Microsoft Excel 5.0.

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

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

•	Если доступ к службе электронной технической поддержки Microsoft отсутствует, можно получить библиотеку объектов Microsoft с помощью запроса на карточке приложений Microsoft. Сведения об обращении в локальную службу поддержки продуктов Microsoft также находятся в разделе о технической поддержке файла справочной системы.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно выполнить Get или Put для переменной ссылки на объект или переменной определяемого пользователем типа, содержащей
Невозможно выполнить Get или Put для переменной ссылки на объект или переменной определяемого пользователем типа, содержащей ссылку на объект

Ссылка на объект является временной и легко может быть нарушена между закрытием и открытием файла Причины возникновения этой ошибки и способы ее устранения:

•	Переменная в инструкции Get или Put содержит или должна содержать ссылки на объект.

Если эта переменная является ссылкой на объект, ее невозможно использовать с инструкциями Get и Put. Чтобы поместить значения всех или некоторых свойств объекта в файл, каждое свойство должно быть указано по отдельности.

•	Переменная определяемого пользователем типа в инструкции Get или Put содержит элемент, который является ссылкой на объект.

Если инструкция Type этой переменной содержит элемент, представляющий объект (например он определяется в модуле класса, имеет тип данных Object, является формой или элементом управления и т. п.), удалите его из определения, или определите новый тип для использования с инструкциями Get и Put, который не имеет в своем определении элемент типа Object.

Если в определяемом пользователем типе имеются элементы типа Variant, убедитесь, что этим элементам не присваиваются ссылки на объекты. Тип Variant может допускать такие присвоения, но будет возникать ошибка при использовании этого определяемого пользователем тип в Get или Put.

Для записи на диск свойства объекта, используемого по умолчанию, применяются Input #, Line Input #, Print # или Write #.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможна загрузка модуля; недопустимый формат

Модуль должен быть в текстовом формате. Причины возникновения этой ошибки и способы ее устранения:

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

Некоторые версии Visual Basic позволяют сохранять программу как в двоичном, так и в текстовом форматах. Если это возможно, вновь загрузите этот файл в приложение, в котором он последний раз сохранялся, и сохраните его в текстовом формате.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


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

Некоторым свойствам нельзя присвоить значения. Причины возникновения этой ошибки и способы ее устранения:

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

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно выполнение требуемой операции, поскольку модуль является скрытым

Эта ошибка имеет отношение к надстройке модели объекта Visual Basic. Причины возникновения этой ошибки и способы ее устранения:

•	Модуль является скрытым. Такой модуль нельзя редактировать.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно размещение условной точки останова на массиве

Массив не имеет единого значения, соответствующего ему. Причины возникновения этой ошибки и способы ее устранения:

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

Установите условную точку останова на конкретный элемент массива.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможна запись в выполняемый модуль

Для начала записи необходимо остановить выполнение. Причины возникновения этой ошибки и способы ее устранения:

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

Остановите выполнение или нажмите клавиши CTRL+BREAK, а затем включите запись.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не удается удалить стандартную ссылку

Стандартная ссылка существует всегда. Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка удаления ссылки, которая должна быть всегда доступна, например, ссылки на библиотеку типов или библиотеку объектов..

Не пытайтесь удалить такую ссылку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Case Else вне Select Case

Инструкция Case Else может располагаться только между соответствующими инструкциями Select Case и End Select. Причины возникновения этой ошибки и способы ее устранения:

•	Обнаружена инструкция Case Else вне блока Select Case...End Select.

Переместите Case Else в блок Select Case...End Select.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Case без Select Case

Инструкция Case должна располагаться в блоке Select Case...End Select. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Case не соответствует предшествующей инструкции Select Case.

Проверьте другие управляющие структуры внутри структуры Select Case...Case и убедитесь, что они записаны правильно. Например инструкция If без соответствующей инструкции End If внутри структуры Select Case...End Select вызывает эту ошибку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Циклические зависимости между модулями

Не допускается циклическая зависимость между модулями, константами и определяемыми пользователем типами. Причины возникновения этой ошибки и способы ее устранения:

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

Удалите зависимые ссылки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Класс должен реализовать все процедуры в интерфейсе

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

•	Указан интерфейс в инструкции Implements, но не добавлена программа для всех процедур в интерфейсе.

Необходимо написать программу для каждой процедуры, указанной в интерфейсе. Недопускается наличие пустых процедур. Этой ошибки можно избежать путем вставки в процедуру комментария; процедура должна выполнять требуемые действия.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Выполнение программы прервано

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

•	Нажаты клавиши CTRL+BREAK (Microsoft Windows), ESC (Microsoft Excel) или COMMAND+PERIOD (Macintosh).

В окне диалога ошибки либо нажмите кнопку Отладка для перехода в режим прерывания, либо нажмите кнопку Продолжить для возобновления выполнения или кнопку Завершить для остановки исполнения программы.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка компиляции скрытого модуля: <имя модуля>

Невозможно отображение защищенного модуля. Причины возникновения этой ошибки и способы ее устранения:

•	Обнаружена ошибка компиляции в программе указанного модуля, но его невозможно вывести на экран, так как проект защищен.

Снимите защиту проекта, а затем вновь запустите программу для отслеживания ошибки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Требуется выражение-константа

Необходима инициализация константы. Причины возникновения этой ошибки и способы ее устранения:

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

Инициализируйте текстовые константы (литералы), ранее описанные константы или литералы и константы, объединенные операторами (кроме логического оператора Is).

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

Для описания динамического массива внутри процедуры опишите массив с помощью инструкции ReDim и укажите число элементов с помощью переменной.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Константы, строки фиксированной длины, массивы и инструкции Declare не допускается использовать как общие (Public) компоненты
Константы, строки фиксированной длины, массивы и инструкции Declare не допускается использовать как общие (Public) компоненты модуля объекта

Не все переменные в модуле объекта могут использоваться как Общие (Public). Однако процедуры являются общими по умолчанию, и процедуры Property используются для их моделирования синтаксически. Причины возникновения этой ошибки и способы ее устранения:

•	Использование общей константы в модуле объекта.

Общую константу нельзя использовать в модуле объекта, но можно создать процедуру Property Get с тем же именем. Если при этом не создавать с этим же именем процедуры Property Let или Property Set, то, в сущности, будет создано свойство, доступное только для чтения, которое можно использовать в качестве константы.

•	Использование общей строки фиксированной длины в модуле объекта.

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

•	Использование общего массива в модуле объекта.

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

•	Использование инструкции Declare в модуле объекта.

Инструкции Declare являются общими. Поставьте перед инструкцией Declare ключевое слово. Private.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Текущий модуль не поддерживает метод Print

Не все методы и свойства поддерживаются во всех модулях. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка использовать метод Print с объектом, который ничего не может выводить на экран. Например невозможно применение метода Print без указателей в стандартном модуле.

Удалите ссылку на метод Print или укажите его с соответствующим объектом. Например, укажите его с объектом Debug для отображения его аргументов в окне отладки во время таковой.

•	Попытка применить метод Line, Circle, PSet или Scale к объекту, который не допускает их использования. Например, эти методы не могут использоваться без указателей в стандартном модуле или в модуле класса программирования объектов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не допускаются циклические ссылки на проекты

Циклические ссылки на проекты не допускаются. Например, если MyProj ссылается на YourProj, то YourProj (или проект, на который ссылается YourProj) не может ссылаться на MyProj. Причины возникновения этой ошибки и способы ее устранения:

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

Удалите циклическую ссылку или ссылки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Определения процедур для одного и того же свойства несовместимы, содержат необязательные параметры или ParamArray

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

•	Неправильное количество параметров для процедуры Property Get. Оно должно быть на один меньше количества параметров для процедуры Property Let или Property Set.

Соответственно добавьте параметр в Property Let или Property Set или удалите из Property Get.

•	Типы параметров Property Get должны совпадать с типами параметров Property Let или Property Set, за исключением дополнительного параметра Property Set.

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

•	Тип дополнительного параметра Property Let должен совпадать с возвращаемым типом соответствующей Property Get.

Соответственно измените либо описание дополнительного параметра в Property Let, либо возвращаемый тип соответствующей Property Get.

•	Тип дополнительного параметра Property Set может отличаться от возвращаемого типа соответствующей Property Get, но он должен быть либо Variant, Object, имя класса, либо типом доступной библиотеки объектов.

Убедитесь, что дополнительный параметр процедуры Property Set имеет либо тип Variant, Object, имя класса, либо тип библиотеки объектов.

•	Процедура Property определена с параметрами Optional или ParamArray.

Эти параметры недопустимы в процедурах Property. Заново определите процедуры без использования этих ключевых слов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкции Defтип должны располагаться перед описаниями

Инструкции Deftype включают DefInt, DefDbl, DefCur и т. п. Причины возникновения этой ошибки и способы ее устранения:

•	Описание переменной предшествует инструкции Defтип на уровне модуля.

Поместите инструкцию Defтип перед всеми описаниями переменных.

•	Инструкция Defтип появляется в процедуре.

Перенесите инструкцию Defтип на уровень модуля до описаний всех переменных.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Конечная метка расположена слишком далеко; слишком большой блок loop, Select Case или If

Процедура от начала и до конца может иметь размер до 64Кбайт, но поскольку возможно ветвление вперед и назад в пределах процедуры, то такое ветвление ограничивается 32767 байтами в каждом направлении. Причины возникновения этой ошибки и способы ее устранения:

•	Имеется инструкция ветвления (GoTo, GoSub), конечная метка которой удалена более чем на 32767 байт от этой инструкции.

Перенесите метку ближе к инструкции или уменьшите размеры процедуры.

•	Имеется слишком большая циклическая структура, занимающая от начала до конца более 32 Кбайт памяти.

Уменьшите размер цикла.

•	Имеется очень большой блок If, содержащий предложение Then или Else, которое занимает от начала до конца более 32 Кбайт памяти.

Сократите размер структуры.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Do без Loop

Каждая инструкция Do должна заканчиваться парной инструкцией Loop. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Do использована без завершающей инструкции Loop.

Убедитесь, что другие управляющие структуры внутри структуры Do...Loop заданы правильно. Например, такую ошибку может вызывать блок If без соответствующего End If внутри Do...Loop.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Повторяющееся описание в данной области определения

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

•	Новая переменная или процедура имеет такое же имя, как и существующая переменная или процедура. Например:

Sub MySub()

Dim A As Integer

Dim A As Variant

. . .	' Другие описания или текст процедуры.

End Sub

Проверьте текущую процедуру, модуль или проект и удалите все повторяющиеся описания.

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

Удалите или переименуйте эту константу.

•	Массив фиксированного размера описывается более одного раза.

Удалите или переименуйте один из этих массивов.

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

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Повторяющееся описание

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

•	Было задано два различных значения для одно и той же условной константы компилятора, например:

#Const Mac = 0

#Const Mac = 1

Удалите одно из этих описаний.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Повторяющаяся инструкция Defтип

Инструкции Defтип в одной области определения должны указывать уникальные диапазоны букв. Причины возникновения этой ошибки и способы ее устранения:

•	Часть или весь диапазон букв данной инструкции Defтип уже включен в другую инструкцию Defтип.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Повторяющаяся инструкция Option

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

•	В данном модуле было определено несколько инструкций Option Base, Option Compare, Option Explicit или Option Private.

Удалите любые повторения в этом модуле.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Отмена изменений будет невозможна--подтвердите выполнение

Будет невозможно выполнить команду Отмена для восстановления текущего состояния после выполнения этих изменений. Причины возникновения этой ошибки и способы ее устранения:

•	Это обычно происходит, если изменения слишком велики для сохранения.

Попробуйте провести это изменение по частям.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Else без If

Инструкции Else должна предшествовать инструкция If. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Else использована без соответствующей инструкции If.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не допускается перечисляемый тип (Enum) без компонентов

Перечисляемый тип (Enum) указывает имя и компоненты перечисления. Причины возникновения этой ошибки и способы ее устранения:

•	Перечислению в блоке Enum…End Enum было присвоено имя, но не были указаны компоненты.

Добавьте хотя бы один компонент в блок Enum…End Enum.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Пустое контрольное выражение

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

•	Не задано контрольное выражение в окне диалога Добавление контрольного значения.

Задайте выражение и нажмите клавишу ESC.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


End If без блока If

Инструкция End If должна иметь соответствующую инструкцию If. Причины возникновения этой ошибки и способы ее устранения:

•	Предложение If пропущено или отделено от End If.

Проверьте другие управляющие структуры внутри структуры If...End If и убедитесь, что они записаны без ошибок. Проверьте также, правильно ли отформатирован блок If.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Достигнут конец диапазона поиска; продолжить поиск с начала?

Поиск проведен неудачно. Причины возникновения этой ошибки и способы ее устранения:

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

Допускается продолжение поиска от начала заданной области или отмена и изменение области поиска.


End Select без Select Case

Инструкции End Select должна предшествовать соответствующая инструкция Select Case. Причины возникновения этой ошибки и способы ее устранения:

•	Использование инструкции End Select без соответствующей инструкции Select Case.

Это обычно возникает из-за дополнительной инструкции End Select после блока Select Case или из-за того, что инструкция End Select остаются при копировании блока Select Case из одной процедуры в другую. Убедитесь, что каждая инструкция End Select оканчивает структуру Select Case.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


End With без With

Инструкции End With должна предшествовать соответствующая инструкция With. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция End With используется без соответствующей инструкции With.

Проверьте другие управляющие структуры внутри структуры With...End With и убедитесь, что они записаны правильно.  Например эта ошибка возникает, если инструкции If не соответствуют инструкция End If внутри структуры With...End With.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка доступа к системному реестру

Некоторые операции требуют доступа к системной регистрационной базе данных. Причины возникновения этой ошибки и способы ее устранения:

•	Регистрационная база данных системы была повреждена.

Вновь запустите программу установки главного приложения.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый обработчик событий

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

•	Неправильное число параметров процедуры обработки события.

Удалите лишние параметры или добавьте недостающие.

•	Один или несколько параметров процедуры обработки события имеют неверный тип данных.

Измените типы параметров так, чтобы они соответствовали описанию события.

•	Процедура обработки события скорее является процедурой Function, чем Sub.

Сделайте процедуру обработки события процедурой Sub. Обработчик событий не может вернуть значение.

•	Имя события используется в другой библиотеке типов, как имя собственного типа.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Описание процедуры обработки событий не соответствует описанию события с тем же именем

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

•	Процедура имеет то же имя, что и событие, но у них разная сигнатура (то есть число и типы параметров). Это происходит, например, из-за добавления нового параметра к процедуре события. Такая ошибка появится и при изменении определения процедуры события формы Form_Load следующим образом:

Sub Form_Load (MyParam As Integer)

. . .

End Sub

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Exit Do не в блоке Do...Loop

Инструкция Exit Do допустима только в блоке Do...Loop. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Exit Do используется вне цикла Do...Loop.

Убедитесь в наличии допустимой инструкции Do перед инструкцией Exit Do.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Exit For не в блоке For...Next

Инструкция Exit For допустима только в блоке For...Next. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Exit For используется вне цикла For...Next.

Убедитесь в наличии допустимой инструкции For перед Exit For.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция Exit Function не допускается в процедуре Sub или Property

Инструкция Exit должна соответствовать процедуре, в которой она используется. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Exit Function используется в процедуре Sub или Property.

Для этих типов процедур воспользуйтесь инструкциями Exit Sub или Exit Property.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция Exit Property не допускается в процедуре Function или Sub

Инструкция Exit должна соответствовать процедуре, в которой она используется. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Exit Property используется в процедуре Sub или Function.

Для этих типов процедур воспользуйтесь соответствующей инструкцией Exit.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция Exit Sub не допускается в процедуре Function или Property

Инструкция Exit должна соответствовать процедуре, в которой она используется. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Exit Sub используется в процедуре Function или Property.

Для этих типов процедур воспользуйтесь соответствующей инструкцией Exit.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидался массив

Имя переменной с индексом указывает на то, что она представляет собой массив. Причины возникновения этой ошибки и способы ее устранения:

•	Используемый синтаксис соответствует массиву, но массив с таким именем отсутствует в данной области определения.

Убедитесь, что имя переменной задано правильно. Если модуль не содержит инструкцию Option Explicit, переменная создается при ее первом использовании. Если имя переменной массива задается с ошибкой, эта переменная создается, но не как массив.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалось End Function

Инструкция End процедура должна соответствовать процедуре, в которой она используется. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция End Property или End Sub используется для завершения процедуры Function.

Для данного типа процедур воспользуйтесь инструкцией End Function.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалось End Property

Инструкция End процедура должна соответствовать процедуре, в которой она используется. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция End Function или End Sub используется для завершения процедуры Property.

Для данного типа процедур воспользуйтесь инструкцией End Property.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалось End Sub

Инструкция End процедура должна соответствовать процедуре, в которой она используется. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция End Function или End Property используется для завершения процедуры Sub.

Для данного типа процедур воспользуйтесь инструкцией End Sub.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалось End With

Блок With должен иметь завершение. Причины возникновения этой ошибки и способы ее устранения:

•	Блок With не был правильно завершен.

Поместите инструкцию End With в конец этого блока.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась процедура Function или переменная

Синтаксис инструкции предполагает наличие переменной или вызова функции. Причины возникновения этой ошибки и способы ее устранения:

•	Неизвестно данное имя переменной или процедуры Function.

Проверьте, правильно ли задано имя. Убедитесь, что любая переменная или функция с таким именем доступна в той части программы, из которой на нее выполняется ссылка. Например, если функция определена как личная (Private) или переменная не определена как общая (Public), то она доступна только в собственном модуле.

•	Попытка недопустимым образом присвоить значение имени процедуры. Например, если MySub является процедурой Sub, следующая программа вызовет ошибку:

MySub = 237	' Вызывает ошибку "Ожидалась Function или переменная"

Хотя и возможно использование синтаксиса присвоения с процедурой Property Let или с процедурой Function, которая возвращает объект или значение типа Variant, содержащее объект, использование этого синтаксиса не допускается с процедурами Sub, Property Get или Property Set.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась процедура, а не модуль

В текущей области определения отсутствует процедура с данным именем, но существует модуль с таким именем. Допускается вызов процедур, но не модулей. Причины возникновения этой ошибки и способы ее устранения:

•	Имя модуля используется при вызове процедуры.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась процедура, а не проект или библиотека

В текущей области определения отсутствует процедура с данным именем, но существует проект с таким именем. Допускается вызов процедур, но не проектов. Причины возникновения этой ошибки и способы ее устранения:

•	Имя проекта используется при вызове процедуры.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась процедура, а не тип, определяемый пользователем

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

•	Имя определяемого пользователем типа используется при вызове процедуры.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась процедура, а не переменная

В текущей области определения отсутствует процедура с данным именем, но существует переменная с таким именем. Допускается вызов процедур, а не переменных. Причины возникновения этой ошибки и способы ее устранения:

•	Имя переменной используется при вызове процедуры.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась процедура Sub, Function или Property

Синтаксис инструкции предполагает наличие вызова процедуры Sub, Function или Property Причины возникновения этой ошибки и способы ее устранения:

•	Указанное имя не является именем процедуры Sub, Function или Property в области определения данной части программы.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидался определяемый пользователем тип, а не проект

В текущей области определения отсутствует определяемый пользователем тип с данным именем, но существует проект с таким именем. Допускается определение переменной как имеющей определяемый пользователем тип, а не тип проектa. Причины возникновения этой ошибки и способы ее устранения:

•	Имя проекта используется как тип, определяемый пользователем.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась переменная или процедура, а не перечисляемый тип (Enum)

Имя перечисляемого типа (Enum) появляется только в инструкции, описывающей перечисление типа, или как составное имя. Причины возникновения этой ошибки и способы ее устранения:

•	Имя перечисляемого типа (Enum) используется вместо имени переменной перечисления.

Опишите переменную перечисляемого типа (Enum) или найдите предыдущее описание в текущей области определения и используйте эту переменную.

•	Имя перечисляемого типа (Enum) используется вместо имени переменной или процедуры.

Проверьте правильность написания идентификатора, вызвавшего ошибку. Используйте имя переменной или процедуры там, где был указан перечисляемый тип (Enum).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась переменная или процедура, а не модуль

В текущей области определения отсутствует переменная или процедура с данным именем, но существует модуль с таким именем. Причины возникновения этой ошибки и способы ее устранения:

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

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалась переменная или процедура, а не проект

В текущей области определения отсутствует переменная или процедура с данным именем, но существует проект с таким именем. Причины возникновения этой ошибки и способы ее устранения:

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

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ожидалось: <разное>

Предполагаемая часть синтаксиса не найдена. Ошибка обычно находится в левой части выделенного элемента, но она не всегда очевидна.  Например возможен вызов процедуры Sub с помощью или без помощи ключевого слова Call. Однако, если используется ключевое слово Call, то необходимо заключать список аргументов в скобки. Причины возникновения этой ошибки и способы ее устранения:

•	Ожидалось: конец инструкции. Неправильное использование скобок при вызове процедуры:

X = Workbook.Add F:= 5	' Ошибка из-за отсутствия скобок.

Call MySub 5	' Ошибка из-за отсутствия скобок.

Воспользуйтесь скобками при вызове функции для указания аргументаs или при вызове процедуры Sub с использованием ключевого слова Call.

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

Workbook.Add (X:=5, Y:=7)	' Вызов функции без выражения.

YourSub(5, 7)	' Вызов процедуры Sub без ключевого слова Call.

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

•	Ожидалось: выражение. Например, при вставке программы из окна диалога просмотра объектов, возможно не было указано значение именованного аргумента.

Workbook.Add (X:= )	' Ошибка из-за неприсвоенного

' значения для именованного

' аргумента.

Добавьте значение для этого аргумента или удалите его, если он не является обязательным.

•	Ожидалось: переменная. Например, для имен переменных использовались ключевые слова. В данном примере в инструкции Input # предполагается, что вторым аргументом является переменная. Поскольку Type является ключевым словом, его нельзя использовать в качестве имени переменной.

Input # 1, Type	' Недопустимое использование

' ключевого слова Type

' в качестве имени переменной.

Переименуйте эту переменную, чтобы устранить конфликт с ключевым словом.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Внешнее имя не определено

Возможно указание внешних имен с помощью квадратных скобок ([ ]). Причины возникновения этой ошибки и способы ее устранения:

•	Идентификатор, заданный в квадратных скобках, не имеет смысла в главном приложении.

Проверьте правильность написания данного имени, чтобы убедиться, что оно соответствует имени, ожидаемому в главном приложении.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Формат файла больше не поддерживается

Не всегда все форматы файлов доступны для чтения. Причины возникновения этой ошибки и способы ее устранения:

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

Загрузите файл в версии Visual Basic, под которой он был создан, и сохраните его в текстовом формате, а затем попробуйте вновь загрузить его.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Фиксированные или статические данные не могут превышать 64Kбайта

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

•	Попытка выделить более 64Kбайт памяти для данных уровня модуля.

Сократите объем описываемых данных. Следует отметить, что, хотя предельный размер для данных уровня модуля составляет 64Kбайта, строки переменной длины и массивы на уровне модуля могут превышать этот предел.

•	Попытка выделить в модуле более 64Kбайт на статические данные уровня процедуры..

Сократите объем этого типа описываемых данных. Статические данные всех процедур модуля в сумме не могут превышать 64Kбайта памяти (не 64Kбайта на процедуру). Следует отметить, что статические строки переменой длины и статические массивы могут превышать этот предел.

•	Объем памяти для типа данных, определяемого пользователем превышает 64Kбайта.

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

•	В процедуре предпринята попытка описать переменную определяемого пользователем типа, которая требует более 32Kбайт памяти.

Не смотря на то, что предельный размер переменной определяемого пользователем типа составляет на уровне модуля 64Kбайта, переменные этих типов в процедурах не могут превышать по размеру 32Kбайт памяти. Сократите размер, требуемый для определяемого пользователем типа, или воспользуйтесь переменной уровня модуля.

•	Размер строки фиксированного размера, описанной на уровне процедуры, превышает 65464.

Сократите длину строки фиксированного размера. Следует отметить, что размеры строк переменной длины могут превышать этот предел.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Управляющая переменная For уже используется

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

•	Внутренний цикл For использует тот же счетчик, что и охватывающий его цикл For.

Проверьте вложенные циклы на повторение. Например, если во внешнем цикле используется For Count = 1 To 25, внутренние циклы не могут использовать переменную Count в качестве управляющих переменных.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Управляющая переменная Each должна иметь тип Variant или Object

Управляющая переменная является частью элемент синтаксиса инструкции For Each...Next. причины возникновения этой ошибки и способы ее устранения:

•	Семейство имеет управляющую переменную, которая не имеет тип Variant или Object.

Убедитесь, что часть элемент инструкции For Each...Next имеет тип Variant или Object.

•	Массив имеет управляющую переменную, которая не имеет тип Variant.

Убедитесь, что часть элемент инструкции For Each...Next имеет тип Variant.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Управляющая переменная инструкции For Each для массивов должна иметь тип Variant

Управляющая переменная является частью элемента синтаксиса конструкции For Each...Next. причины возникновения этой ошибки и способы ее устранения:

•	Массив имеет управляющую переменную, которая не имеет тип Variant.

Убедитесь, что часть группы инструкции For Each...Next является переменной типа Variant.

•	Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция For Each не может использоваться для массивов определяемого пользователем типа или строк фиксированной длины

Конструкции For Each допустимы только для семейств и массивов встроенных типов, включая массивы объектов. Строки фиксированной длины также не могут использоваться в инструкции For Each. Причины возникновения этой ошибки и способы ее устранения:

•	Элементы массива конструкции For Each имеют тип, определяемый пользователем..

Воспользуйтесь обычным циклом For...Next для интераций по элементам массива.

•	Элементы массива в конструкции For Each имеют тип строк фиксированной длины.

Воспользуйтесь обычным циклом For...Next для интераций по элементам массива.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция For Each может применяться только к семействам или массивам

Конструкция For Each допустима только для семейств и массивов.. причины возникновения этой ошибки и способы ее устранения:

•	В качестве элемента группа синтаксиса инструкции For Each задан объект, который не является семейством или массивом.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


For без Next

Каждая инструкция For должна иметь соответствующую инструкцию Next. Причины возникновения этой ошибки и способы ее устранения :

•	Инструкция For используется без соответствующей инструкции Next.

Проверьте наличие неправильно заданной структуры For...Next внутри внешней структуры For...Next.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Опережающая ссылка на определяемый пользователем тип

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

•	Была описана переменная с типом, определяемым пользователем, до определения этого типа. В следующем примере переменная OtherVar описывается до ее типа (OtherType):

Type MyType

OtherVar As OtherType

End Type

Type OtherType

WholeVar As Integer

RealVar As Double

End Type

Переместите описание типа для устранения опережающих ссылок.

•	Тип, определяемый пользователем, используется внутри своего определения.

Type MyType

MyVar As Integer

OtherVar As MyType

End Type

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Функция в левой части присвоения должна возвращать значение типа Variant или Object

Вызов функции может появляться с левой стороны присвоения, но только в том случае, если функция возвращает значения типа Object или Variant. Причины возникновения этой ошибки и способы ее устранения:

•	Функция возвращает значение не типа Variant или Object.

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

•	При вызове функции все проходит нормально, но до конца не выполняется. Например, при попытке установить свойство, которое может быть установлено только во время разработки.

Войдите в режим конструктора и установите свойство в окне Property. Удалите ту часть программы, где была предпринята попытка установить свойство программным путем.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Функция помечена как ограниченная или использует тип данных, который не поддерживается Visual Basic

Не все языки программирования имеют доступ ко всем процедурам, используемым в библиотеке типов или в библиотеке объектов. Разработчик библиотеки типов или объектов может пометить некоторые функции как ограниченные, чтобы предотвратить их использование в макро языках. Причины возникновения этой ошибки и способы ее устранения:

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

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

•	Попытка использовать функцию, требующую тип параметра либо имеющую возвратный тип, который недоступен в Visual Basic.

Иногда можно сымитировать возвратный тип при помощи эквивалентных средств Visual Basic. Необходимо проверить подтипы данных типа Variant. . Также это можно использовать для параметров, не являющихся типа Basic и используемых как ссылки. Тем не менее использовать тип данных Variant по значению для имитации данных, не являющихся типа Basic, невозможно.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком длинный идентификатор

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

•	Имя идентификатора содержит более 255 символов.

Сократите длину идентификатора.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Выбранный идентификатор не является именем процедуры

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

•	Идентификатор не является именем процедуры.

Проверьте, правильно ли записан идентификатор.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неправильная версия DLL

Каждая версия Visual Basic работает с соответствующей библиотекой динамической компоновки (DLL). причины возникновения этой ошибки и способы ее устранения:

•	Версия библиотеки динамической компоновки Visual Basic не соответствует версии, предполагаемой в главном приложении.. В программе предпринимается попытка вызова программы из DLL, но версия этой библиотеки не соответствует версии Visual Basic или главного приложения.

Достаньте правильную версию библиотеки и убедитесь, что в пути старые версии не предшествуют новой.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неправильная версия ActiveX

Версии библиотек динамической компоновки (DLL) ActiveX не соответствуют версии, предполагаемой в главном приложении. В Microsoft Windows приложение выполняет поиск библиотек DLL сначала в текущем каталоге, затем по указанному значению пути, а затем в каталоге WINDOWS\SYSTEM. Причины возникновения этой ошибки и способы ее устранения:

•	В поиске старые библиотеки динамической компоновки ActiveX были обнаружены до библиотек, ожидаемых в главном приложении.

Не следует использовать обе версии библиотек динамической компоновки.

Следует отметить, что на Macintosh файлы ActiveX обычно находятся только в папке Extensions, поэтому возникновение данной ошибки практически невероятно.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недостатоно памяти для создания переменных в окне отладки

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

•	Созданная в окне отладки переменная должна быть подтверждена, так как она была создана не в программном контексте.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недостаточно памяти при сохранении сведений для отмены команды

Выполнить команду Отмена для восстановления текущего состояния после этих изменений будет невозможно. Причины возникновения этой ошибки и способы ее устранения:

•	Изменение слишком велико, чтобы сохранить состояние для команды Отмена.

Попробуйте выполнить изменения по частям.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недостаточно сведений о проекте для загрузки проекта на данной платформе или в используемой версии.

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

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

Загрузите файл, используя ту версию Visual Basic или ту платформу, на которой этот файл был сохранен прошлый раз. Затем снова сохраните его. Если при данном сохранении не было получено никаких сообщений об ошибке, то этот файл можно загрузить в текущей версии или на данной платформе.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый интерфейс для реализаций

Не все интерфейсы могут быть реализованы в Visual Basic. Причины возникновения этой ошибки и способы ее устранения:

•	Интерфейс содержит элементы, не поддерживаемые Visual Basic. Например, в Visual Basic нет эквивалентов для длинных целых типов данных без знака (unsigned long integer), Visual Basic не может определить параметр процедуры как "только для вывода". Несмотря на то, что в идентификаторах Visual Basic можно использовать символ подчеркивания (_), интерфейс, использующих эти символы в названиях компонент Visual Basic, применить невозможно.

Нельзя реализовать этот интерфейс в Visual Basic.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый режим доступа

В инструкции Open указан тип доступа, недопустимый для заданного типа файла. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка открыть файл для ввода (Input) с указанием недопустимого режима доступа.

Имеется возможность пропустить спецификацию режима доступа при открытии файла для ввода. Если же он задан, то это должен быть режим Read. Режимы Write и Read Write не допускаются для файла, открываемого для ввода (Input).

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

Имеется возможность пропустить спецификацию режима доступа при открытии файла для добавления. Если же он задан, то это должен быть режим Write. Режимы Read и Read Write не допускаются для файла, открываемого для добавления (Append).

•	Попытка открыть файл для вывода (Output) с указанием недопустимого режима доступа.

Имеется возможность пропустить спецификацию режима доступа при открытии файла для вывода. Если же он задан, то это должен быть режим Write. Режимы Read и Read Write не допускаются для файла, открываемого для вывода (Output).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый атрибут инструкции Sub, Function или Property

Некоторые атрибуты не допускаются внутри процедур. причины возникновения этой ошибки и способы ее устранения:

•	Атрибуты Public или Private используются внутри определения процедуры.

Удалите этот атрибут из процедуры. Чтобы обеспечить переменной более широкую область определения, переместите описание на уровень модуля. Переменные, описанные в процедурах всегда являются личными (Private).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый символ

Этот символ не допускается в текущем контексте. Причины возникновения этой ошибки и способы ее устранения:

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

Сравните написание имени с его описанием.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый формат данных

Данные, прочитанные из файла, не имеют предполагаемый формат. Причины возникновения этой ошибки и способы ее устранения:

•	Файл проекта или файл библиотеки объектов подвержен или имеет нераспознаваемый формат.

Достаньте новую версию файла проекта или библиотеки объектов.

•	Вероятно предпринята попытка загрузки в модульфайла .exe.

Загрузите вместо этого исходный текст программы.

•	Возможно были использованы окна диалога Ссылки и Просмотр объектов для добавления ссылки в файл, который не является допустимой библиотекой объектов или содержит проект Basic в формате, который не поддерживается главным приложением. Например, Microsoft Excel не распознает файлы .bas или .frm или файлы Microsoft Project, содержащие программу на языке Basic.

Загрузите этот файл в создавшее его приложение и сохраните его в совместимом формате. Например, исходный код библиотеки объектов может быть обработан с помощью MkTypLib; программы QuickBasic и Visual Basic могут быть сохранены в текстовом формате и т.п.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый тип данных для константы

Не все типы данных могут присваиваться константам.. Причины возникновения этой ошибки и способы ее устранения:

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

Удалите описание или переопределите элемент как переменную.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не допускается в окне отладки

Не все инструкции допускаются в окне отладки. Причины возникновения этой ошибки и способы ее устранения:

•	Была использована описательная инструкция. Например, инструкции Const, Declare, Deftype, Dim, Function, Option Base, Option Explicit, Option Compare, Option Private, Private, Public, инструкции описания процедуры Property (Property Let, Property Set и Property Get), ReDim, Static, Sub и Type использовать в окне отладки не допускается.

Удалите описательные инструкции из окна отладки.

•	Была использована инструкция, управляющая порядком выполнения программы, например, инструкции Sub, Function, Property, GoSub, GoTo, Return и Resume.

Удалите эти инструкции из окна отладки.

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

Вводить такие блоки в одну физическую строку, отделяя друг от друга инструкции при помощи двоеточия (:), нельзя. Но имеется возможность расширить одну инструкцию на несколько физических строк в окне отладки с помощью символа продолжения строки: пробела и следующего за ним символа подчеркивания ( _).

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

Удалите эту программу из окна отладки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая внутренняя процедура

Эта инструкция не допускается в процедуре Sub или Function. Причины возникновения этой ошибки и способы ее устранения:

•	Одна из следующих инструкций находится в процедуре:: Declare, Deftype, Private, Public, Option Base, Option Compare, Option Explicit, Option Private и Type.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая длина для строки фиксированной длины

Причины возникновения этой ошибки и способы ее устранения:

•	Строка фиксированной длины описана как пустая.

Строка фиксированной длины должна иметь хотя бы один символ.

•	Строка фиксированной длины содержит более допустимого числа символов 65,526.

Сократите длину строки.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая ссылка на управляющую переменную Next

Числовая переменная в части Next цикла For...Next должна соответствовать переменной в части For. Причины возникновения этой ошибки и способы ее устранения:

•	Переменная в части Next цикла For...Next отлична от переменной в части For. Например:

For Counter = 1 To 10

MyVar = Counter

Next Count

Проверьте орфографию переменной в части Next и убедитесь, что она совпадает с орфографией в части For. А также убедитесь, что какие-либо части вложенного цикла, использующие данную переменную, не были случайно удалены.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая или неполная ссылка

Идентификатор, начинающийся с точки, допускается только внутри блока With. Причины возникновения этой ошибки и способы ее устранения:

•	Идентификатор начинается с точки.

Добавьте идентификатору указатель или удалите точку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая внешняя процедура

Данная инструкция должна использоваться в процедуре Sub или Function, или в процедуре-свойстве (Property Get, Property Let, Property Set). Причины возникновения ошибки и способы ее устранения:

•	Выполняемая инструкция, инструкция Static или ReDim используется на уровне модуля.

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

Примечание.   На уровне модуля допускается использование только примечаний и инструкций описаний, таких как Const, Declare, Deftype, Dim, Option Base, Option Compare, Option Explicit, Option Private, Private, Public и Type. Инструкции Sub, Function и Property находятся вне основной части самих процедур, но внутри их описания.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование ParamArray

Параметр, определенный как ParamArray, будет некорректно использоваться в процедуре. Причины возникновения этой ошибки и способы ее устранения:

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

Присвойте значение параметра ParamArray значению типа Variant и передайте его в процедуру.

•	Попытка использовать инструкцию Erase или ReDim с параметром ParamArray внутри этой процедуры.

Удалите инструкцию Erase или ReDim. Эти операции не могут выполняться с параметром ParamArray.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое имя процедуры

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

•	Попытка определить процедуру, но используемое для нее имя не допускается, так как уже используется главным приложением для других целей. Например, если главным приложением является Microsoft Excel, невозможно определение процедуры с именем R1C1, так как этот идентификатор уже используется Microsoft Excel.

Выберите для процедуры другое имя.

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

Выберите другое имя процедуры.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое составное имя

Составные имена используются для устранения двусмысленности. Причины возникновения этой ошибки и способы ее устранения:

•	Составное имя не определяет проект, модуль, объект или переменную пользовательского типа в текущей области.

проверьте орфографию в составном имени. Убедитесь, что определяющий идентификатор находится в текущей области. Например, переменную пользовательского типа в модуле Private можно увидеть только в этом модуле.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование ReDim

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

•	Переменная была описана как Variant, но была предпринята попытка использовать команду ReDim для изменения ее в массив.

Переменная типа Variant может содержать массив, но если она не была описана, то использовать команду ReDim для изменения ее в массив нельзя. Необходимо описать переменную как Variant до использования команды ReDim для определения количества элементов, которые она будет содержать. Например, код ReDim AVar(10) вызывает ошибку при использовании команды ReDim, а код ReDim BVar(10) нет:

AVar = 1	' Неявное описание AVar.

ReDim AVar(10)	' Ошибка недопустимого использования ReDim.

.

.

.

Dim BVar	' Явное описание BVar.

ReDim BVar(10)	' Ошибки нет.

•	Попытка использовать команду ReDim для изменения более одной размерности массива, которые содержит переменная типа Variant.

Команда ReDim может быть использована для изменения только последней размерности массива в переменной типа Variant. Для создания массива с множественной размерностью, которую можно будет изменить, массив должен находиться вне переменной Variant и быть описан нормальным путем.

•	Команда ReDim может быть использована только для изменения количества элементов в нормальном массиве, а не для изменения их типов.

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

Dim MyVar As Variant	' Описание переменной.

ReDim MyVar(10) As String	' Переопределение ее как массива строк.

ReDim MyVar(20) As Integer	' Переопределение ее как массива Integer.

ReDim MyVar(5) As Variant	' Переопределение ее как массива Variant.

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

Уберите команду ReDim.

Примечание.   Если тип переменной не указан, то по умолчанию задается тип Variant. Это не всегда является очевидным. Например, следующий код определяет две переменные: первая, MyVar, является Variant; а вторая, AnotherVar, является Integer.

Dim MyVar, AnotherVar As Integer

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый синтаксис для описания константы условного компилятора

Ввод константы условной компиляции в поле диалогового окна Параметры отличен от описания констант в программе. Причины возникновения этой ошибки и пути ее устранения:

•	В диалоговом окне Параметры при вводе описания константы был использован неверный синтаксис.

Единственным верным синтаксисом является простое присвоение целого значения идентификатору. Убедитесь, что синтаксис введенного значения выглядит следующим образом и все константы отделены друг от друга двоеточием (:):

constantname = [{+ | – }]integervalue : [{+ | – }]constantname = integervalue [...]

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый символ описания типа

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

•	Символ описания типа добавлен к переменной, описанной в инструкции Private, Public или Static с приложением As.

Удалите этот символ описания типа.

•	Символ описания типа добавлен к неподходящей текстовой константе (литералу). Например, так как амперсант (&) является символом описания типа Long, добавление его к литералу другого типа приводит к возникновению ошибки:

10.253&

Удалите этот символ описания или замените его правильным символом.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование оператора AddressOf

Оператор AddressOf изменяет аргумент для передачи адреса функции, а не результатов вызова функции. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка использовать оператор AddressOf с именем метода класса.

При помощи оператора AddressOf могут быть изменены только имена процедур Visual Basic в модулях с расширением .bas. Определить метод класса невозможно.

•	Имя процедуры, измененное оператором AddressOf, определено в модуле другого проекта..

•	Попытка изменить при помощи оператора AddressOf имя функции DLL или функции, определенной в библиотеке типов..

•	Функции DLL и библиотека типов не могут быть изменены при помощи оператора AddressOf.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование ключевого слова Me

Ключевое слово Me появляется в модулях класса. Причины возникновения этой ошибки и способы ее устранения:

•	Появление ключевого слова Me в стандартном модуле.

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

•	Появление ключевого слова Me слева от оператора присвоения Set, например:

Set Me = MyObject	' Появляется сообщение "Недопустимое использование ключевого слова Me ".

Удалите оператор присвоения Set.

Примечание   Ключевое слово Me может появиться слева от оператора присвоения Let, в котором свойство объекта, представленное словом Me, установлено по умолчанию. Например:

Let Me = MyObject	' Присвоение с явным Let.

Me = MyObject	' Присвоение с неявным Let.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование ключевого слова New

Ключевое слово New может применяться только для создаваемых объектов (например, класс или программируемый объект). Причины возникновения этой ошибки и способы ее устранения:

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

Dim MyMod As New Module1

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

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

' Допустимый синтаксис для создания переменной.

Dim MyListBox As ListBox

Dim MyFormInst As Form

' Недопустимый синтаксис для примера объекта.

Set MyFormInst = New Form

Set MyListBox = New ListBox

ListBox и Form являются именами класса, а не специальными именами объекта. Они могут использоваться для определения переменной как ссылки на определенный тип объекта, как и в приведенной выше инструкции Dim. Но они не могут использоваться для размножения самих объектов в инструкции Set. В данном случае в инструкции Set необходимо определить отдельный объект, а не общее имя класса:

' Допустимый синтаксис для создания нового примера формы или поля списка.

Set MyFormInst = New Form1

Set MyListBox = New List1

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование объекта

Попытка использовать объект недопустимым образом. Причины возникновения этой ошибки и способы ее устранения:

•	Возможно была попытка прервать ссылку на объект, присваивая ему значение Nothing, но ключевое словоSet было пропущено.

MyObject = Nothing

Воспользуйтесь инструкцией Set для присвоения объекту Nothing. Если MyObject является объектом, то для присвоения ему значения Nothing с помощью инструкции Set необходимо записать:

Set MyObject = Nothing

Если ключевое слово Set пропущено, то по умолчанию используется слово Let, что приводит к попытке присвоить значение, а не ссылку. А Nothing невозможно использовать для присвоения значения.

•	Попытка использовать в выраженииNothing.

Перепишите выражение без Nothing.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование свойства

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

•	Попытка придать свойству значение только для чтения.

Если единственной продедурой, определенной для данного свойства, является Property Get, то задать свойству значение невозможно. В этом случае необходимо либо написать соответствующую процедуру Property Let, либо не пытаться записывать в свойство.

•	Попытка считать свойство, обозначенное только для записи.

Если единственной процедурой, определенной для данного свойства, является Property Let, то прочитать значение свойства невозможно. В этом случае необходимо либо написать соответствующую процедуру Property Get, либо не пытаться записывать в свойство.

•	Нужно установить ссылку, а для данного свойства определены только процедуры Property Get или Property Let.

В этом случае необходимо либо написать процедуру Property Set, либо не пытаться установить ссылку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое контрольное выражение

Указанное контрольное выражение не является допустимым выражением. Причины возникновения этой ошибки и способы ее устранения:

•	Синтаксически неверное контрольное выражение.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Метка не определена

Причины возникновения этой ошибки и способы ее устранения:

•	Задана ссылка на метку строки или номер строки (например, в инструкции GoTo), которые не обнаружены  пределах текущей области определения.

Метка должна находится внутри процедуры, которая содержит эту ссылку. Метки строк доступны (видимы) только в их собственных процедурах.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Настройка на язык/страну изменена

Причины возникновения этой ошибки и способы ее устранения:

•	Изменена настройка на язык/страну по умолчанию для среды Visual Basic.

Следует помнить, что это может привести к ошибкам, хотя и является допустимой операцией.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Строка не является исполняемой инструкцией

Описания и комментарии не являются исполняемыми инструкциями. Причины возникновения этой ошибки и способы ее устранения:

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

Необходимо поместить курсор на исполняемую инструкцию рядом с текущей строкой.

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


Слишком длинная строка

Физическая строка программы Visual Basic может содержать до 1023 символов. Причины возникновения этой ошибки и способы ее устранения:

•	Строка содержит слишком много символов.

Имеется возможность создать длинную логическую строку, объединяя физические строки с помощью символа продолжения строки (пробел, за которым следует символ подчеркивания ( _)). С помощью символа продолжения строк допускается объединение в одну логическую строку до 10 физических строк. Таким образом, логическая строка может содержать до 10,230 символов. В других случаях, необходимо разбить  строку на отдельные инструкции или присвоить некоторые выражения промежуточным переменным.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Loop без Do

Цикл Do должен начинаться с инструкции Do. Причины возникновения этой ошибки и способы ее устранения:

•	Незавершенный блок цикла, вложенный в другой цикл.

Убедитесь, что цикл Do...Loop записан правильно.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


LSet разрешается использовать только для строк и определяемых пользователями типов

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

•	Указанная переменная не является строковой или не имеет тип, определяемый пользователем.

Если предпринимается попытка присвоить один массив целиком другому массиву, LSet не работает. Необходимо использовать цикл для присвоения каждого элемента по отдельности.

•	Попытка использовать LSet с объектом.

LSet может также использоваться для присвоения элементов переменной определяемого пользователем типа элементам другой, совместимой с данной переменной. Хотя объекты подобны определяемым пользователем типам, использование LSet с объектами невозможно. Также невозможно использование LSet с переменными типа, определяемого пользователем, и содержащие строки, объекты или переменные.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


LSet не допускается

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

•	Попытка использовать LSet для определяемого пользователем типа, содержащего строки, объекты или переменные.

Элементы одной переменной типа, определяемого пользователем, необходимо присваивать элементам другой переменной по отдельности.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Добавлено максимальное число контрольных выражений

Число контрольных выражений, которое допускается в окне контрольных значений, ограничено. Причины возникновения этой ошибки и способы ее устранения:

•	Окно контрольных значений уже содержит максимально допустимое число контрольных выражений.

Удалите столько контрольных выражений, сколько следует добавить, или отобразите нужное значение в окне проверки.


Метод или компонент данных не найден

Семейство, объект или определяемый пользователем тип не содержит адресуемый компонент. Причины возникновения этой ошибки и способы ее устранения:

•	Имя объекта или компонента указано неправильно.

Проверьте правильность написания имен, а также соответствующую инструкцию Type или документацию по объекту, чтобы определить набор существующих компонентов и правильное написание имен объекта и компонента.

•	Указанный индекс семейства лежит вне допустимого диапазона.

Проверьте свойство Count, чтобы определить, существует ли указанный компонент семейства. Следует отметить, что индексы семейства начинаются с 1, а не с 0, поэтому свойство Count возвращает максимально допустимый номер индекса.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


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

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

•	Процедура или идентификатор компонента данных в модуле объекта использует идентификатор, уже существующий в модуле объекта, производным которого является данный модуль. Например, форма имеет свойство BackColor, таким образом, ошибку будет вызывать следующая программа:

' Форма уже имеет свойство BackColor.

Dim BackColor As Integer	' Вызывает ошибку.

Function BackColor()	' Вызывает ошибку.

End Function

Измените идентификатор, конфликтующий с идентификатором компонента данного модуля объекта.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не допускается применение метода без подходящего объекта

Не все методы могут выполняться со всеми объектами. Причины возникновения этой ошибки и способы ее устранения:

•	При использовании метода без указания объекта метод не доступен для подразумеваемого объекта. Например, нельзя использовать метод Line в стандартном модуле без допустимого объекта, так как стандартный модуль не выводит на экран выходные данные метода Line.

Четко укажите для метода допустимый объект. Например, для метода Line можно указать форму или рисунок.

Примечание.   Для методов Circle, Print и PSet также необходимо явное указание объекта при использовании в стандартном модуле.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Отсутствует закрывающая скобка

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

•	Отсутствует закрывающая скобка.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Модуль не найден

Модули не загружаются из программы, на которую сделана ссылка — они должны быть включены в проект. Причины возникновения этой ошибки и способы ее устранения:

•	Нужный модуль не включен в указанный проект. Например, инструкция MyModule.SomeVar = 5 вызовет эту ошибку, если модуль MyModule не доступен проекту MyProject.

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


Слишком большой модуль

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

•	Слишком много строк в программе модуля.

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

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Должна быть первой инструкцией строки

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

•	Перед инструкцией Sub, Function или Property в той же строке находится другая инструкция.

Инструкция Sub, Function или Property всегда должна быть первой инструкцией в строке (исключение: ключевое слово Public, Private или Static).

•	Перед инструкцией End If, Else или ElseIf в той же строке находится другая инструкция.

Инструкция End If, Else или ElseIf (только в блочной конструкции If) всегда должна быть первой инструкцией в строке.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Имя конфликтует с именем существующего модуля, проекта или библиотеки объектов

Все модули, библиотеки объектов и адресуемые проекты внутри проекта должны иметь уникальные имена. Причины возникновения этой ошибки и способы ее устранения:

•	Данный проект уже содержит ссылку на модуль, проект или библиотеку объектов с тем же именем. Расширение файла не считается частью имени, поэтому имена, отличающиеся расширениями, не считаются разными.

Измените имя одного из конфликтующих модулей, проектов или библиотек объектов.

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

Измените имя модуля или имя файла, который не удалось добавить.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Именованный аргумент уже указан

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

•	В одном вызове процедуры один и тот же именованный аргумент был указан более одного раза. Например, если синтаксис процедуры MySub содержит именованные аргументы Arg1 и Arg2, следующий вызов приведет к возникновению данной ошибки:

Call MySub(Arg1 := 3, Arg1 := 5)

Удалите одно из повторяющихся описаний.

•	Один и тот же аргумент указан дважды: как позиционный и как именованный, например:

Call MySub(1, Arg1 := 3)

Удалите одно из повторяющихся описаний.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Именованные аргументы не допускаются

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

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

MyVar = MyArray(MyNamedArg := 1)

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

•	Предпринята попытка указать именованный аргумент с объектом, например:

MyVar = MyObject(MyNamedArg := 1)

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

•	Предпринята попытка указать именованный аргумент с внешним именем:

MyVar = [MyName](MyNamedArg := 1)

В качестве аргумента внешнего имени следует использовать обычную переменную или константное выражение.

•	Предпринята попытка указать именованный аргумент с компонентом данных объекта, например:

MyVar = [MyObject].MyProperty(MyNamedArg := 1)

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Next без For

Каждой инструкции Next должна соответствовать предшествующая инструкция For. Причины возникновения этой ошибки и способы ее устранения:

•	Отсутствует инструкция For, соответствующая данной инструкции Next.

Проверьте правильность оформления управляющих структур, расположенных внутри структуры For...Next.  Например, причиной этой ошибки может быть отсутствие инструкции End If, соответствующей инструкции If, расположенной внутри структуры For...Next.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Текст не выделен

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

•	Перед выполнением операции поиска или замены не был выделен фрагмент текста.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недостаточно памяти для полного сохранения проекта

При сохранении проекта обычно сохраняется дополнительная информация, позволяющая загрузить проект в более поздней версии Visual Basic или на другой платформе. Причины возникновения этой ошибки и способы ее устранения:

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

Если может понадобиться открыть проект в более поздней версии Visual Basic или на другой платформе, закройте ненужные приложения и снова попробуйте сохранить проект.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Контрольное выражение не выделено

Необходимо выделить какое-либо выражение перед выбором команды Контрольное значение (Instant Watch). Причины возникновения этой ошибки и способы ее устранения:

•	Никакое выражение не было выделено перед выбором команды Контрольное значение (Instant Watch).

Выделите нужное контрольное выражение в окне программы перед выбором команды Контрольное значение (Instant Watch).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не поддерживаются библиотеки объектов

В библиотеке объектов могут иметься возможности, которые не имеют эквивалентов в Visual Basic. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка получить доступ к типу данных библиотеки объектов или функции, которые не поддерживаются в Visual Basic.

Обратитесь к разработчику библиотеки объектов за дополнительными сведениями по корректному использованию библиотеки объектов и по средствам, с которыми ее следует использовать.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Библиотека объектов Visual Basic для приложений не найдена

Библиотека объектов Visual Basic для приложений больше не является отдельным файлом; она объединена в библиотеку динамической компоновки (DLL).

Не удается найти предыдущую версию библиотеки объектов (vaxxx.olb или vaxxxx.olb), соответствующую языку проекта. Причины возникновения этой ошибки и способы ее устранения:

•	Библиотека объектов полностью отсутствует, не находится в предполагаемом каталоге или является неправильной версией.

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

Если отсутствующая библиотека имеет версию языка, которая была установлена главным приложением, вероятно проще всего перезапустить программу установки. Если проекту требуется библиотека объектов для другого языка, чем установленный главным приложением (например, если по почте получен проект, написанный на машине с другими языковыми настройками), убедитесь, что нужная версия языка библиотеки объектов Visual Basic добавлена вместе с проектом и помещена в требуемый каталог.

Приложения допускают поддержку различных языковых версий своих библиотек объектов. Чтобы определить требуемую версию языка, выведите на экран окно диалога Ссылки (References) и выясните, какой язык указан в нижней части окна диалога.

Для каждой платформы существуют различные версии библиотек объектов. Таким образом, когда проекты перемещаются между платформами, например, от Macintosh к Microsoft Windows, правильная языковая версия адресуемой библиотеки (для данной платформы) должна быть доступна в том месте, которое указывается в документации к главному приложению. Следует отметить, что коды некоторых языков двухзначные, а некоторых -- трехзначные.

Имя файла библиотеки объектов Visual Basic строится следующим образом:

•	Windows: Код приложения + Код языка + [Версия].OLB. Например:

vafr2.olb является французской библиотекой объектов Visual Basic для версии 2.

•	Macintosh: Имя приложения Код языка [Версия] OLB. Например:

VA FR 2 OLB является французской библиотекой объектов Visual Basic для версии 2.

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

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

•	Если доступ к электронной службе технической поддержки Microsoft отсутствует, можно получить библиотеки объектов по запросу приложений от Microsoft. Сведения об обращении в местную службу поддержки продуктов Microsoft также находятся в разделе о технической поддержке в файле справочной системы.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Библиотека объектов не зарегистрирована

Библиотека объектов Visual Basic для приложений больше не является отдельным файлом; она объединена в библиотеку динамической компоновки (DLL).

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

•	Предпринята попытка загрузить предыдущую версию библиотеки объектов Visual Basic для приложений (vaxxx.olb) или библиотеки объектов главного приложения. Однако правильные языковые версии этих объектных библиотек не были найдены в системном реестре.

Перерегистрируйте приложение. Для Macintosh удалите файл vba.ini из папки Macintosh "Preferences" и повторно запустите приложение.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Язык библиотеки объектов несовместим с текущим проектом

Не удалось добавить ссылку. Причины возникновения этой ошибки и способы ее устранения:

•	Предпринята попытка добавить ссылку на библиотеку объектов, национальные настройки которой не совместимы с используемыми текущим проектом. Данная ссылка не была добавлена. Чтобы использовать эту библиотеку объектов, необходимо создать проект, использующий совместимые с ней национальные настройки.

Попробуйте зарегистрировать Visual Basic для приложений и главное приложение для данного языка. После этого данная библиотека объектов станет доступна в окне диалога Ссылки (References).

Примечание. Если Visual Basic является главным приложением, невозможно изменить язык проекта. Все используемые библиотеки объектов должны быть совместимы с языковой настройкой English/U.S.


Переменная использует не поддерживаемый в Visual Basic тип программирования объектов

Не все типы программирования объектов поддерживаются в Visual Basic. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка использовать в программе тип, который не имеет эквивалента в Visual Basic для приложений. Например, в Visual Basic не доступны различные типы указателей или тип «целое без знака» (unsigned integer), поэтому возникает ошибка при попытке создания переменной одного из этих типов из библиотеки объектов. В следующем примере, хотя Rainbow возможно является допустимой структурой, в Visual Basic невозможно создание переменной этого типа, если она содержит тип, который Visual Basic не распознает:

Dim MyVar As Rainbow	' Вызывает ошибку.

Если данный тип является допустимым типом параметра для функции в библиотеке объектов, эта ошибка означает только невозможность создания переменной данного типа в программе пользователя.  Хотя не всегда возможно описание переменных с типами данных, часто имеются эквивалентные типы Visual Basic. Например, хотя Visual Basic не имеет типов указателей, можно передавать функции API указатель функции с помощью оператора AddressOf. Возможно также применение подтипов типа Variant. Их часто можно использовать в качестве эквивалентов типов, недоступных напрямую в Visual Basic. Иногда, однако, в Visual Basic просто нет эквивалентов. Например, недоступны различные типы указателей данных.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


После End Sub, End Function или End Property могут находиться только комментарии

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

•	Исполняемая программа находится вне процедуры.

Все инструкции, не являющиеся описаниями и находящиеся вне процедур, должны начинаться с апострофа ('). Инструкции, являющиеся описаниями, должны находиться перед первым описанием процедуры. Комментарии игнорируются во время выполнения программы.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Необязательный аргумент должен иметь тип Variant или встроенный тип со значением по умолчанию

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

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

Убедитесь, что любой аргумент, указанный как Optional имеет значение по умолчанию.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая инструкция Option Private Module в модуле объекта

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

•	Появление инструкции Option Private Module в модуле объекта.

Удалите инструкцию Option Private Module из модуля. В модулях объекта она присутствует по умолчанию. Изменение установки по умолчанию не может быть сделано из программы. Для получения сведений о расширении доступности компонентов модуля объекта см. документацию главного приложения.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недостаточно памяти; некоторые контрольные значения могли быть удалены

Если система испытывает недостаток памяти, контрольные выражения удаляются, чтобы освободить достаточно памяти для восстановления. Причины возникновения этой ошибки и способы ее устранения:

•	Загружено слишком много приложений, проектов или модулей.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недостаточно ресурсов

Определенные типы ресурсов, называемые "дескрипторами", используются внутренне при выполнении большинства операций. Причины возникновения этой ошибки и способы ее устранения:

•	Программа достигла предела отведенных ей ресурсов.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Процедура ParamArray должна быть описана как массив элементов Variant

Аргументы параметра ParamArray могут иметь разные типы данных. Поэтому, сам параметр должен быть описан как массив типа Variant. Кроме того, число аргументов параметра ParamArray является переменным. Каждый указанный при вызове аргумент становится соответствующим элементом массива типа Variant. Например:

Sub MySub(ParamArray VarArg())

. . .

End Sub

Call MySub ("Первый аргумент", 2, 3.54)

Причины возникновения этой ошибки и способы ее устранения:

•	В описании данной процедуры параметр ParamArray описан как массив имеющий тип, отличный от Variant.

Опишите параметр ParamArray как массив элементов типа Variant.

•	Тип данных параметра ParamArray не указан, однако описание данной процедуры находится в области определения инструкции Defтип, поэтому параметру неявно присвоен тип, отличный от Variant.

Используйте явное предложение As Variant в описании параметра ParamArray.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Дополнительные сведения об ошибке находятся в файле Readme

Некоторые разделы были добавлены к этому продукту после составления справочных файлов. Поэтому справочная информация по таким разделам содержится в файле Readme главного приложения.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Только типы Public Enum в модулях общего класса могут быть использованы в качестве параметров или возвращаемых типов общих
Только типы Public Enum в модулях общего класса могут быть использованы в качестве параметров или возвращаемых типов общих процедур или общих компонентов данных

Общая процедура доступна для всех модулей проекта, пока тип Private Enum недоступен за пределами собственного модуля. Причины возникновения этой ошибки и способы ее устранения:

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

Опишите тип Public Enum. Он должен быть в модуле класса.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком большая процедура

После компиляции программа для процедуры не может превышать 64Кбайта. Причины возникновения этой ошибки и способы ее устранения:

•	После компиляции программа для данной процедуры превышает 64Кбайта.

Разбейте эту и другие слишком большие процедуры на две или более процедур.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Проект содержит слишком много имен процедур, переменных и констант

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

•	Число имен в таблице имен проекта превышает 32768.

Возможно, таблица имен содержит временные дубликаты. Чтобы убрать их и уплотнить таблицу следует сохранить проект на диск, а затем закрыть его. Если после следующего открытия проекта число имен по-прежнему превышает 32768, уменьшите их количество путем повторного использования имен локальных переменных в нескольких процедурах, а затем опять сохраните проект, закройте его и снова откройте.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Проект не найден

Данный проект не был найден. Причины возникновения этой ошибки и способы ее устранения:

•	Было указано имя проекта, который не был найден.

Проверьте, без ошибок ли был указан проект.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Запрещенное составное имя в области определения модуля

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

•	Имя модуля при вызове процедуры указано с использованием точечной нотации (указатель.элемент).

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Часть составного имени должна быть семейством

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

•	Имя, расположенное слева от восклицательного знака (!), не является именем семейства.

Если данное имя является именем семейства, проверьте правильность его написания. Следует учитывать, что восклицательный знак также является символом описания типа для типа данных Single. Если данное имя не является именем семейства, то возможно символ описания типа ! был добавлен в конец имени переменной, сцепленной с другим именем.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Диапазон не содержит значений

Существуют ограничения для способа указания числа элементов в массиве. Причины возникновения этой ошибки и способы ее устранения:

•	Границы индексов массива указаны неправильно. Например, следующие описания являются неправильными:

Dim MyArray(10 To -5)	' Убывание индексов не разрешено.

Dim MyArray(0 To 0)	' Массив не содержит ни одного элемента.

Проверьте правильность синтаксиса. Например, следующее описание является правильным:

Dim MyArray(-5 To 10)

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


RSet допускается только для строк

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

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

Если это допустимо, попробуйте преобразовать эту переменную в строку. В противном случае не используйте инструкцию RSet.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка выполнения <номер>:

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

•	Возникла ошибка, не являющаяся обычной ошибкой Visual Basic.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком длинная или сложная строка образца поиска

Возможности Visual Basic по использованию подстановочных знаков ограничены. Причины возникновения этой ошибки и способы ее устранения:

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

Уменьшите длину или сложность строки и повторите поиск.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Необходимо задать образец поиска

Необходимо задать образец поиска. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка выполнения операции поиска без предварительного задания искомого образца.

Необходимо задать образец поиска. Пустая строка ("") может быть указана в качестве образца замены, но ее нельзя указать в качестве образца поиска.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Образец поиска не обнаружен

Образец поиска не был найден. Причины возникновения этой ошибки и способы ее устранения:

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

Расширьте область поиска, если поиск требуется продолжить.

•	В выражении, содержащем подстановочные знаки, пропущена левая скобка.

Вставьте левую скобку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Сбой операции поиска: невозможно выполнить чтение/запись на диск

Инструкции Seek обращаются непосредственно к диску. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка чтения с диска, защищенного от записи, или файла, предназначенного только для чтения или заблокированного.

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

•	Файл стал недоступным, например, в результате смены съемного диска.

Если файл был перемещен на другой диск, обратитесь к этому диску. В противном случае доступ к файлу невозможен.

•	Была предпринята попытка чтения файла проекта, библиотеки объектов или библиотеки типов, однако файл был поврежден.

Достаньте новую копию библиотеки или файла проекта.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Select Case без End Select

Каждая инструкция Select Case должна завершаться инструкцией End Select. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Select Case была использована без соответствующей инструкции End Select.

Проверьте, нет ли неправильно завершенной структуры Select Case...End Select внутри внешней структуры Select Case...End Select.  Каждой вложенной инструкции Select Case должна соответствовать отдельная инструкция End Select.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Выделено недопустимое контрольное выражение

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

•	Выбрана команда Instant Watch, но выделенное выражение не является допустимым. Например, ошибка появится при выделении комментария или вызова процедуры Sub.

Выделите допустимое выражение или выберите команду Добавить контрольное значение (Add Watch) и введите выражение.

•	Синтаксис контрольного выражения должен соответствовать национальным настройкам проекта, в котором оно определено.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Задание следующей инструкции допускается только для исполняемых строк текущей процедуры

Команда Следующая инструкция (Set Next Statement) указывает, с какого места должна продолжить выполнение приостановленная программа. Причины возникновения этой ошибки и способы ее устранения:

•	При выборе этой команды курсор находился на строке, которая не содержит исполняемую инструкцию.

Поместите курсор на строку с исполняемой инструкцией и повторите операцию. Описания, метки строк и комментарии не являются исполняемыми инструкциями, поэтому строки только с описаниями, метками строк и комментариями не могут задаваться в команде Следующая инструкция (Set Next Statement).

•	При выборе этой команды курсор находился на строке вне исполняемой в данное время процедуры.

Поместите курсор на строку внутри текущей исполняемой процедуры.


Требуется SHARE.EXE

Программа share.exe должна быть запущена перед запуском Visual Basic. Причины возникновения этой ошибки и способы ее устранения:

•	Программа share.exe не была запущена перед запуском Visual Basic.

Закройте приложение, запустите share.exe, а затем снова запустите приложение. Чтобы впоследствии не сталкиваться с этой проблемой, поместите вызов программы share.exe в файл autoexec.bat, чтобы программа share.exe автоматически запускалась при включении компьютера.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Уже имеется ссылка на указанную библиотеку или проект

Адресуемые библиотеки и проекты отображаются в окне диалога Добавление ссылок (Add References). Причины возникновения этой ошибки и способы ее устранения:

•	Была нажата кнопка Обзор в окне диалога Добавление ссылок, а затем выделена библиотека типов или проект, уже включенный в список Доступные ссылки в окне диалога Добавление ссылок.

Чтобы включить в текущий проект другой проект или библиотеку типов, откройте окно диалога Ссылки (References) и установите флажок слева от имени библиотеки типов или проекта.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая инструкция внутри блока Type

Только имена элементов, соответствующие им предложения As тип и комментарии могут находиться внутри блока инструкций Type...End Type. Причины возникновения этой ошибки и способы ее устранения:

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

Удалите все инструкции, кроме комментариев, имен элементов и предложений As тип.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая инструкция вне блока Type

Синтаксис описания переменных вне блока Type...End Type отличается от описания элементов определяемого пользователем типа. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка описать переменную вне блока Type...End Type или вне инструкции.

При описании переменной с помощью предложения As вне блока Type...End Type следует использовать одну из инструкций Dim, ReDim, Static, Public или Private. Например, первое из приведенных ниже описаний переменной MyVar является недопустимым, а второе и третье -- правильными:

MyVar As Double	' Недопустимое описание.

Dim MyVar As Double

Type AType

MyVar As Double	' Это описание правильное,

End Type	' т.к. находится внутри блока Type.

•	Инструкция End Type использована без соответствующей инструкции Type.

Удалите лишнюю инструкцию End Type или добавьте недостающую инструкцию Type впереди нее.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком сложная инструкция

Visual Basic не может проанализировать данную инструкцию. Причины возникновения этой ошибки и способы ее устранения:

•	Данная инструкция слишком сложна.

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

•	Данная инструкция или функция использует слишком много вложенных вызовов функций.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не допускаются инструкции и метки между Select Case и первой инструкцией Case

Только комментарии могут находиться между инструкцией Select Case и ее первым предложением Case. Причины возникновения этой ошибки и способы ее устранения:

•	Между инструкцией Select Case и ее первым предложением Case находится инструкция. Например:

Select Case SomeVar

' Комментарии допустимы.

Stop	' Даже инструкция Stop здесь недопустима.

Case SomeValue

. . .

End Select

Сразу после инструкции Select Case должно идти ее первое предложение Case. Если находящееся между ними выражение является комментарием, введите перед ним апостроф ('). В противном случае переместите выражение в нужное место или удалите его.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка синтаксиса

Visual Basic не может определить нужное действие. Причины возникновения этой ошибки и способы ее устранения:

•	Ключевое слово или аргумент написаны неправильно.

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

•	Используется неправильная пунктуация.

Например, при пропуске позиционного аргумента необходимо оставить вместо него запятую (,).

•	Процедура не определена.

Проверьте написание имени процедуры.

•	Была предпринята попытка использовать одновременно Optional и ParamArray в одном описании процедуры.

Аргумент ParamArray не может быть Optional. Удалите одно из этих двух ключевых слов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Это изменение может сделать модуль объекта несовместимым с заданным ранее совместимым компонентом ActiveX

Если совместимый компонент ActiveX уже существует как ранее распределенный исполняемый файл или библиотека динамической компоновки (DLL), нужно быть осторожным, чтобы не изменить его интерфейс. Причины возникновения этого предупреждения и способы его устранения:

•	Предпринята попытка изменить программу модуля объекта, которая уже представлена в виде исполняемого файла.

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

В Visual Basic имя совместимого компонента ActiveX выводится в окно диалога по команде Параметры проекта (Project Options) из меню Сервис (Tools).

Внимание!   Чтобы разрешить изменение, нажмите кнопку OK в окне диалога предупреждения об ошибке. Чтобы отменить изменение, нажмите кнопку Отмена.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Поиск в указанном диапазоне завершен.

При нажатии кнопок Найти далее (Find Next) и Заменить (Replace) в окне диалога Замена (Replace) полное число замен не указывается. Причины и результаты возникновения данного состояния:

•	При выполнении поиска и замены возможно указание охватываемой поиском области — выделенный фрагмент, процедура, модуль или проект..

Если область поиска задана, она используется по умолчанию. Если область поиска не указана, то по умолчанию используется текущий модуль. Для изменения области поиска выберите другой параметр в окне диалога Замена (Replace).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Поиск в указанном диапазоне завершен. Выполнено одно изменение.

При нажатии кнопки Заменить все (Replace All) в окне диалога Замена (Replace) данное сообщение указывает полное число выполненных замен. Причины и результаты возникновения данного состояния:

•	При выполнении поиска и замены был обнаружен только один экземпляр указанного текста и выполнена замена. Возможно указание охватываемой поиском области — выделенный фрагмент, процедура,, модуль или проект..

Если область поиска задана, она используется по умолчанию.  Если область поиска не указана, в качестве стандартной области используется текущий модуль. Для изменения области поиска выберите другой параметр в окне диалога Замена (Replace).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Был выполнен поиск и сделаны замены в указанном фрагменте

При нажатии кнопки Заменить все (Replace All) в окне диалога Замена (Replace) данное сообщение указывает полное число выполненных замен. Причины и результаты возникновения данного состояния:

•	При выполнении поиска и замены возможно указание охватываемой поиском области — выделенный фрагмент, процедура,, модуль или проект..

Если область поиска задана, она используется по умолчанию. Если область поиска не указана, по умолчанию используется текущий модуль. Для изменения области поиска выберите другой параметр в окне диалога Замена (Replace).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Файл .VBP данного проекта содержит недопустимый или поврежденный идентификатор библиотеки ссылок

При сохранении проекта, для которого из диалогового окна Ссылки (References) была выбрана ссылка, в файл проекта .vbp вносится запись (в предыдущих версиях Visual Basic файл .mak). Например, запись для объекта доступа к данным выглядит следующим образом:

Reference=*\G{00025E01-0000-0000-C000-000000000046}#0.0#0#C:\WINDOWS\SYSTEM\DAO2516.DLL#Microsoft

DAO 2.5 Object Library

Эта ошибка имеет место, когда была изменена или испорчена такая ссылка. Причины возникновения этой ошибки и способы ее устранения:

•	Неверная ссылка в файле .vbp.

Удалите неверную строку из файла .vbp и в диалоговом окне Ссылки (References) из меню Сервис проверьте соответствующую библиотеку объектов.. Затем сохраните проект. В файл .vbp будет записана правильная информация.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Компонент не вызывает никаких событий

Процедура события должна сочетаться с событием, которое может быть вызвано объектом. Причины возникновения этой ошибки и способы ее устранения:

•	Процедура события была написана для объекта, который их не вызывает.

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

•	Предпринята попытка использовать WithEvents в классе, который не вызывает событий.

Нельзя использовать WithEvents в классе, который не вызывает события.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком много аргументов

Процедура может содержать не более 60 аргументов.. Причины возникновения этой ошибки и способы ее устранения:

•	Указано более 60 аргументов.

Если необходимо указать большее число аргументов, опишите тип, определяемый пользователем, и включите в него несколько аргументов разных типов или используйте параметр ParamArray в качестве последнего аргумента и передайте ему несколько значений. Кроме того, несколько аргументов могут быть переданы в виде массива..

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком много размерностей

Размерность массива не может превышать 60. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка описания массива, размерность которого превышает 60.

Уменьшите размерность массива.

•	Размерность массива является допустимой, однако недостаточно памяти для фактического создания  массива.

Увеличьте объем свободной памяти или уменьшите размерность массива. Если данный массив является массивом элементов типа Variant или массивом, содержащимся внутри переменной типа Variant, возможно удастся создать массив той же размерности, изменив тип данных его элементов. Например, если он содержит только целые значения, опишите его как массив типа Integer, и он займет меньше места в памяти, чем эквивалентный массив типа Variant.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком много строк продолжения

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

•	В программе имеется более 10 последовательных строк, объединенных с помощью символов продолжения строки.

В программе имеется более 10 последовательных строк, объединенных с помощью символов продолжения строки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком много локальных динамически загружаемых переменных

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

•	Общее количество памяти, требуемое локальными динамически загружаемыми переменными данной процедуры и генерируемыми компилятором временными переменными, превышает 32Kбайта.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком много переменных уровня модуля

Переменные уровня модуля - это переменные, описанные в разделе описаний модуля до процедур модуля. Причины возникновения этой ошибки и способы ее устранения:

•	Общее количество памяти, требуемое всеми переменными модуля в данном модуле, превышает 64Kбайта.

Это является предельным объемом, который может храниться в этом модуле. В случае необходимости некоторые переменные можно описать как общие (Public) в другом модуле, или, если переменные уровня модуля используются только в одной процедуре, описать их в самой процедуре. Если переменные были описаны на уровне модуля, потому что необходимо сохранять их значения между процедурами, то можно описать их как Static в той процедуре, где на них есть ссылка.

Примечание.   Количество свободной памяти зависит от операционной системы.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Символ описания типа данных не соответствует описываемому типу данных

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

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

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не допускается символ описания типа данных

Использование символов описания типа допускается в Visual Basic, но некоторые типы данных (включая Byte, Boolean, Date, Object и Variant) не имеют соответствующих им символов описания типа. Причины возникновения этой ошибки и способы ее устранения:

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

Удалите символ описания типа или предложение As.

•	Попытка использовать символ описания типа при ссылке на переменную, которая была описана неявно без символа описания типа:

MyVar = 20	' Неявное описание.

MyVar% = 25	' Вызывает ошибку.

Удалите символ описания типа или переопределите исходную переменную.

Примечание. Если явное описание переменной содержит символ описания типа, включение этого символа в дальнейших ссылках является необязательным. Например:

Dim MyStr$

MyStr = "Поскольку описание явное, символ $ не является обязательным."

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


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

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

•	На переменную, которая была неявно описана с символом описания типа, была выполнена ссылка без использования символа описания типа.  Например:

MyStr$ = "Неявное описание"

MyStr = "Попытка выполнить ссылку на MyStr$ приводит к ошибке" _

 & "при обращении к ней с помощью MyStr."

Используйте явное описание или добавьте символ описания типа в последующие ссылки.

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

Dim MyStr$

MyStr = "Поскольку описание явное, символ $ не является обязательным."

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Несоответствие типа: требовался массив или определяемый пользователем тип

Тип аргумента или параметра содержит указание на то, является ли он массивом или типом, определяемым пользователем.. Причины возникновения этой ошибки и способы ее устранения:

•	Аргумент задает отдельный элемент массива или определяемого пользователем типа, простую переменную, явно заданную константу (литерал) или константу.. Однако он передается в качестве параметра, который предполагает наличие массива или определяемого пользователем типа.

Измените аргумент или определение параметра.

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

Передайте массив ожидаемого типа или измените описание параметра.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Чтение диска невозможно

Общий сбой чтения диска. Причины возникновения этой ошибки и способы ее устранения:

•	Неправильно закрыта задвижка дисковода.

Если диск является съемным, проверьте задвижку его дисковода, и при необходимости закройте ее.

•	Диск положен в дисковод не на нужную сторону.

Переверните диск.

•	Возможно, диск неправильно отформатирован.

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

•	Возникли проблемы в сети.

Попробуйте перезапустить сеть.

•	Диск определенной плотности записи помещен в дисковод, который не может его прочитать.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Запись на диск невозможна

Общий сбой записи на диск. Причины возникновения этой ошибки и способы ее устранения:

•	Неправильно закрыта задвижка дисковода.

Если диск является съемным, проверьте задвижку его дисковода, и при необходимости закройте ее.

•	Диск положен в дисковод не на нужную сторону.

Переверните диск.

•	Возможно, диск неправильно отформатирован.

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

•	Возникли проблемы в сети.

Попробуйте перезапустить сеть.

•	Диск определенной плотности записи помещен в дисковод, который не может записать на него данные.

Воспользуйтесь другим дисководом, или скопируйте требуемый материал на диск, который может быть записан с помощью этого дисковода.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Непредвиденная ошибка; обратитесь в службу технической поддержки Microsoft

Данная ситуация может быть как серьезной, так и нет. Причины возникновения этой ошибки и способы ее устранения:

•	Ошибка произошла в главном приложении или в Visual Basic.

Не стоит полагать, что эта ошибка очень серьезна. Однако, необходимо отметить рая ошибок и сообщить о них в службу технической поддержки Microsoft.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Непарные скобки в образце поиска

Открывающей скобке должна соответствовать закрывающая. Причины возникновения этой ошибки и способы ее устранения:

•	В строке поиска была использована открывающая скобка, но не была добавлена закрывающая.

Поместите в соответствующее место закрывающую скобку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неизвестный язык проекта

Указанная для программы национальная настройка загружаемого проекта в данное время не поддерживается этим приложением. Причины возникновения этой ошибки и способы ее устранения:

•	Проект был создан в системе, которая поддерживает эту национальную настройку, но затем проект был перенесен в систему, в которой эта национальная настройка не распознается. Например на текущей машине, возможно, версия файла ole2nls.dll не распознает национальную настройку программы.

Установите соответствующую библиотеку динамической компоновки (DLL) в этой системе.

•	Не найдена правильная библиотека объектов проекта.

Убедитесь, что доступна правильная библиотека объектов, например, что путь содержит каталог этой библиотеки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Определяемый пользователем тип не может передаваться по значению ByVal

Типы данных, определяемые пользователем, могут передаваться только по ссылке (по умолчанию), а не по значению.. Возможно, эта ошибка не возникает до выполнения вызова. Причины возникновения этой ошибки и способы ее устранения:

•	Ключевое слово ByVal было использовано при определении параметра, представляющего тип, определяемый пользователем.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Определяемые пользователем типы и строки фиксированной длины не допускается использовать как типы общих компонентов модуля
Определяемые пользователем типы и строки фиксированной длины не допускается использовать как типы общих компонентов модуля объекта; личные модули объектов не допускается использовать как типы общих компонентов общего модуля объекта.

Невозможно создание общих (Public) компонентов личных (Private) типов данных, определяемых пользователем.. Причины возникновения этой ошибки и способы ее устранения:

•	В модуле объекта описана общая переменная (типа Public) с именем личного типа (Private), определяемого пользователем.

Опишите переменную типа Private и перенесите инструкцию Type...End Type, описывающую определяемый пользователем тип, в стандартный модуль или удалите все эти описания.

•	В модуле объекта произведена попытка определить процедуру типа Public  с возвращаемым типом или с параметром определяемого пользователем типа.

Опишите процедуру типа (Private).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не описан определяемый пользователем тип

В Visual Basic имеется возможность создавать собственные типы данных, но они сначала должны быть определены в инструкции Type...End Type или в соответствующей правильно зарегистрированной библиотеке объектов или библиотеке типов.. Причины возникновения этой ошибки и способы ее устранения:

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

Воспользуйтесь в модуле инструкцией Type для определения нового типа данных. Если предпринимается попытка создать ссылку на класс, этот класс должен быть доступен в проекте. Если в программе используется ссылка на класс, необходимо иметь в проекте модуль класса с указанным именем. Проверьте написание имени типа или объекта.

•	Используемый тип находится в другом модуле, но он был описан как личный (Private).

поместите определение типа в стандартный модуль, в котором он может быть общим (Public).

•	Этот тип является допустимым типом, но библиотека объектов или библиотека типов, в котором он определен, не зарегистрирована в Visual Basic.

Выведите на экран окно диалога Ссылки (References), а затем выберите соответствующую библиотеку объектов или типов.  Например, если в этом окне диалога Ссылки (References) не было отмечено Data Access Object, такие типы как Database, Recordset и TableDef не распознаются, и ссылки на них в программе приводят к ошибке.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не допускается определяемый пользователем тип, не имеющий компонентов

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

•	В определении Type...End Type был указан пустой определяемый пользователем тип.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Переменная не определена

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

•	Задана инструкция Option Explicit, требующая явное описание переменных, а используется неописанная переменная.

Явно опишите переменную или измените ее написание для соответствия с предполагаемой переменной.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Переменная в данном контексте еще не создана

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

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

Перейдите в программу для компиляции новой инструкции.

•	Попытка вывести на экран значение локальной переменной, только что введенной в процедуру из дальней цепочки вызовов, в которую был выполнен переход с помощью диалогового окна Вызовы (Calls).

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Требуется переменная — невозможно присвоение значения данному выражению

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

•	Попытка использовать числовое выражение в качестве аргумента функции Len.

Функция Len не допускает числовые выражения, числа в явном представлении (литералы) или двоичные числовые выражения, а допускает строковые или числовые переменные, строковые выражения или переменные с типом данных, определяемых пользователем..

•	Используется вызов функции или выражения в качестве аргумента Input #, Let, Get или Put. Например, возможно использовать аргумент, который должен быть ссылкой на переменную массива, а вместо этого является вызовом функции с тем же именем.

Input #, Let, Get и Put не допускают вызовов функции в качестве аргумента.

•	Попытка присвоить значение идентификатору, описанному ранее как константа..

Задайте для идентификатора другое имя.

•	Попытка использовать не переменную в качестве счетчика цикла For...Next.

Используйте переменную в качестве счетчика.

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

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

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

Воспользуйтесь другим именем переменной или опишите его явным образом.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Предупреждение: выбор определенного языка нарушает универсальность программы

Не все языковые настройки допускают перенос в другие системы. Причины возникновения этого предупреждения и способы его устранения:

•	В программе используются специальные языковые настройки.

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

Если параметры Панели управления данной машины не совпадают с параметрами машины, на которой эта программа была написана, то строки, интерпретируемые главным приложением (например, программа, зависящая от разделителя целой и дробной частей чисел) работать не будут. Таким образом, не следует использовать специальные языковые параметры, если не предполагается отправка программы другим пользователям. Если такая отправка программы предполагается, задайте нужную национальную настройку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Wend без While

Каждой инструкции Wend должна предшествовать соответствующая инструкция While. Причины возникновения этой ошибки и способы ее устранения:

•	Использована инструкция Wend без предшествующей инструкции While.

Проверьте, не вложен ли незавершенный цикл внутрь цикла While...Wend, который вызывает ошибку.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


While без Wend

Инструкция While используется без соответствующей инструкции Wend. Причины возникновения этой ошибки и способы ее устранения:

•	Конструкция While...Wend была открыта, но не завершена.

Проверьте наличие незавершенной структуры While...Wend внутри внешней структуры While...Wend.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Объект инструкции должен иметь определяемый пользователем тип, тип Object или Variant

Блок With...End With не может использоваться со всеми типами переменных. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка использовать в блоке With переменную, которая не имеет тип Object, тип, определяемый пользователем или тип Variant, содержащий объект.

Убедитесь, что имя объекта, определяемый пользователем тип или переменная типа Variant задается без ошибок.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неверное число размерностей

Число индексов в ссылке на массив должно соответствовать числу размерностей, заданного при описанииn массива. Причины возникновения этой ошибки и способы ее устранения:

•	Ссылка на массив с другим числом размерностей, чем он реально содержит. Например, ссылки на массив типа X(2,4) (двумерный массив), когда он был определен как Dim X(5) (одномерный массив), приводит к возникновению данной ошибки.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


После этих изменений потребуется перезапуск - выполнить?

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

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

При выборе значения Да выполнение прекращается и возможно редактирование программы. Выбор значения Нет позволяет продолжить выполнение программы с того места, в котором оно было приостановлено.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Блок #If должен оканчиваться на #End If

Блок #If является условной директивой компиляции. Причины возникновения этой ошибки и способы ее устранения:

•	Было определено, что блок #If не заканчивается на #End If.

В необходимую позицию добавьте команду #End If.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Обязательный аргумент (Ошибка 449)

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

•	Неправильное число аргументов.

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

•	Опущенный аргумент не является необязательным.

Допускается пропуск аргумента в вызове процедуры, определяемой пользователем, только если он был описан при описании процедуры со словом Optional. Предоставьте этот аргумент для вызова процедуры или опишите его с параметром Optional.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неверное соглашение о вызовах библиотеки (Ошибка 49)

Аргументы, передаваемые подпрограмме библиотеки динамической компоновки (DLL), должны точно соответствовать аргументам этой подпрограммы.  Соглашение о вызовах включает число, тип и порядок аргументов.  Причины возникновения этой ошибки и способы ее устранения:

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

Убедитесь в том, что все типы аргументов соответствуют типам, указанным при описании вызываемой подпрограммы.

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

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

•	Программа вызывает подпрограмму из библиотеки динамической компоновки, но не использует соглашение о вызовах StdCall.

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

•	Инструкция Declare содержит ключевое слово CDecl.

Ключевое слово CDecl применяется только для Macintosh.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неверный режим файла (Ошибка 54)

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

•	В инструкции Put или Get задается файл последовательного доступа.

Инструкции Put и Get могут ссылаться только на файлы, открытые с произвольным (Random) или двоичным (Binary) доступом.

•	В инструкции Print # задается файл, открытый с режимом доступа, отличным от Output или Append.

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

•	В инструкции Input # задается файл, открытый с доступом, отличным от Input.

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

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

Измените режим чтения/записи файла или не предпринимайте попытку записи в него.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неверное имя или номер файла (Ошибка 52)

Возникла ошибка при попытке доступа к указанному файлу.  Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция содержит ссылку по имени или номеру файла на файл, который:

•	Не был указан в инструкции Open, или был указан, но после этого закрыт.

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

•	Выход за пределы допустимого диапазона номеров файлов (1 – 511).

Если программа автоматически создает номера файлов, убедитесь, что эти номера попадают в допустимый диапазон.

•	Недопустимый номер или имя.

Имена файлов должны следовать соглашениям об именах операционной системы, а также соглашениям об именах файлов Basic.  В Microsoft Windows используются следующие соглашениям об именах файлов и каталогов:

•	Имя файла или каталога может состоять из двух частей: имени и необязательного расширения.  Части разделяются точкой, например, myfile.new.

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

•	Имя должно начинаться с буквы или числа.  Оно может содержать любые символы верхнего и нижнего регистра (имена файлов не зависят от регистра символов), за следующими исключениями: кавычка ("), апостроф ('), косая черта (/), обратная косая черта (\), двоеточие (:) и вертикальная черта (|).

•	Имя не должно содержать ни одного пробела.

•	Следующие имена являются зарезервированными, и не допускается их использование в качестве имен файлов или каталогов:  CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN и NUL.  Например, если в инструкции Open указать файл PRN, то в качестве адресата в инструкциях Print # и Write # с номером из инструкции Open, будет использоваться текущий принтер.

•	В Microsoft Windows допустимыми являются следующие имена файлов:

LETTER.DOC

My Memo.Txt

BUDGET.92

12345678.901

Second Try.Rpt

•	а Macintosh имя файла может иметь любой символ, кроме двоеточия (:), и может содержать пробелы.  В именах файлов не допускается использование символа Null (Chr(0)).

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неверная длина записи (Ошибка 59)

Длина переменной-записи в инструкции Get или Put должна равняться длине, указанной в соответствующей инструкции Open.  Причины возникновения этой ошибки и способы ее устранения:

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

Убедитесь, что сумма размеров переменных фиксированной длины в определяемом пользователем типе, определяющем тип переменной-записи, совпадает со значением, установленным в предложении Len инструкции Open.  В следующем примере подразумевается, что RecVar является переменной соответствующего типа; возможно использование функции Len для задания длины, например:

Open MyFile As #1 Len = Len(RecVar)

•	Переменная в инструкции Put представляет собой (или включает) строку переменной длины.

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

•	Переменная в инструкции Put имеет (или включает) тип Variant.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Неверный номер записи (Ошибка 63)

Возникла ошибка при попытке доступа к файлу.  Причина возникновения этой ошибки и способ ее устранения:

•	Номер записи в инструкции Put или Get меньше или равен нулю.

Проверьте вычисления, применяемые для выработки номера записи.  Убедитесь, что имена переменных, содержащих номер записи, или используемых в вычислениях номера, заданы без ошибок. Ошибочное имя переменной описывается неявно и инициализируется с нулевым значением, если только в модуль не помещена должным образом инструкция Option Explicit.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно создание требуемого временного файла (Ошибка 322)

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

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

Освободите место на этом диске или укажите в переменной среды TEMP другой диск.

•	В переменной среды TEMP диск или каталог указан неверно; или указан доступный только для чтения диск или каталог.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно выполнение требуемой операции (Ошибка 17)

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

•	Требуемая операция приводит к нарушению текущего состояния проекта.  Например эта ошибка возникает при использовании окна диалога Ссылки для добавления ссылки на новый проект или библиотеку объектов, когда программа находится в режиме прерывания.

Остановите выполнение текущей программы и повторите эту операцию.

•	Была предпринята попытка из программы изменить код, выполняемый в данный момент.  Например, программа может пытаться считать код из дискового файла в текущий выполняемый модуль.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно переименование с другим именем диска (Ошибка 74)

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

•	Попытка переместить файл на другой диск с помощью инструкции Name.

Воспользуйтесь инструкцией FileCopy для записи файла на другой диск, а затем удалите старый файл с помощью инструкции Kill.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно сохранить файл в каталог TEMP (Ошибка 735)

Работа с компонентами часто требует хранения временной информации на диске. Причины возникновения этой ошибки и способы ее устранения:

•	Компонент не может найти каталог с именем TEMP.

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

•	Недостаточно места для хранения информации на диске (или в разделе диска), содержащем каталог TEMP.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Класс не поддерживает программирование объектов (Ошибка 430)

Не все объекты предоставляют интерфейс для программирования объектов.  Причина возникновения этой ошибки и способ ее устранения:

•	Класс, указанный при вызове функции GetObject или CreateObject, был найден, но для него не было предоставлено интерфейса программирования.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка блокировки программного ресурса (Ошибка 455)

Для получения доступа к программному ресурсу необходима его блокировка.  Причина возникновения этой ошибки и способ ее устранения:

•	Выполнен вызов процедуры из программного ресурса.  Программный ресурс был обнаружен, но возникла ошибка при попытке блокировать этот ресурс.

Проверьте ошибку, возвращаемую HLock (например, "Illegal on empty handle" или "Illegal on free block").  Данная ошибка возникает только на Macintosh.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Программный ресурс не найден (Ошибка 454)

Данная ошибка возникает только на Macintosh.  Причина возникновения этой ошибки и способ ее устранения:

•	Был выполнен вызов процедуры из программного ресурса, но не удается обнаружить этот программный ресурс.

Убедитесь, что этот ресурс доступен и для него задана правильная ссылка.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Потеряна связь с библиотекой типов или объектов для удаленного доступа (Ошибка 442)

При удаленном доступе (т.е. при доступе к объекту, который  является частью другого процесса или выполняется на другом компьютере) нарушилась связь с библиотекой, содержащей информацию об объекте. Причина возникновения этой ошибки и способ ее устранения:

•	Потеряна связь с библиотекой объектов или библиотекой типов удаленного процесса.

Для возобновления связи выполните следующие действия:

1	Перезапустите объект Application.

2	В диалоговом окне ошибок, в котором был вызван данный раздел справки, нажмите кнопку OK. При этом появится диалоговое окно Ссылки.

3	На экране отображается потерянная ссылка и слово MISSING слева от нее.

4	Удалите потерянную ссылку.

5	Установите флажок для объекта, запущенного на шаге 1, в диалоговом окне Ссылки.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка устройства ввода/вывода (Ошибка 57)

Во внешних устройствах иногда возникают непредвиденные ошибки.  Причина возникновения этой ошибки и способ ее устранения:

•	Произошла ошибка ввода или вывода при использовании в программе устройства типа принтера или дисковода.

Убедитесь в правильной работе устройства и повторите операцию.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Устройство недоступно (Ошибка 68)

Причины возникновения этой ошибки и способы ее устранения:

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

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

•	Возможно было прервано подключение к сети.

Восстановите подключение к сети и повторите операцию.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Переполнение диска (Ошибка 61)

Причины возникновения этой ошибки и способы ее устранения:

•	Не хватает места на диске для завершения операции Print #, Write # или Close.

Перенесите на другой диск или удалите некоторые файлы.

•	Не хватает места на диске для создания требуемых файлов.

Перенесите на другой диск или удалите некоторые файлы.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Диск не готов (Ошибка 71)

Причины возникновения этой ошибки и способы ее устранения:

•	Отсутствует диск в указанном дисководе.

Вставьте диск в дисковод и повторите операцию.

•	Открыта створка указанного дисковода.

Закройте створку и повторите операцию.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Деление на 0 (Ошибка 11)

Деление на 0 невозможно. Причина возникновения этой ошибки и способ ее устранения:

•	Значение выражения, используемое в качестве делителя, равно 0.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка при загрузке библиотеки (Ошибка 48)

Библиотека динамической компоновки (DLL) -- это библиотека, указанная в предложении Lib инструкции Declare.  Причины возникновения этой ошибки и способы ее устранения:

•	Файл не является исполняемой библиотекой динамической компоновки.

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

•	Файл не является библиотекой динамической компоновки Microsoft Windows.

Достаньте библиотеку динамической компоновки Microsoft Windows, эквивалентную данному файлу.

•	Файл является старой библиотекой динамической компоновки Microsoft Windows, несовместимой с защищенным режимом Microsoft Windows.

Достаньте обновленную версию библиотеки динамической компоновки.

•	Библиотека динамической компоновки ссылается на другую библиотеку динамической компоновки, которая отсутствует.

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

•	Библиотека динамической компоновки или одна из адресуемых библиотек не находится в каталоге, указанном в пути.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Файл уже существует (Ошибка 58)

Причины возникновения этой ошибки и способы ее устранения:

•	Во время выполнения эта ошибка возникает в том случае, когда новое имя файла (например имя, указанное в инструкции Name) совпадает с именем имеющегося файла.

Задайте новое имя файла в инструкции Name или удалите старый файл перед указанием этого имени в инструкции Name.

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

Воспользуйтесь другим именем для проекта, если не требуется замена старого проекта.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Файл уже открыт (Ошибка 55)

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

•	Была выполнена инструкция Open для вывода в режиме последовательного доступа в файл, который уже открыт.

Необходимо закрыть файл, открытый с одним из типов последовательного доступа, перед открытием его для другого типа доступа. Например необходимо закрыть файл, открытый для ввода (Input), перед открытием его для вывода (Output).

•	Инструкция (например Kill, SetAttr или Name) ссылается на открытый файл.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно найти указанный файл

Файл не найден в указанном месте. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция (например Kill, Name или Open) ссылается на несуществующий файл.

Проверьте, правильно ли указаны имя и путь файла.

•	Была предпринята попытка вызова процедуры из библиотеки динамической компоновки (DLL), однако имя файла библиотеки, указанное в предложении Lib инструкции Declare, не найдено.

Проверьте, правильно ли указаны имя и путь файла.

•	Данная ошибка происходит при работе в среде разработчика, если предпринята попытка открыть несуществующий проект или загрузить несуществующий текстовый файл.

Проверьте, правильно ли указаны имя и путь проекта или файла.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Цикл For не инициализирован (Ошибка 92)

Счетчики циклов For должны быть инициализированы. Причина возникновения этой ошибки и способ ее устранения:

•	Выполнен переход внутрь цикла For...Next.

Удалите переход внутрь цикла.  Не рекомендуется размещение меток внутри цикла For...Next.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ввод за пределами конца файла (Ошибка 62)

Невозможно чтение файла после метки конца файла. Причины возникновения этой ошибки и способы ее устранения:

•	Инструкция Input # (или Line Input #) выполняет чтение из пустого файла или файла, все данные которого уже были прочитаны.

Непосредственно перед инструкцией Input # поместите функцию EOF для определения конца файла.

•	Функция EOF использована для файла, открытого в режиме Binary.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Внутренняя ошибка (Ошибка 51)

Убедитесь, что эта ошибка не была создана с помощью инструкции Error или метода Raise. Причина возникновения этой ошибки и способ ее устранения:

•	Произошел внутренний сбой в Visual Basic.

Если данное сообщение об ошибке не было вызвано применением инструкции Error или метода Raise, обратитесь в службу поддержки Microsoft и сообщите об условиях, при которых появилось это сообщение.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый формат буфера обмена (Ошибка 460)

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

•	Была предпринята попытка поместить данные из компонента в буфер обмена, однако формат данных несовместим с форматом, допустимым для буфера обмена.

Чтобы определить, можно ли переместить данные из компонента в буфер обмена, обратитесь к документации по этому компоненту.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый формат файла (Ошибка 321)

Файлы на диске часто содержат данные в собственных форматах. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка загрузить файл в компонент, однако формат данных в файле несовместим с компонентом.

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

•	Была попытка сохранить данные из компонента в файле, однако формат этих данных несовместим с форматом файла.

Чтобы определить, поддерживает ли компонент преобразование одного формата в другой, обратитесь к документации по этому компоненту.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый порядковый номер (Ошибка 452)

При вызове библиотеки динамической компновки (DLL) указан номер процедуры с помощью синтаксиса #num, а не имя.. Причины возникновения этой ошибки и способы ее устранения:

•	Неудачная попытка преобразовать выражение num в порядковый номер.

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

•	Заданное выражение num не указывает на функцию из библиотеки динамической компоновки.

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

•	Библиотека типов содержит недопустимое описание, приводя к внутреннему использованию недопустимого порядкового номера.

Внесите в программу комментарии, выделяющие вызов процедуры, который создает эту проблему. Напишите инструкцию Declare для этой процедуры и сообщите о проблеме изготовителю библиотеки типов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимая строка шаблона (Ошибка 93)

При поиске строки в операторе Like указана недопустимая строка шаблона. Причина возникновения этой ошибки и способ ее устранения:

•	Обычным примером недопустимого списка символов в строковом выражении является [a-b , где правая скобка отсутствует.

Просмотрите допустимые символы для списков.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый вызов или аргумент процедуры (Ошибка 5)

Некоторая часть вызова не может быть завершена. Причины возникновения этой ошибки и способы ее устранения:

•	Вероятно, значение аргумента выходит за пределы допустимого диапазона.  Например для функции Sin допускаются значения только в пределах определенного диапазона. Положительные аргументы, меньшие 2 147 483 648, допускаются, а значение 2 147 483 648 приводит к этой ошибке.

Проверьте допустимые диапазоны значений.

•	Эта ошибка может также возникать при попытке вызова процедуры, которая не допускается для данной платформы.  Например, некоторые процедуры допустимы только в Microsoft Windows или только на Macintosh и т. д.

Обратитесь к сведениям о платформе для выполнения данной процедуры.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый индекс массива свойств (Ошибка 381)

Значение свойства может представлять собой массив значений. Причина возникновения этой ошибки и способ ее устранения:

•	Возможно нижняя граница индексов массива свойств компонента равна 0, а верхняя граница равна числу элементов массива минус 1. Или наоборот, нижняя граница равна 1, а верхняя граница равна числу элементов массива.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое использование Null (Ошибка 94)

Null является подтипом типа данных Variant, указывающим, что элемент данных не содержит допустимых значений. Причина возникновения этой ошибки и способ ее устранения:

•	Попытка получить переменную типа Variant или выражение со значением Null. Например:

MyVar = Null

For Count = 1 To MyVar

. . .

Next Count

Убедитесь, что переменная содержит допустимое значение.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Именованный аргумент не найден (Ошибка 448)

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

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

Проверьте написание имени аргумента.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Требуется индекс массива свойств (Ошибка 385)

Данное значение свойства представляет собой массив значений, а не одно значение. Причина возникновения этой ошибки и способ ее устранения:

•	Попытка доступа к массиву свойств, для которого не указан индекс.

Выясните в документации по этому компоненту, какой диапазон индексов соответствует данному массиву. Укажите соответствующий индекс в инструкции, содержащей обращение к массиву свойств.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Объект не поддерживает текущую национальную настройку (Ошибка 447)

Некоторые объекты поддерживают не все национальные настройки. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка доступа к объекту, который не поддерживает национальные настройки текущего проекта.  Например, если для текущего проекта установлены русские национальные настройки, объект, попытка доступа к которому была предпринята, должен поддерживать эти национальные настройки.

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

•	Возможно, при реализации поддержки национальных настроек данным объектом используется устаревшая библиотека динамической компоновки(DLL), например, OLE2NLS.DLL.

Достаньте более свежую версию этой библиотеки, которая поддерживает национальные настройки текущего проекта.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Объект не поддерживает именованные аргументы (Ошибка 446)

Не все объекты поддерживают именованные аргументы. Причина возникновения этой ошибки и способ ее устранения:

•	Была предпринята попытка доступа к объекту, методы которого не поддерживают именованные аргументы.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Объект не поддерживает эту команду (Ошибка 445)

Некоторые объекты поддерживают не все команды. Причина возникновения этой ошибки и способ ее устранения:

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

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Объект не является семейством (Ошибка 451)

Некоторые свойства, методы и операции применимы только к объектам типа Collection (семейство). Причина возникновения этой ошибки и способ ее устранения:

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

Проверьте написание имени объекта и свойства и убедитесь, что данный объект является объектом типа Collection. Кроме того, убедитесь, что метод Add, который использовался для добавления объекта в семейство, имеет правильный синтаксис и все его идентификаторы указаны правильно.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Требуется объект (Ошибка 424)

При ссылке на свойства и методы объекта часто требуется явный указатель объекта. Причины возникновения этой ошибки и способы ее устранения:

•	При ссылке на свойство или метод объекта использован недопустимый указатель объекта.

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

•	Указатель объекта имеется, однако не воспринимается как объект.

Проверьте правильность написания указателя объекта, а также убедитесь, что данный объект доступен для той части программы, которая на него ссылается.  В случае объектов типа Collection проверьте, что все вызовы метода Add имеют правильный синтаксис и все его элементы указаны правильно.

•	Указатель объекта указан правильно, однако некоторая другая часть инструкции вызова содержит ошибку.

Данная ошибка может быть вызвана тем, что в качестве аргумента команды File Open главного приложения указан неверный путь. Проверьте аргументы.

•	Для присвоения ссылки на объект не использовалась инструкция Set.

Отсутствие инструкции Set при присвоении значения, возвращаемого функцией CreateObject, переменной типа Variant не всегда приводит к возникновению ошибки.  В следующем примере создается неявный экземпляр Microsoft Excel и его стандартное свойство (строка "Microsoft Excel") возвращается и присваивается переменной RetVal типа Variant.  Последующая попытка использовать переменную RetVal в качестве ссылки на объект приводит к возникновению ошибки:

Dim RetVal	' Переменная

' RetVal неявно описана как Variant (Type 8).

' Присваивает стандартное свойство переменной RetVal.

RetVal = CreateObject("Excel.Application")

RetVal.Visible = True	' Ошибка!

Для присвоения ссылки на объект используйте инструкцию Set.

•	Иногда эта ошибка возникает, если предпринята попытка совершить недопустимое действие с допустимым объектом, например при попытке присвоить значение свойству, доступному только для чтения.

Чтобы проверить, допустимо ли данное действие с объектом, обратитесь к документации по объекту.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не задана объектная переменная или переменная блока With (Ошибка 91)

Создание объектной переменнойсостоит из двух этапов.  Сначала необходимо описать объектную переменную, а затем присвоить ей ссылку на допустимый объект с помощью инструкции Set.  Аналогично, блок With...End With должен быть инициализирован путем выполнения точки входа инструкции With. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка использовать объектную переменную до присвоения ей ссылки на допустимый объект.

Присвойте объектной переменной первую или новую ссылку на допустимый объект.  Например, если в следующем примере будет опущена инструкция Set, при ссылке на объект MyObject возникнет ошибка:

Dim MyObject As Object	' Создает объектную переменную.

Set MyObject = Sheets(1)	' Присваивает ей  допустимую ссылку.

MyCount = MyObject.Count	' Присваивает значение свойства

' Count переменной MyCount.

•	Была предпринята попытка использовать объектную переменную, указывающую на Nothing.

Set MyObject = Nothing	' Освобождает объект.

MyCount = MyObject.Count	' Ссылается на освобожденный объект.

Присвойте объектной переменной новую ссылку на допустимый объект, например, с помощью новой инструкции Set.

•	Адресуемый объект является допустимым, однако он не был установлен, так как библиотека объектов, в которой он описан, не была выбрана в окне диалога Ссылки.

Выделите данную библиотеку объектов в окне диалога Добавление ссылок.

•	Метка, на которую ссылается инструкция GoTo, находится внутри блока With.

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

•	При выборе команды Следующая инструкция была указана строка, находящаяся внутри блока With.

Блок With должен быть инициализирован путем выполнения инструкции With.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка программирования объектов (Ошибка 440)

Ошибка такого типа может возникнуть при доступе к программируемым объектам. Причина возникновения этой ошибки и способ ее устранения:

•	Возникла ошибка при выполнении метода или при определении (или задании) свойства объектной переменной. Сообщение об этой ошибке выдается приложением, которое использовалось для создания объекта.

Проверьте свойства объекта Err, чтобы определить источник и природу данной ошибки.  Кроме того, попробуйте использовать инструкцию On Error Resume Next непосредственно перед инструкцией, осуществляющей доступ к программируемому объекту, а затем проверьте наличие ошибок сразу после этой инструкции.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Объект не поддерживает это свойство или метод (Ошибка 438)

Некоторые объекты поддерживают не все свойства и методы. Причины возникновения этой ошибки и способы ее устранения:

•	Указан метод или свойство, неприменимое к данному программируемому объекту.

Обратитесь к документации по объекту для получения дополнительных сведений и проверьте правильность написания свойств и методов.

•	Для компоновки на стадии выполнения указана процедура Friend.

Имя процедуры Friend должно быть известно во время компиляции. Оно не может использоваться при компоновке во время выполнения.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не хватает памяти (Ошибка 7)

Запрошено больше памяти, чем имеется в наличии, или нарушены границы 64-килобайтного сегмента. Причины возникновения этой ошибки и способы ее устранения:

•	Открыто слишком много приложений, документов или исходных файлов.

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

•	Модуль или процедура слишком велика.

Разбейте слишком большие модули или процедуры на меньшие.  Это не приведет к экономии памяти, однако прекратит нарушение границ 64-килобайтных сегментов.

•	Microsoft Windows работает в стандартном режиме.

Повторно запустите Microsoft Windows в расширенном режиме.

•	Microsoft Windows работает в расширенном режиме, однако испытывает нехватку виртуальной памяти.

Увеличьте виртуальную память, освободив место на диске, или по крайней мере проверьте, что оно есть.

•	В памяти находятся резидентные программы.

Удалите резидентные программы.

•	Загружено слишком много драйверов устройств.

Удалите ненужные драйверы устройств.

•	Недостаточно памяти для размещения переменных типа Public.

Уменьшите число переменных типа Public.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не хватает стековой памяти (Ошибка 28)

Стек -- это рабочая область памяти, которая заполняется и освобождается динамически в соответствии с потребностями выполняемой программы. Причины возникновения этой ошибки и способы ее устранения:

•	Слишком много активных вызовов процедур Function, Sub или Property.

Проверьте, не слишком ли глубоко вложены процедуры.  Это особенно касается рекурсивных процедур (т.е. процедур, вызывающих самих себя).  Убедитесь, что рекурсивные процедуры завершаются должным образом.  Для просмотра активных (находящихся в стеке) процедур используйте окно диалога Вызовы.

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

Попробуйте описать некоторые из них на уровне модуля. Можно также объявить статическими все переменные в процедуре, поместив ключевое слово Static перед ключевым словом Property, Sub или Function.  Кроме того, с помощью ключевого слова Static можно описать отдельные переменные внутри процедур как статические.

•	Слишком много строк фиксированной длины.

Доступ к строкам фиксированной длины в процедуре осуществляется наиболее быстро, однако при этом используется больший объем стека, чем при использовании строк переменной длины, поскольку в стек помещаются сами строковые данные. Попробуйте переопределить некоторые строки фиксированной длины как строки переменной длины. Когда строка переменной длины описывается в процедуре, только дескрипторы строк (а не сами строки) помещаются в стек. Строка может быть также описана на уровне модуля; в этом случае стек вообще не используется.  По умолчанию переменные, описанные на уровне модуля, имеют тип Public, поэтому такие строки доступны всем процедурам в данном модуле.

•	Слишком много вложенных вызовов функции DoEvents.

Для просмотра активных (находящихся в стеке) процедур используйте окно диалога Вызовы.

•	Программой был запущен каскад событий.

Причиной запуска каскада событий является событие, вызывающее процедуру обработки события, которая уже помещена в стек.  Каскад событий похож на незавершенный вызов рекурсивной процедуры, однако обнаружить его гораздо труднее, поскольку вызов осуществляется неявно Visual Basic, а не явно инструкцией программы.  Для просмотра активных (находящихся в стеке) процедур используйте окно диалога Вызовы.

Чтобы открыть окно диалога Вызовы, следует нажать кнопку Вызовы, расположенную справа от списка Процедуры в окне Отладка, или выбрать команду Вызовы.  Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не хватает памяти для строки (Ошибка 14)

Visual Basic позволяет использовать очень большие строки.  Однако потребности других программ и способ, используемый для обработки этих строк, могут вызвать данную ошибку. Причины возникновения этой ошибки и способы ее устранения:

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

MyString = "Привет"

For Count = 1 To 100

MyString = MyString & MyString

Next Count

Присвойте эту строку переменнойс другим именем.

•	Объем оставшейся свободной системной памяти недостаточен для размещения строки.

Для увеличения объема свободной памяти удалите из нее ненужные приложения.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Переполнение (Ошибка 6)

Причиной переполнения является попытка присвоения значения, лежащего вне диапазона значений, допустимых для адресата присвоения. Причины возникновения этой ошибки и способы ее устранения:

•	Результат присвоения, вычисления или преобразования типов данных выходит за границы диапазона значений, допустимых для переменнойданного типа

Присвойте это значение переменной типа, которому соответствует больший диапазон значений.

•	Была предпринята попытка присвоить свойству значение, превышающее максимально допустимое для него.

Убедитесь, что присваиваемое значение лежит внутри диапазона значений, допустимых для данного свойства.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Путь не найден (Ошибка 76)

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

•	При выполнении операции доступа к файлу или диску (например Open, MkDir, ChDir или RmDir) операционная система не смогла найти указанный каталог.

Укажите правильный каталог.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка доступа к файлу/каталогу (Ошибка 75)

Операционная система не смогла выполнить операцию доступа к указанному файлу или диску (например Open, MkDir, ChDir или RmDir). Причины возникновения этой ошибки и способы ее устранения:

•	Имя файла неправильно отформатировано.

Имя файла может содержать абсолютный или относительный путь.  Абсолютный путь начинается с имени диска (при ссылке на другой диск) и содержит полный путь от корневого каталога к данному файлу.  Все остальные пути определяются относительно текущего диска или каталога.

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

Снимите атрибут "только для чтения" с результирующего файла или сохраните файл под другим именем.

•	Была предпринята попытка открыть файл последовательного доступа, предназначенный только для чтения, в режиме Output или Append.

Откройте файл в режиме Input или снимите с него атрибут "только для чтения".

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Нет разрешения (Ошибка 70)

Была предпринята попытка записи на диск, защищенный от записи, или доступа к заблокированному файлу. Причины возникновения этой ошибки и способы ее устранения:

•	Была предпринята попытка открытия файла последовательного доступа, защищенного от записи, в режиме Output или Append.

Откройте файл в режиме Input или снимите с него атрибут "только для чтения".

•	Была предпринята попытка открытия файла последовательного доступа, находящегося на диске, защищенном от записи, в режиме Output или Append.

Снимите с диска защиту от записи или откройте файл в режиме Input.

•	Была предпринята попытка записи в файл, заблокированный другим процессом.

Подождите открывать файл до тех пор, пока он не будет освобожден другим процессом.

•	Была предпринята попытка доступа к системному реестру без соответствующих прав.

Пользователь 32-разрядных систем Microsoft Windows должен обладать определенными правами для доступа к системному реестру.  Измените свои права доступа или обратитесь к администратору системы.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Ошибка принтера (Ошибка 482)

Причина возникновения этой ошибки и способ ее устранения:

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

Осмотрите принтер. Проверьте надежность кабелей, соединяющих компьютер и принтер. На большинстве принтеров имеется дисплей, на который выводятся сообщения об ошибках, например: "Отсутствие бумаги" (Out of paper), "Принтер не готов" (Offline) и т.д.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция Property Get не поддерживается во время выполнения (Ошибка 393)

Не все свойства возвращают значения во время выполнения. Причина возникновения этой ошибки и способ ее устранения:

•	Была предпринята попытка доступа к свойству, которое во время выполнения доступно только для чтения.

Завершите выполнение и исследуйте свойство во время разработчика.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция Property Get не поддерживается (свойство доступно только для записи) (Ошибка 394)

Не все свойства возвращают информацию. Причина возникновения этой ошибки и способ ее устранения:

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

Состояние свойства определить нельзя.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не найдено свойство или метод (Ошибка 423)

Написание имени объекта должно в точности совпадать с его описанием в библиотеке объектов. Причина возникновения этой ошибки и способ ее устранения:

•	Была предпринята попытка сослаться на объект.метод или объект.свойство, однако метод или свойство не определены.

Возможно, имя объекта указано неправильно.  Чтобы увидеть, какие свойства и методы определены для объекта, откройте окно Просмотр объектов. Чтобы увидеть список доступных свойств и методов, выберите соответствующую библиотеку объектов.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Свойство не найдено (Ошибка 422)

Не все объекты поддерживают один и тот же набор свойств. Причина возникновения этой ошибки и способ ее устранения:

•	Объект не поддерживает указанное свойство.

Проверьте правильность написания имени свойства. Кроме того, возможно, была предпринята попытка доступа к свойству типа "текст", тогда как данный объект поддерживает свойство "заголовок" или другое свойство с похожим именем. Обратитесь к документации для объекта.

Для получения дополнительных сведений выберите данный объект и нажмите клавишу F1.


Инструкция Property Set не поддерживается во время выполнения (Ошибка 382)

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

•	Была предпринята попытка получить ссылку на свойство, которое во время выполнения доступно только для чтения или только для записи.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция Property Set не поддерживается (свойство доступно только для чтения) (Ошибка 383)

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

•	Была предпринята попытка получить ссылку на свойство, которое во время выполнения доступно только для чтения.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Инструкция Property Set не разрешена (Ошибка 387)

Не все свойства возвращают ссылки. Причина возникновения этой ошибки и способ ее устранения:

•	Была предпринята попытка получить ссылку на свойство, которое не возвращает ссылки.

С таким свойством могут использоваться только инструкции Property Let и Property Get.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком длинная замена (Ошибка 746)

Длина замены не может превышать определенное максимальное значение. Причина возникновения этой ошибки и способ ее устранения:

•	Предпринята попытка замены, длина которой превышает допустимый максимум.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Resume без Error (Ошибка 20)

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

•	Инструкция Resume находится вне программы обработки ошибок.

Переместите инструкцию в программу обработки ошибок или удалите ее.

•	Произошел переход в программу обработки ошибок, несмотря на отсутствие ошибки.

Проверьте написание метки строки. С помощью инструкции GoTo нельзя перейти из одной процедурыв другую, поэтому найдите в процедуре метку, соответствующую программе обработки ошибок.  Если будет найдена повторяющаяся метка, включенная в инструкцию GoTo, но не включенная в инструкцию On Error GoTo, исправьте метку строки в соответствии с ее назначением.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Return без GoSub (Ошибка 3)

Каждой инструкции Return должна соответствовать инструкция GoSub. Причина возникновения этой ошибки и способ ее устранения:

•	Отсутствует инструкция GoSub, соответствующая данной инструкции Return.

Проверьте, не была ли инструкция GoSub случайно удалена.

В отличие от инструкций For...Next, While...Wend и Sub...End Sub, соответствие которых проверяется во время компиляции, соответствие инструкций GoSub и Return проверяется во время выполнения.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Указанная функция библиотеки не найдена (Ошибка 453)

Библиотека динамической компоновки (DLL) в ссылке на библиотеку пользователя была найдена, однако в ней не была найдена указанная функция. Причины возникновения этой ошибки и способы ее устранения:

•	В описании функции указан неправильный порядковый номер.

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

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

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

•	При работе в 32-разрядной Microsoft Windows правильными должны быть и имя, и псевдоним (при наличии) библиотеки динамической компоновки.

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

•	Некоторые 32-разрядные библиотеки динамической компоновки содержат незначительно отличающиеся версии функций, предназначенных для работы со строками Unicode и ANSI.  Буква "A" в конце имени функции соответствует версии ANSI, а буква "W" -- версии Unicode.

Если одним из аргументов функции является строка, попробуйте добавить букву "A" в конец имени функции.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком сложное выражение (Ошибка 16)

Число подвыражений, допустимых в выражении с плавающей точкой, различно для разных платформ. Например, в 32-разрядных операционных системах Microsoft Windows допустимы 8 уровней вложенных выражений с плавающей точкой. Причина возникновения этой ошибки и способ ее устранения:

•	Выражение с плавающей точкой содержит слишком много вложенных подвыражений.

Чтобы предотвратить возникновение ошибки, разбейте данное выражение на несколько более простых.

Примечание.   В ранних версиях Visual Basic код 16 имела другая ошибка: "Слишком сложное строковое выражение". Условия для возникновения такой ошибки устранены. Однако, если у вас есть старая программа, которая перехватывает и обрабатывает эту ошибку, следует удалить ее, чтобы не запутаться.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Образец поиска не найден (Ошибка 744)

Причина возникновения этой ошибки и способ ее устранения:

•	Указанный текст не найден.

Данного текста не существует.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Sub, Function или Property не определена (Ошибка 35)

Процедуры Sub, Function или Property должны быть определены перед вызовом. Причины возникновения этой ошибки и способы ее устранения:

•	Неправильно указано имя процедуры.

Проверьте правильность написания имени процедуры и исправьте его.

•	Была предпринята попытка вызова процедуры из другого проекта без предварительного добавления ссылки на этот проект в окно диалога Ссылки.

Чтобы добавить ссылку:

1	Откройте окно диалога Ссылки.

2	Найдите имя проекта, содержащего нужную процедуру.  Если в окне Ссылки имя этого проекта отсутствует, нажмите кнопку Обзор и найдите его.

3	Установите флажок слева от имени этого проекта.

4	Нажмите кнопку OK.

•	Указанная процедура недоступна для вызывающей процедуры.

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

•	Процедура из библиотеки динамической компоновки (DLL) описана, но не найдена в ней.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Индекс выходит за пределы допустимого диапазона (Ошибка 9)

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

•	Была предпринята попытка сослаться на несуществующий элемент массива.

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

•	При описании массива не указано число его элементов.  Например, следующие инструкции вызовут данную ошибку:

Dim MyArray() As Integer

MyArray(8) = 234	' Вызывает ошибку 9.

Visual Basic не определяет неявно диапазоны массива, которые не были указаны, например, 0 –10.  Поэтому следует использовать инструкцию Dim или ReDim для явного указания числа элементов в массиве.

•	Была предпринята попытка сослаться на несуществующий компонент семейства.

Попробуйте использовать конструкцию For Each...Next вместо указания индексов.

•	Была использована сокращенная форма индекса, который неявно указал на недопустимый элемент.

К примеру, если оператор ! используется с семейством, он неявно указывает параметр. Например запись "объект!имя_параметра.значение" эквивалентна "объект.элемент(имя_параметра).значение". В этом случае, если имя_параметра представляет неверный параметр для данного семейства, возникает ошибка. Для устранения ошибки используйте для данного семейства правильное имя параметра или допустимый индекс.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Компонент не поддерживает события (Ошибка 459)

Не все компоненты поддерживают описание и создание событий. Причина возникновения этой ошибки и способ ее устранения:

•	Была предпринята попытка описать, вызвать или написать процедуру обработки события для компонента, который вообще не поддерживает обработку событий.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком много клиентов библиотеки приложения (Ошибка 47)

Одновременно к библиотеке динамической компоновки (DLL) Visual Basic могут иметь доступ не более 50 главных приложений. Причина возникновения этой ошибки и способ ее устранения:

•	Текущее главное приложение и другие главные приложения (к некоторым из которых может иметь доступ текущее главное приложение) пытаются одновременно получить доступ к библиотеке динамической компоновки Visual Basic.

Уменьшите число открытых приложений, осуществляющих доступ к Visual Basic.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Слишком много файлов (Ошибка 67)

Существует ограничение на количество дисковых файлов, которые могут быть открыты одновременно. Причины возникновения этой ошибки и способы ее устранения:

•	Операционная система MS-DOS: в корневом каталоге было создано больше файлов, чем допускается системой.

В операционной системе MS-DOS ограничивается число файлов, которые могут находится в корневом каталоге (обычно 512).  Если программа открывает, закрывает или сохраняет файлы в корневом каталоге, измените программу, чтобы она использовала подкаталог.

•	Операционная система MS-DOS: было открыто больше файлов, чем задано в строке files= в файле CONFIG.SYS.

Увеличьте число, указанное в строке files= файла CONFIG.SYS, и перезагрузите компьютер.

•	Macintosh: программа пытается открыть более 40 файлов.

На Macintosh обычное ограничение составляет 40 файлов.  Возможно изменение этого ограничения с помощью служебной программы для изменения параметра MaxFiles загрузочного блока.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Несоответствие типа (Ошибка 13)

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

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

Старайтесь выполнять присвоение только между совместимыми типами данных. Например тип Integer всегда может быть присвоен типу Long, тип Single всегда может быть присвоен типу Double, и любой тип (кроме типа,  определяемого пользователем) может быть присвоен типу Variant.

•	Объект был передан в процедуру, в которой предполагалось одиночное свойство или значение.

Передайте соответствующее одиночное свойство, или вызовите метод, соответствующий этому объекту.

•	Было использовано имя модуля или проекта, когда ожидалось выражение, например:

Debug.Print MyModule

Задайте выражение, которое может быть выведено на экран.

•	Предпринята попытка смешать традиционную обработку ошибки Basic со значениями типа Variant, имеющими подтип Error (10, vbError); например:

Error CVErr(n)

Если требуется воссоздать ошибку, необходимо отобразить ее на внутреннюю ошибку Visual Basic (или ошибку определяемую пользователем), а затем вызвать эту ошибку.

•	Значение CVErr невозможно преобразовать к значению типа Date, например:

MyVar = CDate(CVErr(9))

Воспользуйтесь инструкцией Select Case или какой-либо подобной инструкцией для отображения значения CVErr на такое значение.

•	Во время выполнения данная ошибка обычно указывает, что значение типа Variant, использованное в выражении, имеет неверный подтип, или в инструкции Print # применяется значение типа Variant, содержащее массив.

Для печати массива создайте цикл, выводящий каждый элемент по отдельности.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Произошло прерывание, вызванное пользователем (Ошибка 18)

Прерывание выполнения бывает полезно, но если оно не обрабатывается, то приводит к завершению приложения. Причина возникновения этой ошибки и способ ее устранения:

•	Пользователь нажал CTRL+BREAK или другую прерывающую выполнение комбинацию клавиш.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Переменная использует не поддерживаемый в Visual Basic тип (Ошибка 458)

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

•	Была предпринята попытка использовать определенную в библиотеке типов (или в библиотеке объектов) переменную, которая имеет тип данных, не поддерживаемый в Visual Basic.

Нельзя использовать переменную типа, не распознаваемого языком Visual Basic, в программе, написанной на Visual Basic.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое число аргументов или присвоение значения свойства (Ошибка 450)

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

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

Сопоставьте список аргументов в вызове с описанием или определением процедуры.

•	Был указан индекс элемента управления, который не является частью массива элементов.

Описание индекса рассматривается как аргумент, но поскольку ни индекс, ни аргумент не предполагались, то возникает ошибка.  Удалите описание индекса, или создайте в процедуре массив элементов управления. Задайте для свойства Index во время разработки ненулевое значение в окне свойств элементов управления или в окне свойств.

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

Присвоение значения свойству -- это то же самое, что передача значения в качестве аргумента процедуре объекта Property Let.  Правильно определите процедуру Property Let (она должна иметь на один аргумент больше, чем соответствующая процедура Property Get).  Если это свойство подразумевает доступ только для чтения, невозможно присвоить ему значение.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Невозможно создание объекта или возвращение ссылки на этот объект компонентом ActiveX (Ошибка 429)

Для создаваемых объектов объекта требуется, чтобы класс объектов был зарегистрирован в системном реестре, и чтобы была доступна любая связанная библиотека динамической компоновки (DLL). Причины возникновения этой ошибки и способы ее устранения:

•	Класс не был зарегистрирован.  Например, системный реестр не имеет записи для этого класса или класс записан, но указывает файл неверного типа или файл, который не удается найти

Попробуйте, если возможно, запустить приложение объекта. Если сведения из реестра устарели или неисправны, приложение должно проверить этот реестр и исправить эти сведения.  Если запуск приложения не устраняет ошибку, перезапустите программу установки приложения.

•	Библиотека, требуемая для объекта не может быть использована, так как ее не удается найти, или она повреждена.

Убедитесь, что все связанные библиотеки доступны.  Например, для объекта типа DAO (Data Access Object) требуется поддержка библиотек, которые зависят от используемой платформы.  Возможно требуется перезапустить программу установки для такого объекта, если в этом заключается причина этой ошибки.

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

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

Однако, если попытка создать экземпляр является результатом вызова CreateObject или GetObject, объект должен сам найти эту запись.  В этом случае он, возможно, выполняет поиск в системном реестре или поиск специального файла (например файла с расширением .LIC), который он создает при установке.  Если конечный пользователь не установил правильным образом приложение объекта, случайно удалил нужный файл или изменил системный реестр, объект не сможет найти свою запись.   Если запись не удается найти, объект не допускает создание экземпляров.  В этом случае создание экземпляров может работать на машине разработчика, но не работать в системе пользователя.  Возможно пользователю требуется переустановить лицензионный объект.

•	Попытка использовать функцию GetObject для загрузки ссылки на класс, созданный в Visual Basic.

GetObject не может использоваться для получения ссылки на класс, созданный с помощью Visual Basic.

•	В явном виде отсутствует доступ к этому объекту.

Возможно предпринимается попытка доступа к объекту данных, который в данное время используется и блокирован для устранения ситуаций возникновения взаимоблокировки. Если это так, то доступ к объекту будет возможен в другое время.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимое значение свойства (Ошибка 380)

Большинство свойств принимает значение только определенного типа и в определенном диапазоне величин. Причина возникновения этой ошибки и способ ее устранения:

•	Свойству было присвоено недопустимое значение.

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

Для получения дополнительных сведений выберите данное свойство и нажмите клавишу F1.


Недопустимый рисунок (Ошибка 481)

Свойству Picture или объекту Picture допускается присвоение только рисунков. Причина возникновения этой ошибки и способ ее устранения:

•	Предпринята попытка присвоить свойству Picture или объекту Picture, значение, не распознаваемое как значок, точечный рисунок или метафайл Microsoft Windows.

Для определения допустимых типов рисунков обратитесь к разделам справки по объекту Picture или свойству Picture используемого объекта.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Недопустимый формат файла ресурсов (Ошибка 325)

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

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

Если этот файл был поврежден, переустановите этот файл с исходного диска.  Если ошибка сохранится, обратитесь к поставщику этого ресурса за новым файлом или версией ресурса в требуемом формате.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Запись уже связана с элементом данного семейства (Ошибка 457)

Запись содержит строку (указанную в методе Add), однозначно идентифицирующую определенный компонент семейства. Причина возникновения этой ошибки и способ ее устранения:

•	Задается запись для компонента семейства, которая уже идентифицирует другой компонент семейства.

Выберите для этого компонента другую запись.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Массив имеет фиксированную длину или временно блокирован (Ошибка 10)

Не все массивы допускают изменение размерностей.  Даже для массивов, специально описанных как динамические (и массивов внутри переменных типа Variant), иногда устанавливается временная блокировка. Причины возникновения этой ошибки и способы ее устранения:

•	Попытка использовать ReDim, чтобы изменить число элементов для массива фиксированных размеров.  Например, в следующей программе массив фиксированных размеров FixedArr передается переменной SomeArr при вызове процедуры NextOne, а затем предпринимается попытка изменить размер SomeArr:

Sub FirstOne

Dim FixedArr(25) As Integer	' Массив фиксированных размеров создается и

NextOne FixedArr()	' передается в другую процедуру.

End Sub

Sub NextOne(SomeArr() As Integer)

ReDim SomeArr(35)	' Здесь возникает ошибка 10.

. . .

End Sub

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

•	Попытка переопределить размеры динамического массива уровня модуля, один из элементов которого был передан в качестве аргумента в процедуру.  Например в следующей программе ModArray является динамическим массивом уровня модуля, сорок пятый элементов которого передается по ссылке в процедуру Test:

Dim ModArray () As Integer	' Создается динамический массив уровня модуля.

. . .

Sub AliasError()

ReDim ModArray (1 To 73) As Integer

Test ModArray (45)	' Передача элемента массива уровня

' модуля в процедуру Test.

End Sub

Sub Test(SomeInt As Integer)

ReDim ModArray (1 To 40) As Integer  ' Здесь возникает ошибка.

End Sub

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

•	Попытка присвоить значение для переменной типа Variant, содержащей массив, но значение типа Variant в данное время блокировано. Например, если в программе используется цикл For Each...Next для итераций по значению типа Variant, содержащему массив, массив блокируется при входе в цикл, а затем освобождается при завершении цикла:

SomeArray = Array(9,8,7,6,5,4,3,2,1)

For Each X In SomeArray

SomeArray = 301	' Вызывает ошибку из-за блокировки массива.

Next X

Используйте для итераций цикл For...Next (а не For Each...Next).  Если массив является объектом цикла For Each...Next, имеется возможность читать, но не записывать его.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Не найдено имя файла или класса при программировании объектов (Ошибка 432)

Для функции GetObject требуется допустимое имя файла с указанием пути или имя класса, который зарегистрирован системой. Причина возникновения этой ошибки и способ ее устранения:

•	Не удается найти имя, указанное для имени файла или класса в вызове функции GetObject.

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

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Программируемый объект не имеет значения по умолчанию (Ошибка 443)

При указании имени объекта без свойстваили методав Visual Basic предполагается ссылка на компонент объекта по умолчанию (свойство или метод).  Однако не все объекты предоставляют компоненты, используемые по умолчанию. Причина возникновения этой ошибки и способ ее устранения:

•	В Visual Basic не удается определить компонент по умолчанию для указанного объекта.

Обратитесь к документации объекта и задайте в явном виде спецификацию свойства или метода.

Для получения дополнительных сведений выберите требуемый элемент и нажмите клавишу F1.


Непредвиденная ошибка; выход.

Произошла непредвиденная ошибка и дальнейшая работа Visual Basic невозможна. Это может быть вызвано проблемой либо с аппаратурой, либо с другими приложениями.


Допускаются целые числа от 1 до 32.

Попытка присвоения параметру Интервал табуляции недопустимого значения. Допустимыми для этого поля являются числа от 1 до 32 (включительно).


Допустимые значения: целые числа от 2 до 60.

Попытка присвоения параметру Ширина сетки или Высота сетки недопустимого значения. Допустимыми для этого поля являются числа от 2 до 60 (включительно).


Указанный элемент имеет двоичный формат и его загрузка в Visual Basic невозможна.

Созданные в ранней версии Visual Basic двоичные формы не могут быть загружены в данную версию Visual Basic. Только Visual Basic версий 2.0 и 3.0 поддерживает преобразование двоичных форм в формат ASCII. Если имеется копия Visual Basic 2.0 или 3.0, следует загрузить в них такую форму и сохранить ее в виде текста. После этого в Visual Basic будет возможен ее импорт.


Файл проекта доступен только для чтения.

Запись в файл проекта запрещена. Следует сохранить проект под другим именем или снять атрибут только для чтения.


Файл доступен только для чтения.

Запись в файл запрещена. Следует сохранить файл под другим именем или снять атрибут только для чтения.


Процедура с таким именем уже существует.

Имена процедур внутри одной области определения должны быть уникальны. Следует изменить имя процедуры.


Указанный файл проекта содержит недопустимое значение раздела. Допускаются значения от 0 до 'элемент3'.

Диапазон значений раздела ограничен. Следует задавать значения, не выходящие из этого диапазона.


Задано слишком длинное имя проекта. Оно будет усечено.

Если длина имени проекта превышает максимально допустимое значение, имя будет усечено до этого значения.


Указанный файл проекта содержит недопустимый раздел. Невозможно загрузить проект.

Если проект содержит недопустимый раздел, загрузка проекта невозможна.


Указанный элемент является недопустимым разделом. Невозможно загрузить указанный файл.

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


Невозможно найти указанный файл.

Указанный файл не найден. Следует исправить путь или имя файла.


Указанный файл проекта содержит недопустимое значение раздела.

Указанное значение раздела недопустимо. Следует его исправить.


Недостаточно памяти для запуска; выход.

Недостаточно памяти для запуска Visual Basic. Следует закрыть другие активные приложения и повторить попытку.


Ошибочная версия операционной системы; требуется Windows NT 3.51 указанной сборки или Windows 95 указанной сборки

Запуск данной версии Visual Basic возможен только из Windows 95 или Windows NT версии 3.51 указанной сборки.


Системная ошибка.

В Visual Basic произошла ошибка, вызванная системой или внешним компонентом.


Указанный файл помечен как имеющий версию, которая не поддерживается текущей версией Visual Basic, и не будет загружен.

Попытка загрузить форму Visual Basic версии 1.0 или форму версии, более поздней чем данная версия Visual Basic. Такая возможность не поддерживается.


Указанный файл проекта поврежден; загрузка невозможна.

Невозможно чтение Visual Basic файла проекта. Причиной этого может быть изменение файла во внешнем редакторе. Для устранения ошибки следует отменить все внесенные в файл изменения.


Невозможна запись указанного файла кэша конструктора. При загрузке будут использованы только обычные файлы.

Конструктор ActiveX не смог записать данные в файл кэша, поэтому при загрузке будет использована не кэшированная информация.

Для увеличения производительности при запуске Visual Basic конструктор ActiveX создает файл кэша. Запись в кэш файл невозможна из-за недостатка места на диске или неправильно установленных прав доступа. Следует убедиться, что на диске имеется достаточно свободного пространства и на него разрешена запись. Если проблема не устранена, следует обратиться к поставщику конструктора ActiveX.


Недостаточно памяти для загрузки файла.

Недостаточно памяти для загрузки файла в Visual Basic. Следует закрыть другие активные приложения и повторить попытку.


Повторяющееся имя процедуры.

Описано (или выполняется попытка описать) более одной процедуры с одним и тем же именем. Следует изменить имя одной из процедур. Необходимо убедиться, что инструкции Declare для этих повторяющихся процедур имеют одинаковые предложения Alias.


Не удается найти исполняемый файл (.EXE) справочной системы Windows.

Исполняемый файл справочной системы Windows не найден. Если файл winhelp.exe имеется на компьютере, следует убедиться, что к нему указан путь. Если же такого файла нет, необходимо запустить программу установки Microsoft Windows 95 или Microsoft Windows NT.


Невозможно отобразить системные сведения.

Visual Basic не может отобразить системные сведения при выборе О системе в окне диалога О программе Microsoft Visual Basic. Возможно не хватает памяти, либо отсутствует или поврежден необходимый файл.


Недопустимое имя процедуры.

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

•	Попытка описания процедуры с недопустимым именем, поскольку этот идентификатор уже используется в ведущем приложении для других целей. Например, если ведущим приложением является Microsoft Excel, не допускается описание процедуры с именем R1C1, так как это имя уже используется в Microsoft Excel.

Следует сменить имя процедуры.

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

Следует сменить имя процедуры.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Описание приложения не может содержать более 2000 символов.

Описание приложения не может быть длиннее 2000 символов. Следует удалить некоторые символы из описания.


Необходимо задать объекты для печати.

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


Недопустимое имя объекта.

Имена формы и элемента управления должны начинаться с буквы и иметь длину не более 40 символов, включая буквы, цифры и символы подчеркивания (_).

Следует помнить, что свойство формы или элемента управления Имя отличается от свойств Подпись, Текст и Значение, помечающих или отображающих содержимое элемента управления во время выполнения. Эти свойства могут быть ограниченными ключевыми словами, начинаться с цифры и содержать символы, не входящие в алфавит.


Указанное имя конфликтует с существующим модулем, проектом или библиотекой объектов.

Причины этой ошибки таковы:

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

•	Форме дано новое имя, совпадающее с именем проекта, другой формы или модуля. То же самое происходит, если новое имя проекта совпадает с именем формы или модуля.


В данное время невозможно задать имя проекта.

В данное время имя проекта задать невозможно.


Не найден или неправильно зарегистрирован указанный компонент ActiveX.

Компонент должен быть зарегистрирован в системном реестре. Причины и способы исправления этой ошибки приведены ниже:

•	Информация о компоненте в реестре некорректна, поэтому компонент не может быть найден.

Следует исправить запись в реестре. В случае необходимости – переустановить компонент.

•	Компонент был удален вручную, вместо использования программы удаления.

Следует заменить файлы компонента в указанном в реестре каталоге.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Невозможно выполнение операции, поскольку проект защищен.

В защищенном проекте недоступны некоторые операции. Причины и способы исправления этой ошибки приведены ниже:

•	Проект был защищен случайно.

Следует удалить защиту и повторить операцию.

•	Проект был защищен намеренно.

Не следует повторять операцию, пока защита не снята установившим ее лицом.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Невозможно начать новую запись, пока не закончен текущий сеанс.

Не допускается вложение записи. Причины и способы исправления этой ошибки приведены ниже:

•	Запись уже начата.

Перед началом новой записи следует завершить текущий сеанс записи.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Выполнить экспорт указанного объекта перед удалением?

Возможен экспорт форм и модулей с последующей их перезагрузкой. Причины и способы исправления этой ошибки приведены ниже:

•	Форма или модуль удаляются из проекта.

Для сохранения модуля следует выполнить его экспорт. В дальнейшем будет возможен его импорт.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Класс формы из указанного файла не поддерживается в VBE. Невозможно загрузить файл.

В Visual Basic для приложений поддерживается только объект формы UserForm. Причины и способы исправления этой ошибки приведены ниже:

•	Выполняется попытка загрузить форму из старой версии Visual Basic или форму из текущей автономной версии Visual Basic.

Вероятно самый легкий путь здесь – заново создать форму с помощью инструментов UserForm в Visual Basic. Если есть возможность сохранить форму в формате ASCII, допускается ее изменение и импорт. Однако следует полностью знать формат и ограничения различных упаковщиков форм.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Загрузка указанного файла невозможна.

Не все файлы могут быть загружены в Visual Basic для приложений. Причины и способы исправления этой ошибки приведены ниже:

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

Загрузка файла невозможна.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Выполнение команды приведет к остановке отладчика.

Некоторые команды и макрокоманды приводят к остановке отладчика Visual Basic. Причины и способы исправления этой ошибки приведены ниже:

•	Некоторые команды редактирования, например описание переменной Static, а также команды добавления нового модуля, или формы приводят к остановке выполняемой или приостановленной программы.

Если остановка программы нежелательна не следует выполнять такую команду.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


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

Невозможно добавление ссылки на не сохраненный проект. Причины и способы исправления этой ошибки приведены ниже:

•	Выполнена попытка добавить ссылку на не сохраненный проект.

Перед добавление ссылки следует сохранить проект.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Недопустимое использование объекта (ошибка 425).

Большинство объектов могут быть использованы только особым образом, обычно ошибка возникает при попытке обращения к объекту вне соответствующей области определения. Например, ссылка на объект, переданная в событие drag-and-drop, может использоваться только в контексте этого события.


Невозможно напечатать изображение формы на данном типе принтера (ошибка 486).

Для печати изображения формы принтер должен поддерживать печать графики.


Указанный объект не может быть использован в качестве формы-владельца метода Show() (ошибка 371).

С методом Show должен использоваться соответствующий объект.


Указанный элемент управления ActiveX не найден (ошибка 363).

Загружаемая форма содержит элемент управления ActiveX, не являющийся частью текущего проекта. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Возможно файл проекта .vbp был изменен вручную и в него была добавлена форма, содержащая элемент управления ActiveX, не являющийся частью проекта.

После загрузки проекта следует выполнить команду Добавить файл из меню Файл для добавления в проект элемента управления ActiveX.

•	Возможно файл проекта .vbp был изменен вручную и в него была добавлена форма, содержащая элемент управления ActiveX более ранней версии, чем уже включенный в проект.

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


Компонент ActiveX не был правильно зарегистрирован (ошибка 336).

Компонент ActiveX не был правильно зарегистрирован системном реестре.


Не найдено значение данных с указанным именем (ошибка 327).

Значение данных не найдено.


Недопустимый рисунок (ошибка 481).

Свойству Рисунок был присвоен недопустимый графический формат. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка присвоения свойству Рисунок формы или элемента управления графического формата, отличного от точечного рисунка, значка или метафайла Windows.

Следует убедиться, что загружаемый в свойство Рисунок файл имеет графический формат, поддерживаемый Visual Basic.


Ошибка принтера (ошибка 482).

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

•	Нет принтера, установленного на Панели управления Windows.

Следует открыть Панель управления, выбрать значок Принтеры и нажать кнопку Добавить принтер для установки принтера.

•	Принтер не готов к печати.

Следует нажать кнопку online принтера.

•	Принтер замял бумагу, либо бумага закончилась.

Следует физически устранить проблему.

•	Попытка печати формы на принтере, поддерживающем только текстовые данные.

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


Драйвер принтера не поддерживает указанное свойство (ошибка 483).

Драйвер используемого принтера не поддерживает указанное свойство объекта Printer. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Влияние на печать свойств объекта Printer зависит от драйвера, поставляемого изготовителем принтера. Некоторые свойства могут совсем не влиять на печать, другие могут иметь одинаковый эффект. Установки параметров, выходящие за пределы допустимого диапазона, могут привести, а могут и не привести к ошибке.

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


Ошибка получения системных сведений о принтере. Убедитесь, что принтер установлен правильно (ошибка 484).

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

•	Нет принтера, установленного на Панели управления Windows.

Следует открыть Панель управления, выбрать значок Принтеры и нажать кнопку Добавить принтер для установки принтера.

•	Принтер не готов к печати.

Следует нажать кнопку online принтера.

•	Принтер замял бумагу, либо бумага закончилась.

Следует физически устранить проблему.


Недопустимый тип рисунка (ошибка 485).

Формат рисунка загружаемого файла ресурса не совпадает с указанным свойством объекта. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка использования метода LoadResPicture для загрузки точечного рисунка в качестве свойства Значок формы.

Следует изменить данное свойство на свойство Рисунок, либо заменить аргумент формат метода LoadResPicture на vbResIcon.

•	Попытка использования метода LoadResPicture для загрузки ресурса курсора в качестве свойства объекта или элемента управления, отличного от свойства УказательМыши.

Следует изменить ссылку свойства на УказательМыши.


Невозможна очистка буфера обмена (ошибка 520).

Буфер обмена был открыт, но его очистка невозможна. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Другое приложение использует буфер обмена и запрещает его использование остальными приложениями.

Для этой ошибки в программе следует установить обработчик, в котором отображается окно сообщений с кнопками Повторить и Отмена, позволяя пользователю повторить попытку.


Невозможно открытие буфера обмена (ошибка 521).

Буфер обмена был открыт другим приложением. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Другое приложение использует буфер обмена и запрещает его использование остальными приложениями.

Для этой ошибки в программе следует установить обработчик, в котором отображается окно сообщений с кнопками Повторить и Отмена, позволяя пользователю повторить попытку.


Указанный формат не соответствует формату данных (ошибка 461).

Указанный формат буфера обмен несовместим с выполняемым методом. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка использования методов GetText или SetText с форматом буфера обмена, отличным от vbCFText или vbCFLink.

Перед использованием этих методов следует вызвать метод GetFormat для проверки, соответствует ли текущее содержимое буфера обмена указанному формату.

•	Попытка использования методов GetData или SetData с форматом буфера обмена, отличным от vbCFBitmap, vbCFDIB или vbCFMetafile.

Перед использованием этих методов следует вызвать метод GetFormat для проверки, соответствует ли текущее содержимое буфера обмена указанному формату.


Недопустимый формат буфера обмена (ошибка 460).

Указанный формат буфера обмен несовместим с выполняемым методом. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка использования методов GetText или SetText с форматом буфера обмена, отличным от vbCFText или vbCFLink.

Следует удалить неверный формат и указать один из двух допустимых.

•	Попытка использования методов GetData или SetData с форматом буфера обмена, отличным от vbCFBitmap, vbCFDIB или vbCFMetafile.

Следует удалить неверный формат и указать один из трех допустимых графических форматов.


Не найдены сведения о лицензии для этого компонента. Отсутствует соответствующая лицензия на использование этой возможности в
Не найдены сведения о лицензии для этого компонента. Отсутствует соответствующая лицензия на использование этой возможности в среде конструктора (ошибка 429).

Отсутствует лицензия на элемент управления ActiveX. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка помещения элемента управления ActiveX в форму во время разработки или добавления формы с элементом управления ActiveX в проект, в то время как соответствующая информация реестре не найдена.

Возможно информация в реестре была удалена или повреждена. Необходимо переустановить элемент управления ActiveX либо обратиться к его поставщику.


Форма уже отображается; модальное отображение невозможно (ошибка 400).

Невозможно использование метода Show для вывода видимой формы в модальном режиме. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка использования метода Show с аргументом стиль равным 1 – vbModal или с уже отображенной формой.

Перед модальным отображением формы необходимо выполнить инструкцию Unload или метод Hide.


Сначала необходимо закрыть или скрыть самую верхнюю модальную форму (ошибка 402).

Закрываемая или скрываемая модальная форма не является самой верхней в упорядочении по z. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Существует другая модальная форма расположенная выше указанной в упорядочении по z.

Следует воспользоваться инструкцией Unload или методом Hide для скрытия всех расположенных выше в упорядочении по z форм. Модальной является форма, отображенная посредством вызова метода Show с аргументом стиль установленным в 1 – vbModal.


Невозможна загрузка или выгрузка этого объекта (ошибка 361).

Инструкции Load или Unload ссылаются на недопустимый объект или элемент управления. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка загрузить или выгрузить незагружаемый объект, например Screen, Printer или Clipboard.

Необходимо удалить ошибочные инструкции из программы.

•	Попытка загрузить или выгрузить существующий элемент управления, не являющийся частью массива элементов управления. Например, если существует элемент TextBox со свойством Имя равным Текст1, выполнение инструкции Load Текст1 приведет к ошибке.

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

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

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

•	Попытка выгрузить последний видимый элемент элемента управления Menu.

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


Объект уже загружен (ошибка 360).

Элемент из массива элементов управления уже был загружен. Причины возникновения и способы устранения этой ошибки приведены ниже:

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

Необходимо изменить ссылку на значение индекса, либо проверить, нет ли в программе инструкций Load с одинаковыми ссылками на значение индекса.


Форма не найдена (ошибка 424).

Не найдена форма. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка добавления формы в коллекцию UserForms с помощью метода Add при отсутствии класса формы с таким именем. Например, UserForms.Add "МояФорма", если МояФорма не существует.

Необходимо убедиться, что имя класса доступно в проекте.


Невозможна выгрузка в данном контексте (ошибка 365).

В некоторых случаях выгрузка формы или ее элемента управления невозможна. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	В событии Paint формы или ее элемента управления используется инструкция Unload.

Необходимо удалить инструкцию Unload из события Paint.

•	В событиях Change, Click или DropDown элемента управления ComboBox используется инструкция Unload.

Необходимо удалить инструкцию Unload из события.

•	В событии Scroll элементов управления HScrollBar или VScrollBar используется инструкция Unload.

Необходимо удалить инструкцию Unload из события.

•	В событии Resize элементов управления Data, Form, MDIForm или PictureBox используется инструкция Unload.

Необходимо удалить инструкцию Unload из события.

•	В событии Resize элемента управления MDIForm используется инструкция Unload, выгружающая дочернюю форму MDI.

Необходимо удалить инструкцию Unload из события.

•	В событии RePosition элемента управления Data используется инструкция Unload.

Необходимо удалить инструкцию Unload из события.

•	В событии ObjectMove элемента управления OLE Container используется инструкция Unload.

Необходимо удалить инструкцию Unload из события.


Не удается загрузить указанную системную библиотеку DLL (ошибка 298).

Файл операционной системы с расширением .dll, например DDEML.DLL, VERSION.DLL или WINSPOOL.DRV, не найден. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Файл находится в неверном месте.

Необходимо проверить, что файлы с расширением .DLL находятся в каталоге System Windows.

•	Файл с расширением .DLL поврежден или удален.

Следует переустановить DLL.

•	Недостаток памяти или свободного места на диске.

Можно попытаться освободить память, закрыв ненужные приложения.


Нельзя использовать имена символьных устройств в именах файлов (ошибка 320).

В Visual Basic не допускается использование в качестве имен файлов имена символьных устройств. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка использования таких имен, как AUX, CON, COM1, COM2, LPT1, LPT2, LPT3, LPT4 или NUL.

Необходимо сменить имя файла.


Недопустимый формат файла (ошибка 321).

Файл формы Visual Basic поврежден. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Форма имеет поврежденный элемент управления ActiveX.

Следует попытаться заменить элемент управления ActiveX в форме.

•	Число свойств в специальной версии элемента управления ActiveX не совпадает с ожидаемым числом свойств.

Следует попытаться заменить элемент управления ActiveX на элемент более ранней или поздней версии.


Недопустимый параметр. Невозможна запись массивов (ошибка 328).

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

•	В событии WriteProperties пользовательского элемента управления, осуществлена попытка выполнить метод PropBag.WriteProperty X, где X является массивом. Такая возможность не поддерживается.

Следует записать каждый элемент массива по отдельности.


Невозможен доступ к системному реестру (ошибка 335).

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


Компонент ActiveX не найден (ошибка 337).

Не найден требуемый файл .exe или .dll.


Компонент ActiveX не был правильно запущен (ошибка 338).

Попытка запуска компонента ActiveX закончилась неудачей. Возможно возникли проблемы с данными в реестре.


Объект выгружен (ошибка 364).

Форма выгружена из собственной процедуры _Load. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Была неявно загружена форма, содержащая инструкцию Unload в процедуре _Load. Например, следующая строка неявно загружает форму ДругаяФорма, если только она уже не была загружена:

МояФорма.BackColor = ДругаяФорма.BackColor.

Необходимо удалить инструкцию Unload из процедуры Form_Load.


Истек срок действия указанного файла. Программе требуется файл более новой версии (ошибка 368).

Истек срок действия элемента управления ActiveX. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Число свойств в текущей версии элемента управления ActiveX не совпадает с ожидаемым числом свойств.

Следует попытаться заменить элемент управления ActiveX на элемент более поздней версии.


Недопустимое значение свойства (ошибка 380).

Свойству присвоено недопустимое значение. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Попытка присвоения одному из свойств объекта или элемента управления значения, выходящего за границы допустимого диапазона.

Необходимо задать допустимое значение свойства. Например, значением свойства УказательМыши может быть целое число в диапазоне от 0 – 15 либо число 99.


Невозможно задать значение указанного свойства во время выполнения (ошибка 382).

Свойство во время выполнения доступно только для чтения. Причины возникновения и способы устранения этой ошибки приведены ниже:

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

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


Указанное свойство доступно только для чтения (ошибка 383).

Свойство доступно только для чтения как во время разработки, так и во время выполнения. Причины возникновения и способы устранения этой ошибки приведены ниже:

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

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


Невозможно прочитать указанное свойство во время выполнения (ошибка 393).

Свойство доступно только во время выполнения. Причины возникновения и способы устранения этой ошибки приведены ниже:

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

Необходимо удалить из программы ссылку на свойство.


Указанное свойство доступно только для записи (ошибка 394).

Свойство не может быть прочитано. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	Невозможно прочитать свойство; например, допустима запись ctl.свойство = 3, но запись "Print ctl.свойство" приведет к ошибке.

Необходимо удалить из программы ссылку на свойство.


Нет разрешения на использование объекта (ошибка 419).

Нет достаточных прав на указанный объект. Причины возникновения и способы устранения этой ошибки приведены ниже:

•	В настоящий момент нет полномочий на доступ к данному объекту.

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


Невозможно создание автоматически обновляемого (AutoRedraw) изображения (ошибка 480).

Visual Basic не может создать постоянное точечное изображение для автоматического обновления формы или рисунка. Причины возникновения и способы устранения этой ошибки приведены ниже:

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

Необходимо присвоить свойству АвтоматичесокеОбновление значение False и выполнять обновление в процедуре обработки сообщения Paint, либо уменьшить элемент управления Рисунок или объект Form и повторить операцию, присвоив свойству АвтоматичесокеОбновление значение True.


Недостаточно памяти (ошибка 31001).

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


Нет объекта (ошибка 31004).

Попытка выполнения действия над несуществующим объектом.


Класс не задан (ошибка 31018).

Если при выполнении инструкции Action = 0 (метод CreateEmbed) не указан исходный документ (свойство SourceDoc (исходный документ)), свойству Класс должно быть присвоено имя класса, доступного в системе.

Для вывода списка доступных имен классов во время разработки достаточно нажать правую кнопку мыши на элементе управления контейнер OLE и выбрать команду Вставить объект.


Не удается активизировать объект (ошибка 31027).

Невозможно загрузить исходный документ объекта, либо недоступно создавшее его приложение.

Эта ошибка возникает при попытке активизировать связанный объект (set Action = 7), в то время как указанный в свойстве SourceDoc (исходный документ) файл был удален.

Ошибка возникает также при активизации объекта (set Action = 7), в то время как задаваемое свойством Verb действие является недопустимым. Некоторые приложения, поставляющие объекты, могут в зависимости от своего состояния поддерживать различные имена команд. Все поддерживаемые приложением имена команд содержатся в списке свойства ObjectVerbs. Однако некоторые имена команд могут не поддерживаться в текущем состоянии приложения.


Не удается создать встроенный объект (ошибка 31032).

Создающее объект приложение не может создать заданный в свойстве SourceDoc (исходный документ) объект.

Например, эта ошибка возникает попытке встраивания листа электронной таблицы, в то время как свойство SourceDoc (исходный документ) задает лист, который слишком велик и не может быть загружен в приложение электронной таблицы.


Ошибка сохранения в файл (ошибка 31036).

Visual Basic не может записать объект в указанный файл (set Action = 11 или 18). Возможные причины возникновения ошибки:

•	Значение свойства FileNumber (номер файла) неверно.

•	Указанный файл не был открыт в двоичном режиме.

•	Не хватает места на диске.


Ошибка загрузки из файла (ошибка 31037).

Произошла ошибка при попытке чтения указанного файла (set Action = 12). Возможные причины возникновения ошибки:

•	Значение свойства FileNumber (номер файла) неверно.

•	Файл не был открыт в двоичном режиме.

•	Файл был сохранен с ошибкой (set Action = 11).

•	Файл поврежден.

•	Указатель в файле не размещен в начале допустимого объекта OLE.


Указанная строка: недопустимое имя формы; загрузка невозможна.

Тестовый файл в формате ASCII содержит имя формы, являющееся в Visual Basic недопустимой строкой. Загрузка формы невозможна.


Указанная строка: не удается создать указанный встроенный объект.

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


Указанная строка: не удается создать указанный встроенный объект; лицензия не найдена.

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


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

Элементы управления в текстовом файле ASCII имеет глубину вложенности более 7.


Указанная строка: все элементы управления должны быть заданы перед меню; не удается загрузить указанный элемент.

Элемент управления в текстовом файле формы ASCII описан в неверной позиции. Все элементы управления должны загружаться до загрузки меню.


Указанная строка: указанное родительское меню не может быть загружено как разделитель.

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


Указанная строка: не удается пометить свойство в указанном меню. Невозможно пометить родительское меню.

Значение свойства Checked (помечено) элемента управления Menu верхнего уровня, описанного в файле формы в формате ASCII, равно True. Пометка меню верхнего уровня невозможна. Элемент управления Menu будет загружен, но его свойство Checked (помечено) установлено не будет.


Указанная строка: не удается задать быстрый вызов для свойства в указанном меню. Родительское меню не может иметь клавиши
Указанная строка: не удается задать быстрый вызов для свойства в указанном меню. Родительское меню не может иметь клавиши быстрого вызова.

Описанный в текстовом файле формы в формате ASCII элемент управления Menu верхнего уровня имеет клавиши быстрого вызова. Меню верхнего уровня не могут иметь клавиш быстрого вызова. Элемент управления Menu будет загружен, но его свойство Shortcut (клавиша быстрого вызова) установлено не будет.


Указанная строка: форма с указанным именем уже используется; загрузка невозможна.

Текстовый файл в формате ASCII содержит форму, имя которой совпадает с уже использующимся в приложении. Форма не будет загружена.


Обнаружен конфликт атрибутов в указанном элементе. Будут использованы значения по умолчанию.

Некоторые атрибуты в форме, пользовательском элементе управления, пользовательском документе или странице свойств не соответствуют требуемым для их типов значениям. Например, атрибут формы VB_PredeclaredId всегда должен быть равен True. Эта ошибка может возникнуть, если файл был изменен во внешнем редакторе.


Указанный элемент - файл доступен только для чтения.

Выполнена попытка сохранить файл, доступный только для чтения. Такие файлы отображаются в окне проекта в виде [image]. Сохранить файл, доступный только для чтения, невозможно. Вместо этого следует воспользоваться командой Сохранить как.


Указанная строка: не удается создать указанную ссылку.

Заданная в указанной строке ссылка не может быть создана.


Указанная строка: указанный файл не может быть загружен.

Из-за возникшей в Visual Basic синтаксической ошибки невозможно загрузить файл, либо конфликт имен форм мешает загрузке формы в формате ASCII. Форма не будет загружена, и ее имя не будет отображено в окне проекта.

Необходимо убедиться, что вызвавший ошибку файл содержит допустимую форму ASCII и имеет правильный формат, а также отсутствуют конфликты между различными формами проекта.


Ошибки в процессе загрузки.

Для получения более подробной информации следует обратиться к журналу ошибок.


Загрузка указанного элемента невозможна. Удалить элемент из списка допустимых надстроек?

Visual Basic не может загрузить надстройку, выбранную в списке Допустимые надстройки в окне диалога Диспетчер надстроек. Для удаления надстройки из списка следует выбрать кнопку Да, чтобы оставить ее – кнопку Нет. В любом случае загрузка этой надстройки невозможна.


Visual Basic не удается загрузить указанный элемент из-за отсутствия ссылки в системном реестре. Проверьте правильность
Visual Basic не удается загрузить указанный элемент из-за отсутствия ссылки в системном реестре. Проверьте правильность установки всех надстроек.

Visual Basic не может загрузить надстройку, выбранную в списке Допустимые надстройки в окне диалога Диспетчер надстроек, потому что она была неправильно зарегистрирована или вообще не зарегистрирована в системном реестре.


Отображать другие ошибки загрузки?

Для отображения ошибок следует выбрать OK, иначе –Отмена.


Загрузка указанного элемента невозможна.

Из-за возникшей в Visual Basic синтаксической ошибки невозможно загрузить файл, либо конфликт имен форм мешает загрузке формы в формате ASCII. Форма не будет загружена, и ее имя не будет отображено в окне проекта.

Необходимо убедиться, что вызвавший ошибку файл содержит допустимую форму ASCII и имеет правильный формат, а также отсутствуют конфликты между различными формами проекта.


Пропущен или неверно задан номер версии.

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


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

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


Невозможно удалить элемент управления или ссылку; они используются в данное время.

Удаляемый элемент управления ActiveX или ссылка используется одной из форм проекта. Сначала необходимо удалить из формы элемент управления или объект, на который имеется ссылка, а затем отменить выбор в списке.


В данное время выход невозможен.

Выход из Windows невозможен пока Visual Basic находится в режиме выполнения или в режиме прерывания. Также выход из Windows невозможен, если активно окно диалога или окно сообщения.


Ошибка загрузки указанного элемента. Ошибка при загрузке свойства. Продолжить?

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


Ошибка загрузки указанного элемента. Невозможно загрузить элемент управления из-за ошибки загрузки. Продолжить?

Это сообщение об ошибке появляется после возникновения другой ошибки. После выполнения соответствующих той ошибке действий будет выведено это сообщение об ошибке. Чтобы все-таки загрузить элемент управления следует выбрать Да; чтобы отменить загрузку – Нет.


Указанный элемент имеет старый формат. При сохранении он будет сохранен в новом формате.

Файл был создан более ранней версией Visual Basic. При сохранении он будет сохранен в формате текущей версии.


Указанный элемент уже имеется в проекте.

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


Ошибки при загрузке. За дополнительными сведениями обращайтесь к указанному элементу.

В файле формы в формате ASCII обнаружена неизвестная запись. Visual Basic создает файл журнала, куда записывает более подробную информацию об ошибках. Следует просмотреть этот файл, чтобы узнать больше о характере ошибки. Иногда ошибка может быть просто проигнорирована (например, Пропущен или неверно задан номер версии...). В других случаях возникшая ошибка может повлечь неправильную работу формы (Например, Класс МойКласс элемента МойЭлемент не является загруженным классом элементов).


Слишком длинное значение строки для обработки; загрузка формы прервана.

Встроенная в загружаемую форму строка слишком длина для продолжения загрузки.


Один или несколько файлов проекта изменены. Сохранить эти изменения сейчас?

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


Регистрация указанного элемента невозможна.

Указанный файл не удается зарегистрировать в системном реестре. Ошибка связана с библиотеками типов, используемыми компонентами среды разработки Visual Basic и показывает, что соответствующая запись в системном реестре повреждена, либо отсутствует или повреждена сама DLL.


Другие приложения имеют в данное время доступ к объекту вашей программы. Завершение программы может привести к возникновению
Другие приложения имеют в данное время доступ к объекту вашей программы. Завершение программы может привести к возникновению ошибок в этих программах. Завершить программу?

К программируемому объекту выполняемой программы на Visual Basic обращается по крайней мере еще одно приложение. Завершение программы может привести к возникновению ошибок в этой программе. Для выхода из программы следует выбрать Да, чтобы продолжить работу –Нет.


Одно или несколько свойств в указанном элементе содержат ошибки. Некоторые или все эти свойства не были заданы правильно.

Указанный файл проекта имеет одно или более неверное значение свойств. Эта ошибка возникает только в файле проекта.


Обнаружен конфликт имен в указанном элементе. Будет использовано указанное имя.

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


Указанная строка: недопустимое имя элемента управления.

Тестовый файл в формате ASCII содержит имя элемента управления, являющееся в Visual Basic недопустимой строкой. Загрузка элемента управления невозможна


Указанная строка: недопустимое имя свойства.

Тестовый файл в формате ASCII содержит имя свойства, не являющееся допустимым свойством для данного элемента управления.


Указанная строка: элемент имеет строку в кавычках, там где должно быть имя свойства.

Строка в кавычках появилась в файле формы в формате ASCII там, где должно быть имя свойства. Имена свойств не заключаются в кавычки (" ").


Указанная строка: указанное свойство имеет недопустимый индекс свойства.

Текстовый файл в формате ASCII содержит имя свойства с индексом свойства превышающим 255.


Указанная строка: не удается указанное загрузить свойство.

Текстовый файл в формате ASCII содержит неизвестное свойство.. При загрузке формы свойство будет пропущено.


Указанная строка: указанное свойство должно быть строкой в кавычках.

Текстовый файл в формате ASCII содержит свойство, которое должно быть заключено в кавычки (" "), но кавычки отсутствуют. Эта строка в описании формы будет пропущена.


Указанная строка: указанное свойство имеет недопустимое значение.

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


Указанная строка: указанное свойство имеет недопустимую ссылку на файл.

Текстовый файл в формате ASCII содержит ссылку на файл, которого нет в указанном каталоге.


Указанная строка: не удается задать указанное свойство.

Visual Basic не удается установить присвоить свойству указанного элемента управлния значение, заданное в описании формы в текстовом файле в формате ASCII.


Указанная строка: указанный класс указанного элемента не является загруженным классом элементов.

Текстовый файл в формате ASCII содержит нераспознаваемый Visual Basic класс элемента. Необходимо добавить в проект специальный элемент управления с этим классом.


Указанная строка: не удалось найти индексное свойство, и указанный элемент уже существует.

Не удается загрузить элемент управления, поскольку отсутствует индекс, и элемент имеет имя совпадающее с именем уже загруженного элемента.


Указанная строка: слишком длинное имя элемента; усечение до указанной величины.

Текстовый файл в формате ASCII содержит имя элемента, длина которого превышает 40 символов. Элемент управления будет загружен под именем, усеченным до 40 символов.


Указанная строка: слишком длинное имя класса; усечение до указанной величины.

Текстовый файл в формате ASCII содержит имя класса, длина которого превышает 40 символов. Класс будет загружен под именем, усеченным до 40 символов.


Указанная строка: ошибка синтаксиса: указанное свойство не имеет символа '='.

Текстовый файл в формате ASCII содержит имя и значение свойства, не разделенные знаком равенства (=). Свойство не будет загружено.


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

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


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

Указанный в текстовом файле в формате ASCII элемент управления не может быть загружен, поскольку его имя уже используется в приложении.


Указанная строка: отсутствует или не допускается класс элементов управления в указанном файле.

Текстовый файл в формате ASCII содержит неизвестный класс элементов управления в описании формы, либо имя является в Visual Basic недопустимой строкой.


Указанная строка: отсутствует или не допускается имя элемента управления в указанном файле.

Текстовый файл в формате ASCII содержит неизвестное имя элемента управления в описании формы, либо имя является в Visual Basic недопустимой строкой.


Указанная строка: не удается загрузить указанный элемент; лицензия не найдена.

Не удается создать элемент управления ActiveX при загрузке формы, пользовательского элемента управления, пользовательского документа или страницы свойств из текстового файла. Возможно элемент управления отсутствует или поврежден. Следует переустановить элемент управления и повторить попытку. Это сообщение заносится в файл журнала ошибок.


Указанная строка: недопустимый указанный CLSID.

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


Не удается создать ссылку на указанный элемент.

Во время установления ссылки при загрузке файла произошла ошибка, поэтому ссылка не была добавлена.


Загрузка указанного элемента выполнена не будет. Имя уже используется.

Невозможно одновременно загрузить два элемента указанного вида.


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


Пример использования инструкции ChDir

В данном примере инструкция ChDir используется для изменения текущего каталога или папки.

' Изменяет текущий каталог или папку на "MYDIR".

ChDir "MYDIR"

'В Microsoft Windows:

' Пусть текущим является диск "C:". Следующая инструкция изменяет

' каталог на диске "D:". "C:" остается текущим диском.

ChDir "D:\WINDOWS\SYSTEM"

' На Macintosh:

' Изменяет текущую папку и текущий диск.

ChDir "HD:MY FOLDER"


Пример использования инструкции ChDrive

В данном примере инструкция ChDrive используется для изменения текущего диска.

' В Microsoft Windows:

ChDrive "D"	' Сделает диск "D" текущим.

' На Macintosh:

' Сделает диск "MY DRIVE" текущим.

ChDrive "MY DRIVE:"

' Сделает текущими диск "MY DRIVE" и текущую папку,

' поскольку она является корневой.

ChDrive "MY DRIVE:MY FOLDER"


Пример использования функции CurDir

В данном примере функция CurDir используется для определения текущего пути.

' В Microsoft Windows:

' Предположим, что текущий путь на диске C - "C:\WINDOWS\SYSTEM".

Предположим, что текущий путь на диске D - "D:\EXCEL".

' Предположим, что текущий диск - C.

Dim MyPath

MyPath = CurDir	' Возвращает "C:\WINDOWS\SYSTEM".

MyPath = CurDir("C")	' Возвращает "C:\WINDOWS\SYSTEM".

MyPath = CurDir("D")	' Возвращает "D:\EXCEL".

' На Macintosh:

' Имена дисков игнорируются. Возвращается путь на текущем диске.

' Предположим, что текущий путь на диске HD - "HD:MY FOLDER".

' Предположим, что текущий диск - HD.

' Кроме того, на этом ПК существует диск MD.

Dim MyPath

MyPath = CurDir	' Возвращает "HD:MY FOLDER".

MyPath = CurDir("HD")	' Возвращает "HD:MY FOLDER".

MyPath = CurDir("MD")	' Возвращает "HD:MY FOLDER".


Пример использования функции Dir

В данном примере функция Dir используется для поиска определенных файлов и каталогов.  Для указания типа файлов на Macintosh можно использовать функцию MacID.

Dim MyFile, MyPath, MyName

' В Microsoft Windows:

' Возвращает "WIN.INI" (при наличии).

MyFile = Dir("C:\WINDOWS\WIN.INI")

' Возвращает имя файла с указанным расширением. При наличии нескольких

' файлов *.INI возвращается первый найденный файл.

MyFile = Dir("C:\WINDOWS\*.INI")

' Повторно вызывает Dir без аргументов для возврата следующего файла

' с расширением *.INI, находящегося в том же каталоге.

MyFile = Dir

' Возвращает первый файл с расширением *.TXT и атрибутом "скрытый".

MyFile = Dir("*.TXT", vbHidden)

' Возвращает список каталогов на диске C:.

MyPath = "c:\"	' Указывает путь.

MyName = Dir(MyPath, vbDirectory)	' Возвращает первый элемент.

Do While MyName <> ""	' Начинает цикл.

' Игнорирует текущий каталог и каталог предыдущего уровня.

If MyName <> "." And MyName <> ".." Then

' Использует поразрядное сравнение для проверки того,

' является ли MyName каталогом.

If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then

Debug.Print MyName	' Выводит элемент только в том

End If	' случае, если это каталог.

End If

MyName = Dir	' Возвращает следующий элемент.

Loop

' На Macintosh:

' Для указания типа файлов следует использовать функцию MacID.

' Следующая инструкция возвращает имя первого файла типа "TEXT",

' найденного в указанном каталоге или папке.

MyFile = Dir("HD:MY FOLDER:", MacID("TEXT"))


Пример использования функции Environ

В данном примере функция Environ используется для определения номера позиции инструкции PATH в таблице переменных среды, а также ее длины.

Dim EnvString, Indx, Msg, PathLen	' Объявляет переменные.

Indx = 1	' Задает индекс равный 1.

Do

EnvString = Environ(Indx)	' Определяет переменную

' среды.

If Left(EnvString, 5) = "PATH=" Then	' Ищет строку PATH.

PathLen = Len(Environ("PATH"))	' Определяет ее длину.

Msg = "номер PATH = " & Indx & ", длина = " & PathLen

Exit Do

Else

Indx = Indx + 1	' Не PATH, поэтому

End If	' увеличивает индекс.

Loop Until EnvString = ""

If PathLen > 0 Then

MsgBox Msg	' Выводит сообщение.

Else

MsgBox "Переменная среды PATH не найдена."

End If


Пример использования инструкции FileCopy

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

Dim SourceFile, DestinationFile

SourceFile = "SRCFILE"	' Файл-источник.

DestinationFile = "DESTFILE"	' Файл-адресат.

FileCopy SourceFile, DestinationFile	' Копирует файл.


Пример использования функции FileDateTime

В данном примере функция FileDateTime используется для определения даты и времени создания или последнего изменения файла.  Формат даты и времени определяется текущими системными национальными настройками.

Dim MyStamp

' Предположим, что TESTFILE был создан 12 февраля 1993 года в 16:35:47.

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

MyStamp = FileDateTime("TESTFILE")	' Возвращает "12.02.93 16:35:47".


Пример использования функции FileLen

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

Dim MySize

MySize = FileLen("TESTFILE")	' Возвращает длину файла (в байтах).


Пример использования функции GetAttr

В данном примере функция GetAttr используется для определения атрибутов файла, а также каталога или папки.

Dim MyAttr

' Предположим, что файл TESTFILE имеет атрибут "скрытый".

MyAttr = GetAttr("TESTFILE")	' Возвращает 2.

' Возвращает ненулевое значение,

' если файл TESTFILE имеет атрибут "скрытый".

Debug.Print MyAttr And vbHidden

' Предположим, что файл TESTFILE

' имеет атрибуты "скрытый" и "только для чтения".

MyAttr = GetAttr("TESTFILE")	' Возвращает 3.

' Возвращает ненулевое значение, если файл TESTFILE

' имеет атрибуты "скрытый" и "только для чтения".

Debug.Print MyAttr And (vbHidden + vbReadOnly)

' Предположим, что MYDIR является каталогом или папкой.

MyAttr = GetAttr("MYDIR")	' Возвращает 16.


Пример использования инструкции Kill

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

' Предположим что файл TESTFILE существует и содержит данные.

Kill "TestFile"	' Удаляет файл.

' В Microsoft Windows:

' Удаляет все файлы с расширением .TXT из текущего каталога.

Kill "*.TXT"

' На Macintosh:

' Функция MacID используется для удаления всех файлов типа "PICT"

' из текущей папки.

Kill MacID("PICT")


Пример использования функции MacID

В данном примере показано использование функции MacID.  Эта функция не используется в Microsoft Windows.

Dim filename, ReturnValue

' Возвращает первый текстовый файл, содержащийся в папке HD:MY FOLDER.

FileName = Dir("HD:MY FOLDER:", MacId("TEXT"))

' Удаляет все файлы типа "TEXT" из текущей папки.

Kill MacId("TEXT")

' Запускает Microsoft Excel.

ReturnValue = Shell(MacId("XCEL"))

' Активизирует Microsoft Word.

AppActivate MacId("MSWD")


Пример использования инструкции MkDir

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

MkDir "MYDIR"	' Создает новый каталог или папку.


Пример использования инструкции Name

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

Dim OldName, NewName

OldName = "OLDFILE": NewName = "NEWFILE"	' Указывает имена файлов.

Name OldName As NewName	' Переименовывает файл.

' В Microsoft Windows:

OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"

Name OldName As NewName	' Перемещает и

' переименовывает файл.

' На Macintosh:

OldName = "HD:MY FOLDER:OLDFILE": NewName = "HD:YOUR FOLDER:NEWFILE"

Name OldName As NewName	' Перемещает и

' переименовывает файл.


Пример использования функции QBColor

В данном примере функция QBColor используется для изменения цвета фона (свойства BackColor ) формы MyForm на цвет, указанный аргументом ColorCode.  Допустимыми аргументами функции QBColor являются целые числа от 0 до 15.

Sub ChangeBackColor (ColorCode As Integer, MyForm As Form)

MyForm.BackColor = QBColor(ColorCode)

End Sub


Пример использования функции RGB

В данном примере функция RGB применяется для определения  целого числа, представляющего собой код цвета RGB.  Эта функция используется для таких методов и свойств приложения, которые работают с описанием цветов.  Объект MyObject и его свойства используются исключительно в иллюстративных целях. Если объект MyObject не существует или не имеет свойства Color, возникает ошибка.

Dim RED, I, RGBValue, MyObject

Red = RGB(255, 0, 0)	' Возвращает значение для красного цвета.

I = 75	' Смещение.

RGBValue = RGB(I, 64 + I, 128 + I) 	' Эквивалентно RGB(75, 139, 203).

MyObject.Color = RGB(255, 0, 0)	' Изменяет цвет объекта

' MyObject на красный.


Пример использования инструкции RmDir

В данном примере инструкция RmDir используется для удаления существующего каталога или папки.

' Предположим, что MYDIR - пустой каталог или папка.

RmDir "MYDIR"	' Удаляет MYDIR.


Пример использования инструкции SetAttr

В данном примере инструкция SetAttr используется для установки атрибутов файла.

SetAttr "TESTFILE", vbHidden	' Устанавливает атрибут "скрытый".

SetAttr "TESTFILE", vbHidden + vbReadOnly	' Устанавливает атрибуты "скрытый" и "только для чтения".


Инструкция ChDir

Изменяет текущий каталог или папку.

Синтаксис

ChDir путь

Обязательный аргумент путь является строковым выражением, определяющим какой каталог (или папка) станет стандартным.  Аргумент путь может содержать имя диска.  Если диск не указан, инструкция ChDir изменяет стандартный каталог или папку на текущем диске.

Дополнительные сведения

Инструкция ChDir изменяет стандартный каталог, но не изменяет стандартный диск.  Например, если стандартным является диск C, то после выполнения следующей инструкции стандартным каталогом станет каталог на диске D, однако стандартным диском останется диск C:

ChDir "D:\TMP"


Инструкция ChDrive

Изменяет текущий диск.

Синтаксис

ChDrive диск

Обязательный аргумент диск является строковым выражением, указывающим существующий диск.  Если этот аргумент задается пустой строкой (""), текущий диск не изменится.  Если диск является строкой, состоящей из нескольких символов, инструкция ChDrive использует только первый символ.


Функция CurDir

Возвращает значение типа Variant (String), представляющее текущий путь.

Синтаксис

CurDir[(диск)]

Необязательный аргумент диск является строковым выражением, указывающим существующий диск.  Если диск не указан или аргумент диск является пустой строкой (""), функция CurDir возвращает путь к текущему диску.


Функция Dir

Возвращает значение типа String, представляющее имя файла, каталога или папки, которое удовлетворяет указанному шаблону имени файла, набору атрибутов файла или метке тома на диске.

Синтаксис

Dir[(путь[, атрибуты])]

Синтаксис функции Dir содержит следующие элементы:

Элемент	Описание
путь	Необязательный.  Строковое выражение, указывающее имя файла; может содержать имя каталога или папки и диска.  Если путь не найден, возвращается пустая строка ("").
атрибуты	Необязательный.  Константа или числовое выражение, описывающее атрибуты файла.  Если этот аргумент опущен, возвращаются все файлы, имена которых удовлетворяют аргументу путь.
Значения

Ниже приведены допустимые значения аргумента атрибуты:

Константа	Значение	Описание
vbNormal	0	Обычный.
vbHidden	2	Скрытый.
vbSystem	4	Системный
vbVolume	8	Метка тома; если указана, все остальные атрибуты игнорируются.
vbDirectory	16	Каталог или папка.
Примечание.   Данные константы определяются в языке Visual Basic для приложений.  Это означает, что их имена можно использовать в любом месте кода вместо фактических значений.

Дополнительные сведения

Функция Dir поддерживает использование подстановочных знаков для нескольких символов (*) и для одиночного символа (?) для указания нескольких файлов.

При первом вызове функции Dir необходимо указать путь, в противном случае возникает ошибка.  Если указаны атрибуты файла, наличие аргумента путь является обязательным.

Функция Dir возвращает первое имя файла, имя которого удовлетворяет аргументу путь.  Для получения остальных файлов, имена которых удовлетворяют указанному пути, следует повторно вызвать функцию Dir без аргументов.  Если файлов, имена которых удовлетворяют указанному пути, не осталось, возвращается пустая строка ("").  При следующем после возврата пустой строки вызове функции необходимо указать аргумент путь; в противном случае возникает ошибка.  Изменить значение аргумента путь можно в любой момент, не дожидаясь, пока закончатся файлы, имена которых удовлетворяют текущему пути.  Рекурсивный вызов функции Dir запрещен.  Вызов функции Dir с атрибутом vbDirectory не приводит к последовательному возврату подкаталогов.

Совет.   Поскольку имена файлов возвращаются в произвольном порядке, их можно сохранить в массиве, а затем отсортировать этот массив.


Функция Environ

Возвращает значение типа String, содержащее переменную среды операционной системы.

Синтаксис

Environ({envstring | number})

Синтаксис функции Environ содержит следующие именованные аргументы:

Элемент	Описание
envstring	Необязательный.  Строковое выражение, содержащее имя переменной среды.
number	Необязательный.  Числовое выражение, соответствующее номеру нужной переменной среды в таблице переменных среды.  Аргумент number может задаваться любым числовым выражением.  Он округляется до ближайшего целого числа перед выполнением операции.
Дополнительные сведения

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

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


Инструкция FileCopy

Копирует файл.

Синтаксис

FileCopy source, destination

Синтаксис инструкции FileCopy содержит следующие именованные аргументы:

Элемент	Описание
source	Обязательный.  Строковое выражение, указывающее имя файла, подлежащего копированию.  Аргумент source может содержать имя каталога или папки и диска.
destination	Обязательный.  Строковое выражение, указывающее имя результирующего файла.  Аргумент destination может содержать имя каталога или папки и диска.
Дополнительные сведения

При попытке скопировать открытый файл с помощью инструкции FileCopy возникает ошибка.


Функция FileDateTime

Возвращает значение типа Variant (Date), содержащее дату и время создания или последнего изменения файла.

Синтаксис

FileDateTime(путь)

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


Функция FileLen

Возвращает значение типа Long, содержащее размер файла в байтах.

Синтаксис

FileLen(путь)

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

Дополнительные сведения

Если в момент вызова функции FileLen указанный файл открыт, возвращается размер этого файла до его открытия.

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


Функция GetAttr

Возвращает значение типа Integer, содержащее атрибуты файла, каталога или папки.

Синтаксис

GetAttr(путь)

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

Возвращаемые значения

Значение, возвращаемое функцией GetAttr, являются суммой следующих значений:

Константа	Значение	Описание
vbNormal	0	Обычный.
vbReadOnly	1	Только чтение.
vbHidden	2	Скрытый.
vbSystem	4	Системный.
vbDirectory	16	Каталог или папка.
vbArchive	32	Файл был изменен после последнего резервирования.
Примечание.   Данные константы определяются в языке Visual Basic для приложений.  Это означает, что их имена можно использовать в любом месте кода вместо фактических значений.

Дополнительные сведения

Для определения установленных атрибутов следует с помощью оператора And выполнить поразрядное сравнение значения, возвращенного функцией GetAttr , и значения, соответствующего нужному атрибуту файла.  Ненулевой результат означает, что данный атрибут установлен.  Например, значение следующего выражения будет нулевым, если архивный атрибут не установлен:

Result = GetAttr(FName) And vbArchive

Если архивный атрибут установлен, будет возвращено ненулевое значение.


Инструкция Kill

Удаляет файлы с диска.

Синтаксис

Kill путь

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

Дополнительные сведения

Инструкция Kill поддерживает использование подстановочных знаков для нескольких символов (*) и для одиночного символа (?) для указания нескольких файлов.

При попытке удалить открытый файл с помощью инструкции Kill возникает ошибка.

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


Инструкция MkDir

Создает новый каталог или папку.

Синтаксис

MkDir путь

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


Инструкция Name

Изменяет имя файла, каталога или папки.

Синтаксис

Name староеИмя As новоеИмя

Синтаксис инструкции Name содержит следующие элементы:

Элемент	Описание
староеИмя	Обязательный.  Строковое выражение, указывающее имя и положение существующего файла; может содержать имя каталога или папки и диска.
новоеИмя	Обязательный.  Строковое выражение, указывающее новое имя и положение файла; может содержать имя каталога или папки и диска.  Файл с таким именем не должен существовать.
Дополнительные сведения

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

При попытке переименовать открытый файл с помощью инструкции Name возникает ошибка.  Прежде чем приступить к изменению имени файла, необходимо его закрыть.  В аргументах инструкции Name не допускается использование подстановочных знаков для нескольких символов (*) и оного символа (?).


Функция QBColor

Возвращает значение типа Long, представляющее код цвета в модели RGB, соответствующий указанному номеру цвета.

Синтаксис

QBColor(цвет)

Обязательный аргумент цвет задается целым числом в диапазоне от 0 до 15.

Значения

Ниже перечислены допустимые значения аргумента цвет:

Номер	Цвет	Номер	Цвет
0	Черный	8	Светло-серый
1	Темно-синий	9	Синий
2	Темно-зеленый	10	Зеленый
3	Бирюзовый	11	Голубой
4	Малиновый	12	Красный
5	Сиреневый	13	Розовый
6	Оливковый	14	Желтый
7	Темно-серый	15	Белый
Дополнительные сведения

Аргумент цвет описывает номера цветов, используемые другими версиями Basic (например, Microsoft Visual Basic для MS-DOS и Basic Compiler).  Начиная с наименее значимого байта, возвращаемое значение содержит величины красного, зеленого и синего компонентов, описывающих соответствующий цвет в системе, RGB, используемой Visual Basic для приложений.


Функция RGB

Возвращает значение типа Long, т.е. целое число, представляющее цвет в модели RGB.

Синтаксис

RGB(red, green, blue)

Синтаксис функции RGB содержит следующие именованные аргументы:

Элемент	Описание
red	Обязательный.  Значение типа Variant (Integer). Число в интервале от 0 до 255 включительно, представляющее красный компонент цвета.
green	Обязательный.  Значение типа Variant (Integer). Число в интервале от 0 до 255 включительно, представляющее зеленый компонент цвета.
blue	Обязательный.  Значение типа Variant (Integer). Число в интервале от 0 до 255 включительно, представляющее синий компонент цвета.
Дополнительные сведения

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

Значение любого аргумента функции RGB, превышающее 255, считается равным 255.

В следующей таблице перечислены некоторые стандартные цвета и соответствующие им комбинации компонентов RGB:

Цвет	Красный	Зеленый	Синий
Черный	0	0	0
Синий	0	0	255
Зеленый	0	255	0
Голубой	0	255	255
Красный	255	0	0
Розовый	255	0	255
Желтый	255	255	0
Белый	255	255	255


Инструкция RmDir

Удаляет существующий каталог или папку.

Синтаксис

RmDir путь

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

Дополнительные сведения

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


Инструкция SetAttr

Задает атрибуты файла.

Синтаксис

SetAttr pathname, attributes

Синтаксис инструкции SetAttr содержит следующие именованные аргументы:

Элемент	Описание
pathname	Обязательный.  Строковое выражение, указывающее имя файла; может содержать имя каталога или папки и диска.
attributes	Обязательный.  Константа или числовое выражение, задающее атрибуты файла.
Значения

Ниже приведены допустимые значения аргумента attributes:

Константа	Значение	Описание
vbNormal	0	Обычный (по умолчанию).
vbReadOnly	1	Только чтение.
vbHidden	2	Скрытый.
VbSystem	4	Системный.
vbArchive	32	Файл был изменен после последнего резервирования.
Примечание.   Данные константы определяются в языке Visual Basic для приложений. Это означает, что их имена можно использовать в любом месте кода вместо фактических значений.

Дополнительные сведения

При попытке изменения атрибутов открытого файла возникает ошибка выполнения.


Пример использования инструкции Close

В данном примере инструкция Close используется для закрытия трех файлов, открытых в режиме Output.

Dim I, FileName

For I = 1 To 3	' Цикл выполняется 3 раза.

FileName = "TEST" & I	' Создает имя файла.

Open FileName For Output As #I	' Открывает файл.

Print #I, "Пример."	' Записывает строку в файл.

Next I

Close	' Закрывает все 3 открытых файла.


Пример использования функции EOF

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

Dim InputData

Open "MYFILE" For Input As #1	' Открывает файл для чтения.

Do While Not EOF(1)	' Достигнут ли конец файла?

Line Input #1, InputData	' Читает строку данных.

Debug.Print InputData	' Выводит в окно отладки.

Loop

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


Пример использования функции FileAttr

В данном примере функция FileAttr используется для определения режима файла и дескриптора открытого файла.

Dim FileNum, Mode, Handle

FileNum = 1	' Присваивает номер файла.

Open "TESTFILE" For Append As FileNum	' Открывает файл.

Mode = FileAttr(FileNum, 1)	' Возвращает 8 (режим Append).

Handle = FileAttr(FileNum, 2)	' Возвращает дескриптор файла.

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


Пример использования функции FreeFile

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

Dim MyIndex, FileNumber

For MyIndex = 1 To 5	' Выполняет цикл 5 раз.

FileNumber = FreeFile	' Определяет свободный

' номер файла.

Open "TEST" & MyIndex For Output As #FileNumber	' Создает файл.

Write #FileNumber, "Пример."	' Выводит текст

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

Next MyIndex


Пример использования инструкции Get

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

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

ID As Integer

Name As String * 20

End Type

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

' Открывает файл произвольного доступа.

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

' Читает из файла с помощью инструкции Get.

Position = 3	' Определяет номер записи.

Get #1, Position, MyRecord	' Читает третью запись.

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


Пример использования инструкции Input #

В данном примере инструкция Input # используется для чтения данных из файла в две переменные.  Предположим, что текстовый файл TESTFILE существует и содержит несколько строк текста, записанных с помощью инструкции Write #, т.е. каждая строка содержит заключенную в кавычки строку и отделенное от нее запятой число, например ("Привет", 234).

Dim MyString, MyNumber

Open "TESTFILE" For Input As #1	' Открывает файл для чтения.

Do While Not EOF(1)	' Цикл до конца файла.

Input #1, MyString, MyNumber	' Читает данные в две переменные.

Debug.Print MyString, MyNumber	' Выводит данные в окно отладки.

Loop

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


Пример использования функции Input

В данном примере функция Input используется для последовательного чтения символов из файла и вывода их в окно Отладка. Предположим, что текстовый файл TESTFILE существует и содержит несколько строк данных.

Dim MyChar

Open "TESTFILE" For Input As #1	' Открывает файл.

Do While Not EOF(1)	' Цикл до конца файла.

MyChar = Input(1, #1)	' Читает один символ.

Debug.Print MyChar	' Выводит в окно "Отладка".

Loop

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


Пример использования инструкции Line Input #

В данном примере инструкция Line Input # используется для чтения строки из последовательного файла и присвоения ее переменной.  Предположим, что текстовый файл TESTFILE существует и содержит несколько строк текста.

Dim TextLine

Open "TESTFILE" For Input As #1	' Открывает файл.

Do While Not EOF(1)	' Цикл до конца файла.

Line Input #1, TextLine	' Читает строку в переменную.

Debug.Print TextLine	' Выводит в окно "Отладка".

Loop

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


Пример использования функции Loc

В данном примере функция Loc используется для определения текущей позиции открытого файла в режиме чтения/записи.  Предположим, что текстовый файл TESTFILE существует и содержит несколько строк данных.

Dim MyLocation, MyLine

Open "TESTFILE" For Binary As #1	' Открывает вновь созданный файл.

Do While MyLocation < LOF(1)	' Цикл до конца файла.

MyLine = MyLine & Input(1, #1)	' Читает строку в переменную.

MyLocation = Loc(1)	' Определяет текущую позицию внутри файла.

' Выводит в окно "Отладка".

Debug.Print MyLine; Tab; MyLocation

Loop

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


Пример использования инструкций Lock и Unlock

В данном примере с помощью инструкций Lock и Unlock  запрещается доступ других процессов к записи на время ее изменения.  Предположим, что файл TESTFILE содержит пять записей определенного пользователем типа Record.

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

ID As Integer

Name As String * 20

End Type

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

' Открывает файл произвольного доступа.

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

RecordNumber = 4	' Определяет номер записи.

Lock #1, RecordNumber	' Блокирует запись.

Get #1, RecordNumber, MyRecord	' Читает запись.

MyRecord.ID = 234	' Изменяет запись.

MyRecord.Name = "Иван Петров"

Put #1, RecordNumber, MyRecord	' Записывает измененную запись.

Unlock #1, RecordNumber	' Разблокирует текущую запись.

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


Пример использования функции LOF

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

Dim FileLength

Open "TESTFILE" For Input As #1	' Открывает файл.

FileLength = LOF(1)	' Определяет размер файла.

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


Пример использования инструкции Open

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

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

Open "TESTFILE" For Input As #1

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

Close #1

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

Open "TESTFILE" For Binary Access Write As #1

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

Close #1

Следующие инструкции открывают файл в режиме Random.  Файл содержит записи определенного пользователем типа Record.

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

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


Пример использования инструкции Print #

В данном примере инструкция 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"

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


Пример использования инструкции Put

В данном примере инструкция Put используется для записи данных в файл.  В файл записываются пять записей определенного пользователем типа Record.

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

ID As Integer

Name As String * 20

End Type

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

' Открывает файл произвольного доступа.

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

For RecordNumber = 1 To 5	' Выполняет цикл 5 раз.

MyRecord.ID = RecordNumber	' Определяет номер.

MyRecord.Name = "My Name" & RecordNumber	' Создает строку.

Put #1, RecordNumber, MyRecord	' Записывает запись в файл.

Next RecordNumber

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


Пример использования инструкции Reset

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

Dim FileNumber

For FileNumber = 1 To 5	' Выполняет цикл 5 раз.

' Открывает файл для записи. FileNumber включается в имя файла как

' строка и одновременно является числовым счетчиком цикла.

Open "TEST" & FileNumber For Output As #FileNumber

Write #FileNumber, "Всем Привет"	' Записывает данные в файл.

Next FileNumber

Reset	' Закрывает файлы и записывает содержимое

' буферов на диск.


Пример использования функции Seek

В данном примере функция Seek используется для определения текущего положения указателя внутри файла. Предположим, что файл TESTFILE содержит несколько записей определенного пользователем типа Record.

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

ID As Integer

Name As String * 20

End Type

Для файлов, открытых в режиме Random, Seek возвращает номер следующей записи.

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

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

Do While Not EOF(1)	' Цикл до конца файла.

Get #1, , MyRecord	' Читает следующую запись.

Debug.Print Seek(1)	' Выводит номер записи в окно

' "Отладка".

Loop

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

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

Dim MyChar

Open "TESTFILE" For Input As #1	' Открывает файл для чтения.

Do While Not EOF(1)	' Цикл до конца файла.

MyChar = Input(1, #1)	' Читает следующий символ данных.

Debug.Print Seek(1)	' Выводит номер байта в окно

' "Отладка".

Loop

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


Пример использования инструкции Seek

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

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

ID As Integer

Name As String * 20

End Type

Для файлов, открытых в режиме Random, Seek указывает следующую запись.

Dim MyRecord As Record, MaxSize, RecordNumber	' Объявляет переменные.

' Открывает файл произвольного доступа.

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

MaxSize = LOF(1) \ Len(MyRecord)	' Определяет число записей в файле.

' Последовательно читает все записи, начиная с последней.

For RecordNumber = MaxSize To 1 Step - 1

Seek #1, RecordNumber	' Указывает номер записи.

Get #1, , MyRecord	' Читает запись.

Next RecordNumber

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

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

Dim MaxSize, NextChar, MyChar

Open "TESTFILE" For Input As #1	' Открывает файл для чтения.

MaxSize = LOF(1)	' Определяет размер файла в байтах.

' Последовательно читает все записи, начиная с последней.

For NextChar = MaxSize To 1 Step -1

Seek #1, NextChar	' Указывает номер байта.

MyChar = Input(1, #1)	' Читает символ.

Next NextChar

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


Пример использования функции Spc

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

' Функцию Spc можно использовать в инструкции Print #.

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

Print #1, "10 пробелов между этой строкой"; Spc(10); "и этой строкой."

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

Следующая инструкция выводит текст в окно Отладка с помощью метода Print, печатая перед ним 30 пробелов.

Debug.Print Spc(30); "После тридцати пробелов..."


Пример использования функции Tab

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

' Функцию Tab можно использовать в инструкции Print #.

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

' Второе слово печатается в столбце 20.

Print #1, "Всем"; Tab(20); "привет."

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

Print #1, "Всем"; Tab; "привет"

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

Кроме того, функцию Tab можно использовать вместе с методом Print. Следующая инструкция печатает текст, начиная со столбца 10.

Debug.Print Tab(10); "Начиная со столбца 10."


Пример использования инструкции Width #

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

Dim I

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

Width #1, 5	' Устанавливает ширину равной 5.

For I = 0 To 9	' Цикл выполняется 10 раз.

Print #1, Chr(48 + I);	' Печатает по 5 символов в строке.

Next I

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


Пример использования инструкции Write #

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

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

Write #1, "Всем привет", 234	' Записывает данные, разделенные запятой.

Write #1,	' Записывает пустую строку.

Dim MyBool, MyDate, MyNull, MyError

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

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

MyError = CVErr(32767)

' Логические данные записываются как #TRUE# или #FALSE#. При выводе дат

' используется универсальный формат даты, например, #1994-07-13#

' соответствует 13 июля 1994 года. Значения Null записываются как

' #NULL#. Данные типа Error записываются как #ERROR код_ошибки#.

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

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

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

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

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


Инструкция Close

Завершает операции ввода/вывода с файлом, открытым с помощью инструкции Open.

Синтаксис

Close [списокНомеровФайлов]

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

[[#]номерФайла] [, [#]номерФайла] . . .

Дополнительные сведения

Если аргумент списокНомеровФайлов опущен, закрываются все активные файлы, открытые с помощью инструкции Open.

При закрытии файла, открытого в режиме Output или Append, в него добавляется содержимое последнего буфера вывода.  Все буферы, связанные с закрытым файлом, освобождаются.

Инструкция Close разрывает связь между файлом и соответствовавшим ему номером файла.


Функция EOF

Возвращает значение типа Integer содержащее логическое значение True при достижении конца файла.

Синтаксис

EOF(номерФайла)

Обязательный аргумент номерФайла является выражением типа Integer, содержащим любой допустимый номер файла.

Дополнительные сведения

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

Функция EOF возвращает значение False до тех пор, пока не будет достигнут конец файла.  При использовании с файлами, открытыми в режиме Random или Binary, функция EOF возвращает значение True, если последней выполненной инструкции Get не удалось считать целую запись; в противном случае возвращается значение False.

Для файлов, открытых для доступа в режиме Binary, попытка чтения файла с помощью функции Input до возвращения функцией EOF значения True приводит к ошибке.  При чтении двоичных файлов с помощью функции Input следует вместо функции EOF использовать функции LOF и Loc или использовать с функцией EOF инструкцию Get.


Функция FileAttr

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

Синтаксис

FileAttr(filenumber, returntype)

Синтаксис функции FileAttr содержит следующие именованные аргументы:

Элемент	Описание
filenumber	Обязательный.  Значение типа Integer.  Любой допустимый номер файла.
returntype	Обязательный.  Значение типа Integer.  Число, указывающее характер возвращаемых данных.  Значение 1 задает возвращение значения, указывающего режим файла.  В 16-разрядных системах значение 2 задает возвращение дескриптора файла в операционной системе.  В 32-разрядных системах значение 2 аргумента returntype не поддерживается и приводит к ошибке.
Возвращаемые значения

Ниже приведено соответствие между режимами файла и значениями, возвращаемыми в том случае, если аргумент returntype имеет значение 1:

Режим	Значение
Input	1
Output	2
Random	4
Append	8
Binary	32


Функция FreeFile

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

Синтаксис

FreeFile[(диапазонНомеров)]

Необязательный аргумент диапазонНомеров является выражением типа Variant, указывающим диапазон, из которого возвращается следующий свободный номер файла.  Значение 0 (используется по умолчанию) задает возвращение номера файла из диапазона 1 – 255 включительно.  Значение 1 задает возвращение номера файла из диапазона 256 – 511.

Дополнительные сведения

Функцию FreeFile используют для возвращения незанятого номера файла.


Инструкция Get

Читает данные из открытого файла на диске в переменную.

Синтаксис

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

Синтаксис инструкции Get содержит следующие элементы:

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

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

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

Get #4,,FileBuffer

Для файлов, открытых в режиме Random, применимы следующие правила:

•	Даже если длина данных, подлежащих чтению, меньше длины записи, указанной в предложении Len инструкции Open, инструкция Get начинает чтение каждой следующей записи с начала этой записи.  Пространство между концом одной записи и началом следующей записи заполняется текущим содержимым буфера файла.  Поскольку объем данных, используемых для заполнения, не может быть определен с достаточной степенью уверенности, рекомендуется, чтобы длина записи совпадала с длиной читаемых данных.

•	Если данные считываются в строку переменной длины, инструкция Get сначала считывает 2-байтовый дескриптор, содержащий длину строки, а затем данные, которые следует поместить в эту переменную.  Таким образом, длина записи, указанная в предложении Len инструкции Open, должна быть по крайней мере на 2 байта больше, чем фактическая длина этой строки.

•	Если данные считываются в переменную Variant числового типа, инструкция Get сначала считывает 2 байта, указывающие подтип (VarType) этой переменной, а затем данные, которые следует поместить в эту переменную.  Например, при чтении переменной Variant подтипа VarType 3 инструкция Get считывает 6 байт: 2 байта, указывающие подтип переменной Variant как VarType 3 (Long), и 4 байта, содержащие значение типа Long.  Длина записи, указанная в предложении Len инструкции Open, должна по крайней мере на 2 байта превышать фактический размер, необходимый для размещения этой переменной.

Примечание.   С помощью инструкции Get можно считать массив типа Variant с диска, однако нельзя прочитать скаляр типа Variant, содержащий массив.  Кроме того, инструкцию Get нельзя использовать для чтения объектов с диска.

•	Если данные считываются в переменную типа Variant подтипа VarType 8 (String), инструкция Get сначала считывает 2 байта, указывающие VarType, потом 2 байта, указывающие длину строки, а затем содержимое строки.  Длина записи, указанная в предложении Len инструкции Open, должна быть по крайней мере на 4 байта больше, чем фактическая длина этой строки.

•	Если данные считываются в динамический массив, инструкция Get сначала считывает дескриптор, длина которого равняется (2 + 8 * числоРазмерностей) байт.  Длина записи, указанная в предложении Len инструкции Open , должна быть больше либо равна сумме всех байтов, необходимых для размещения массива данных и дескриптора массива.  Например, для размещения описанного ниже массива требуется 118 байт

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

118 байт распределяются следующим образом: 18 для дескриптора (2 + 8 * 2) и 100 байт для данных (5 * 10 * 2).

•	Если данные считываются в массив фиксированного размера, инструкция Get считывает только данные.  Дескриптор не считывается.

•	Если данные считываются в переменную любого другого типа (кроме строки переменной длины и переменной типа Variant), инструкция Get считывает только данные.  Длина записи, указанная в предложении Len инструкции Open, должна быть больше либо равна длине данных, подлежащих считыванию.

•	Инструкция Get считывает элементы определяемых пользователем типов так, будто это отдельные переменные, за исключением того, что пространство между элементами не заполняется текущим содержимым буфера файла.  На диске динамический массив типа, определенного пользователем (записанный с помощью инструкции Put) предваряется дескриптором, длина которого равняется (2 + 8 * числоРазмерностей) байт.  Длина записи, указанная в предложении Len инструкции Open, должна быть больше либо равна сумме всех байтов, необходимых для размещения отдельных элементов, в том числе, массивов и их дескрипторов.

Для файлов, открытых в режиме Binary, применимы все перечисленные выше правила, за исключением следующих:

•	Предложение Len инструкции Open игнорируется.  Инструкция Get считывает все переменные с диска непрерывно, т.е. без заполнения пространства между записями текущим содержимым буфера файла.

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

•	При считывании строк переменной длины, не являющихся элементами типов, определяемых пользователем, 2-байтовый дескриптор не считывается.  Число считываемых байт равняется числу символов, уже содержащихся  в строке.  Например, следующие инструкции считают 10 байт из файла, которому соответствует номер 1:

VarString = String(10," ")

Get #1,,VarString


Инструкция Input #

Читает данные из открытого последовательного файла и присваивает их переменным.

Синтаксис

Input #номерФайла, списокПеременных

Синтаксис инструкции Input # содержит следующие элементы:

Элемент	Описание
номерФайла	Обязательный.  Любой допустимый номер файла.
списокПеременных	Разделяемый запятыми список переменных, которым следует присвоить значения, считанные из файла.  Нельзя использовать массивы или объектные переменные. Однако допускается использование переменных, описывающих элементы массива или определяемого пользователем типа.
Дополнительные сведения

Данные, считываемые с помощью инструкции Input #, обычно записываются в файл с помощью инструкции Write #.  Эта инструкция применима только к файлам, открытым в режиме Input или Binary.

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

Данные	Значение, присваиваемое переменной
Запятая-разделитель или пустая строка	Empty
#NULL#	Null
#TRUE# или #FALSE#	True или False
#yyyy-mm-dd hh:mm:ss#	Дата и/или время, являющиеся результатом выражения.
#ERROR кодОшибки#	кодОшибки (переменная типа Variant, помеченная как ошибка).
Прямые кавычки (" ") внутри считываемых данных игнорируются.

Элементы данных в файле должны располагаться в том же порядке, что и переменные в спискеПеременных, и иметь соответствующие переменным типы данных.  Если переменная является числовой, а элемент данных нечисловым, переменной присваивается нулевое значение.

При достижении конца файла во время считывания элемента данных ввод прекращается и возникает ошибка.

Примечание.   Чтобы иметь возможность корректно считывать данные из файла в переменные с помощью инструкции Input #, следует всегда использовать инструкцию Write # (а не Print #) для записи данных в файлы.  Использование инструкции Write # гарантирует правильность размещения разделителей между отдельными элементами данных.


Функция Input

Возвращает значение типа String, содержащее символы из файла, открытого в режиме Input или Binary.

Синтаксис

Input(число, [#]номерФайла)

Синтаксис функции Input содержит следующие элементы:

Элемент	Описание
число	Обязательный.  Любое допустимое числовое выражение, задающее число возвращаемых символов.
номерФайла	Обязательный.  Любой допустимый номер файла.
Дополнительные сведения

Данные, считываемые с помощью функции Input, обычно записываются в файл с помощью инструкции Print # или Put.  Эта функция применима только к файлам, открытым в режиме Input или Binary.

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

Для файлов, открытых для доступа в режиме Binary, попытка чтения файла с помощью функции Input до возвращения функцией EOF значения True приводит к ошибке.  При чтении двоичных файлов с помощью функции Input следует вместо функции EOF использовать функции LOF и Loc или использовать с функцией EOF инструкцию Get.

Примечание.   Эквивалентной функцией побайтовой обработки текстовых файлов является InputB.  В этом случае число указывает число байт (а не символов), которые следует вернуть.


Инструкция Line Input #

Читает строку из открытого последовательного файла и присваивает ее переменной типа String.

Синтаксис

Line Input #номерФайла, имяПеременной

Синтаксис инструкции Line Input # содержит следующие элементы:

Элемент	Описание
номерФайла	Обязательный.  Любой допустимый номер файла.
имяПеременной	Обязательный.  Допустимое имя переменной типа Variant или String.
Дополнительные сведения

Данные, считываемые с помощью инструкции Line Input #, обычно записываются в файл с помощью инструкции Print #.

Инструкция Line Input # последовательно считывает из файла по одному символу до тех пор, пока не встретит символ возврата каретки (Chr(13)) или комбинацию символов возврата каретки и перевода строки (Chr(13) + Chr(10)). Когда считанная строка присваивается переменной, символы возврата каретки и конца строки отбрасываются.


Функция Loc

Возвращает значение типа Long, определяющее текущее положение указателя чтения/записи внутри открытого файла.

Синтаксис

Loc(номерФайла)

Обязательный аргумент номерФайла типа Integer представляет любой допустимый номер файла.

Дополнительные сведения

Ниже перечислены значения, возвращаемые для каждого режима файла:

Режим	Возвращаемое значение
Random	Номер последней записи, считанной или записанной в этот файл.
Sequential	Номер текущего байта, деленный на 128.  (Следует отметить, что значение, возвращаемое функцией Loc для файлов в режиме последовательного доступа, не является ни нужным, ни необходимым).
Binary	Номер последнего считанного или записанного байта.


Инструкции Lock и Unlock

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

Синтаксис

Lock [#]номерФайла[, диапазонЗаписей]
. . .

Unlock [#]номерФайла[, диапазонЗаписей]

Синтаксис инструкций Lock и Unlock содержит следующие элементы:

Элемент	Описание
номерФайла	Обязательный.  Любой допустимый номер файла.
диапазонЗаписей	Необязательный. Диапазон записей, которые следует заблокировать или разблокировать.
Значения

Ниже приведены допустимые значения аргумента диапазонЗаписей:

номерЗаписи | [начало] To конец

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

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

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

Первой записи (или байту) файла соответствует номер 1, второй 2 и т.п.  Если указана только одна запись, то блокируется или разблокируется только одна эта запись.  Если диапазон записей указан, но опущен аргумент начало, блокируются или разблокируются все записи от первой записи до конца диапазона (конец).  Вызов инструкции Lock без аргумента номерЗаписи блокирует весь файл.  Вызов инструкции Unlock без аргумента номерЗаписи приводит к снятию блокировки со всего файла.

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

Внимание!   Перед закрытием файла или завершением работы с программой не забудьте удалить все блокировки с помощью инструкции Unlock.  Несоблюдение этого правила может привести к непредсказуемым последствиям.


Функция LOF

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

Синтаксис

LOF(номерФайла)

Обязательный аргумент номерФайла является выражением типа Integer, содержащим допустимый номер файла.

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


Инструкция Open

Разрешает выполнение с файлом операций ввода/вывода.

Синтаксис

Open путь For режим [Access доступ] [блокировка] As [#]номерФайла [Len=длина]

Синтаксис инструкции Open содержит следующие элементы:

Элемент	Описание
путь	Обязательный.  Строковое выражение, указывающее имя файла; может содержать имя каталога или папки и имя диска.
режим	Обязательный.  Ключевое слово, указывающее режим файла: Append, Binary, Input, Output или Random.  По умолчанию, файл открывается для доступа в режиме Random.
доступ	Необязательный.  Ключевое слово, указывающее операции, разрешенные с открытым файлом: Read, Write или Read Write.
блокировка	Необязательный.  Ключевое слово, указывающее операции, разрешенные с открытым файлом другим процессам: Shared, Lock Read, Lock Write и Lock Read Write.
номерФайла	Обязательный.  Допустимый номер файла в интервале от 1 до 511 включительно.  Для определения следующего свободного номера файла следует использовать функцию FreeFile.
длина	Необязательный.  Число, меньшее либо равное 32 767 (байт).  Для файлов, открытых в режиме Random, это значение является длиной записи.  Для файлов с последовательным доступом это значение является числом буферизуемых символов.
Дополнительные сведения

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

Если аргумент путь описывает несуществующий файл, такой файл будет создан при открытии в режиме Append, Binary, Output или Random.

Если файл уже открыт другим процессом и указанный режим доступа не разрешен, инструкция Open не будет выполнена и возникнет ошибка.

Если аргумент режим имеет значение Binary, предложение Len игнорируется.

Внимание!   В режимах Binary, Input и Random можно еще раз открыть уже открытый файл под другим номером, не закрывая его.  В режиме Append и Output необходимо закрыть файл, чтобы получить возможность открыть его еще раз под другим номером.


Инструкция Print #

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

Синтаксис

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

Синтаксис инструкции Print # содержит следующие элементы:

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

Ниже приведены допустимые значения аргумента списокВывода:

[{Spc(n) | Tab[(n)]}] [выражение] [позиция]

Значение	Описание
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 #, могут быть корректно прочитаны при наличии любых национальных настроек.


Инструкция Put

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

Синтаксис

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$


Инструкция Reset

Закрывает все файлы, открытые с помощью инструкции Open.

Синтаксис

Reset

Дополнительные сведения

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


Функция Seek

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

Синтаксис

Seek(номерФайла)

Обязательный аргумент номерФайла является выражением типа Integer, содержащим допустимый номер файла.

Дополнительные сведения

Функция Seek возвращает значение в интервале от 1 до 2 147 483 647 (т.е. 2^31 – 1) включительно.

Ниже приведено описание значений, возвращаемых для каждого режима доступа к файлу.

Режим	Возвращаемое значение
Random	Номер записи, которая будет считана или записана следующей.
Binary, Output, Append, Input	Номер байта, с которого начинается выполнение следующей операции ввода/вывода.  Первому байту файла соответствует номер 1, второму 2 и т.п.


Инструкция Seek

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

Синтаксис

Seek [#]номерФайла, позиция

Синтаксис инструкции Seek содержит следующие элементы:

Элемент	Описание
номерФайла	Обязательный.  Любой допустимый номер файла.
позиция	Обязательный.  Число в диапазоне 1 – 2,147,483,647 указывающее позицию, начиная с которой будет выполнена следующая операция чтения или записи.
Дополнительные сведения

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

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


Функция Spc

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

Синтаксис

Spc(n)

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

Дополнительные сведения

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

текущаяПозицияВывода + (n Mod ширина)

Например, если текущая позиция печати равняется 24, а ширина строки вывода равняется 80, то выражение Spc(90) установит следующую позицию печати равной 34 (текущая позиция печати + остаток от деления 90 на 80).  Если разность между текущей позицией печати и шириной строки вывода меньше, чем n (или n Mod ширина), функция Spc задает переход в начало следующей строки и вставку n – (ширина – текущаяПозицияВывода) пробелов.

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

При использовании метода Print и пропорционального шрифта поле печати разбивается на позиции фиксированной ширины, ширина которых равняется средней ширине всех символов текущего размера в используемом шрифте.  Такую же ширину имеют пробелы, задаваемые функцией Spc.  Следует отметить, что не существует зависимости между числом напечатанных символов и числом позиций фиксированной ширины, занимаемых этими символами.  Например, прописная буква "W" шире одной позиции, а строчная буква "I" уже.


Функция Tab

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

Синтаксис

Tab[(n)]

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

Дополнительные сведения

Если текущая позиция печати на текущей строке больше n, функция Tab вызывает переход к n-му столбцу на следующей строке вывода.  Если n меньше 1, Tab переходит к столбцу 1.  Если n больше, чем ширина строки вывода, следующая позиция печати вычисляется по приведенной ниже формуле:

n Mod ширина

Например, если ширина равняется 80, то выражение Tab(90) установит следующую позицию печати равной 10 (остаток от деления 90 на 80).  Если n меньше, чем текущая позиция печати, печать начинается в вычисленной позиции печати в следующей строке.  Если вычисленная позиция печати больше, чем текущая позиция печати, печать начинается в вычисленной позиции печати в той же строке.

Крайней левой позицией печати строки вывода всегда является 1.  При печати в файл с помощью инструкции Print # крайней правой позицией печати является текущая ширина результирующего файла, которая устанавливается с помощью инструкции Width #.

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

При использовании метода Print и функции Tab поле печати разбивается на позиции фиксированной ширины, ширина которых равняется средней ширине всех символов текущего размера в используемом шрифте.  Следует отметить, что не существует зависимости между числом напечатанных символов и числом позиций фиксированной ширины, занимаемых этими символами.  Например, прописная буква "W" шире одной позиции, а строчная буква "I" уже.


Инструкция Width #

Задает ширину строки для файла, открытого с помощью инструкции Open.

Синтаксис

Width #номерФайла, ширина

Синтаксис инструкции Width # содержит следующие элементы:

Элемент	Описание
номерФайла	Обязательный.  Любой допустимый номер файла.
ширина	Обязательный.  Числовое выражение в интервале от 0–255 включительно, которое указывает, сколько символов следует поместить на одной строке прежде, чем перейти к следующей строке.  Если ширина равняется 0 (это значение используется по умолчанию), ширина строки не ограничивается.  Аргумента ширина по умолчанию имеет значение 0.


Инструкция Write #

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

Синтаксис

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

Синтаксис инструкции Write # содержит следующие элементы:

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

Данные, записанные с помощью инструкции Write #, обычно считываются из файла с помощью инструкции Input #.

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

Ниже приведены правила, которые используются при записи данных в файл с помощью инструкции Write #.  Записанные данные могут быть корректно прочитаны с помощью инструкции Input # при наличии любой национальной настройки:

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

•	При выводе логических данных (тип Boolean) в файл записываются ключевые слова #TRUE# или #FALSE#. Ключевые слова True и False не переводятся.

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

•	Если аргумент списокВывода имеет значение Empty, в файл ничего не записывается.

•	Если списокВывода имеет значение Null, в файл записывается #NULL#.

•	Данные типа Error записываются в файл как #ERROR кодОшибки#.  Ключевое слово Error не переводится.

В отличие от инструкции Print #, инструкция Write # вставляет запятые между элементами и заключает строки в кавычки по мере записи их в файл.  Разработчику не требуется включать разделители в список явным образом.  Write # вставляет символ новой строки, т.е. комбинацию символов возврата каретки и перевода строки (Chr(13) + Chr(10)), после записи в файл последнего символа, включенного в списокВывода.


Пример использования функции DDB

В данном примере функция DDB используется для вычисления снижения стоимости фондов за определенный период.  В качестве входных данных используются значения начальной стоимости фондов (InitCost), остаточной стоимости (SalvageVal), периода эксплуатации (LifeTime) в годах, и периода, для которого вычисляется снижение стоимости (Depr), также в годах.

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, Depr

Const YRMOS = 12	' Число месяцев в году.

Fmt = "###,##0.00"

InitCost = InputBox("Какова исходная стоимость фондов?")

SalvageVal = InputBox("Какова остаточная стоимость фондов?

MonthLife = InputBox("Каков период эксплуатации в месяцах?")

Do While MonthLife < YRMOS	' Период в годах должен быть >= 1.

MsgBox "Период эксплуатации должен быть не меньше 1 года"

MonthLife = InputBox("Каков период эксплуатации в месяцах?")

Loop

LifeTime = MonthLife / YRMOS	' Преобразуем месяцы в годы.

If LifeTime <> Int(MonthLife / YRMOS) Then

LifeTime = Int(LifeTime + 1)	' Округляем в годах.

End If

DepYear = CInt(InputBox("За какой год вычислить снижение стоимости?"))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "Введите число от 1 до " & LifeTime

DepYear = InputBox("За какой год вычислить снижение стоимости?")

Loop

Depr = DDB(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "Снижение стоимости за " & DepYear & " год равно " & _

Format(Depr, Fmt) & "."


Пример использования функции FV

В данном примере функция FV используется для вычисления суммы накоплений. В качестве исходных значений при расчете используется процентная ставка, возрастающая за определенный период (APR / 12), число выплат (TotPmts), размер платежа (Payment), текущий объем накоплений (PVal), а также режим выплат (PayType), т.е. число, определяющее, производятся платежи в начале или в конце периода.  Так как Payment определяет выплачиваемые суммы, этой величине присваивается знак "минус".

Dim Fmt, Payment, APR, TotPmts, PayType, PVal, FVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Режим выплат.

Fmt = "###,###,##0.00"	' Денежный формат.

Payment = InputBox("Сколько предполагается вносить в месяц?")

APR = InputBox("Какова ожидаемая годовая учетная ставка?")

If APR > 1 Then APR = APR / 100	' Правильная форма.

TotPmts = InputBox("Сколько месяцев вы будете вносить платежи?")

PayType = MsgBox("Платежи вносятся в конце месяца?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

PVal = InputBox("Сколько денег имеется на счету сейчас?")

FVal = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)

MsgBox "Будущий объем накоплений: " & Format(FVal, Fmt) & "."


Пример использования функции IPmt

В данном примере функция IPmt используется для вычисления части платежа, приходящейся на выплату процентов, если величина регулярных платежей остается постоянной.  В качестве входных значений при расчете используется процентная ставка (APR / 12) номер периода платежа (Period), число взносов (TotPmts), текущий объем займа (PVal), необходимый результат (FVal), а также режим выплат (PayType), т.е. число, определяющее, производятся платежи в начале или в конце периода.

Dim FVal, Fmt, PVal, APR, TotPmts, PayType, Period, IntPmt, TotInt, Msg

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Режим выплат.

FVal = 0	' Для займа обычно 0.

Fmt = "###,###,##0.00"	' Денежный формат.

PVal = InputBox("Каков объем займа?")

APR = InputBox("Какова годовая учетная ставка?")

If APR > 1 Then APR = APR / 100	' Правильная форма.

TotPmts = InputBox("Каково число ежемесячных выплат?")

PayType = MsgBox("Выплаты производятся в конце месяца?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

For Period = 1 To TotPmts	' Суммирование процентов.

IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

TotInt = TotInt + IntPmt

Next Period

Msg = "Общий объем выплат по займу," & Format(TotInt, Fmt)

Msg = Msg & " приходящийся на проценты."

MsgBox Msg	' Вывод результатов.


Пример использования функции IRR

В данном примере функция IRR используется для вычисления нормы прибыли по пяти операциям, занесенным в массив Values().  Первый элемент массива имеет отрицательное значение и соответствует начальным затратам на организацию бизнеса.  Оставшиеся четыре элемента имеют положительные значения и представляют прибыль за четыре следующих года.  Guess отвечает начальному значению для расчета нормы прибыли.

Dim Guess, Fmt, RetRate, Msg

Static Values(5) As Double	' Объявляет массив.

Guess = .1	' Начинает с 10 процентов.

Fmt = "#0.00"	' Процентный формат.

Values(0) = -70000	' Затраты на организацию бизнеса.

' Положительные суммы, отвечающие доходу за 4 года.

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = IRR(Values(), Guess) * 100	' Норма прибыли.

Msg = "Норма прибыли по пяти операциям составляет "

Msg = Msg & Format(RetRate, Fmt) & " процентов."

MsgBox Msg	' Выводим норму прибыли.


Пример использования функции MIRR

В данном примере функция MIRR используется для расчета модифицированной нормы прибыли по операциям, занесенным в массив Values(). LoanAPR представляет ставку по финансированию, а InvAPR -- процент по реинвестициям.

Dim LoanAPR, InvAPR, Fmt, RetRate, Msg

Static Values(5) As Double	' Объявляет массив.

LoanAPR = .1	' Ставка по займу.

InvAPR = .12	' Ставка по реинвестициям.

Fmt = "#0.00"	' Денежный формат.

Values(0) = -70000	' Затраты на организацию бизнеса.

' Положительные суммы, отвечающие доходу за 4 года.

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = MIRR(Values(), LoanAPR, InvAPR)	' Calculate internal rate.

Msg = "Модифицированная норма прибыли по пяти операциям составляет "

Msg = Msg & Format(Abs(RetRate) * 100, Fmt) & "%."

MsgBox Msg	' Выводим норму прибыли

' rate.


Пример использования функции NPer

В данном примере функция NPer используется для определения числа периодов (платежей), необходимых для погашения займа, значение которого находится в переменной PVal.  В качестве входных значений при расчете используется процентная ставка (APR / 12), размер разовых выплат (Payment), необходимый результат (FVal), а также число, задающее режим выплат (PayType).

Dim FVal, PVal, APR, Payment, PayType, TotPmts

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Режим выплат.

FVal = 0	' Для займа обычно 0.

PVal = InputBox("Каков объем займа?")

APR = InputBox("Какова годовая учетная ставка?")

If APR > 1 Then APR = APR / 100	' Правильная форма.

Payment = InputBox("Какова величина ежемесячных выплат?")

PayType = MsgBox("Выплаты производятся в конце месяца?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

TotPmts = NPer(APR / 12, -Payment, PVal, FVal, PayType)

If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1

MsgBox "Выплата займа займет " & TotPmts & " месяцев."


Пример использования функции NPV

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

Dim Fmt, Guess, RetRate, NetPVal, Msg

Static Values(5) As Double	' Объявляет массив.

Fmt = "###,##0.00"	' Денежный формат.

Guess = .1	' Начинает с 10 процентов.

RetRate = .0625	' Норма прибыли.

Values(0) = -70000	' Затраты на организацию бизнеса.

' Положительные суммы, отвечающие доходу за 4 года.

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

NetPVal = NPV(RetRate, Values())	' Проекция на текущий момент.

Msg = "Проекция итогов серии операций на текущий момент составляет "

Msg = Msg & Format(NetPVal, Fmt) & "."

MsgBox Msg	' Выводит результат.


Пример использования функции Pmt

В данном примере функция Pmt используется для расчета величины ежемесячных выплат по займу за определенный период.  В качестве входных значений при расчете используется процентная ставка (APR / 12), полное число выплат (TotPmts), текущий объем займа (PVal), необходимый результат (FVal), а также число, задающее режим выплат (PayType).

Dim Fmt, FVal, PVal, APR, TotPmts, PayType, Payment

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Режим выплат.

Fmt = "###,###,##0.00"	' Денежный формат.

FVal = 0	' Для займа обычно 0.

PVal = InputBox("Каков объем займа?")

APR = InputBox("Какова годовая учетная ставка?")

If APR > 1 Then APR = APR / 100	' Правильная форма.

TotPmts = InputBox("Каково число ежемесячных выплат?")

PayType = MsgBox("Выплаты производятся в конце месяца?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Pmt(APR / 12, TotPmts, -PVal, FVal, PayType)

MsgBox "Размер взноса составит " & Format(Payment, Fmt) & " в месяц."


Пример использования функции PPmt

В данном примере используется функция PPmt для определения части платежа, приходящейся на выплату собственно займа. Предполагается, что величина регулярного платежа остается постоянной.  В качестве входных значений при расчете используется процентная ставка (APR / 12), номер периода (платежа) (Period), число взносов (TotPmts), текущий объем займа (PVal), необходимый результат (FVal), а также число, задающее режим выплат (PayType).

Dim NL, TB, Fmt, FVal, PVal, APR, TotPmts, PayType, Payment, Msg, MakeChart, Period, P, I

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Режим платежей.

NL = Chr(13) & Chr(10)	' Новая строка.

TB = Chr(9)	' Табуляция.

Fmt = "###,###,##0.00"	' Денежный формат.

FVal = 0	' Для займа обычно 0.

PVal = InputBox("Каков объем займа?")

APR = InputBox("Какова годовая учетная ставка?")

If APR > 1 Then APR = APR / 100	' Правильная форма.

TotPmts = InputBox("Каково число ежемесячных выплат?")

PayType = MsgBox("Выплаты производятся в конце месяца?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))

Msg = "Общий объем платежа составляет " & Format(Payment, Fmt) & ". "

Msg = Msg & "Выдать раскладку по выплате собственно займа "

Msg = Msg & "и процентов?"

MakeChart = MsgBox(Msg, vbYesNo)	'  Нужна ли раскладка.

If MakeChart <> vbNo Then

If TotPmts > 12 Then MsgBox "Сведения только за первый год."

Msg = "Месяц  Взнос  Осн.часть  Проценты" & NL

For Period = 1 To TotPmts

If Period > 12 Then Exit For	' Только первые 12.

P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

P = (Int((P + .005) * 100) / 100)	' Округляет.

I = Payment - P

I = (Int((I + .005) * 100) / 100)	' Округляет проценты.

Msg = Msg & Period & TB & Format(Payment, Fmt)

Msg = Msg & TB & Format(P, Fmt) & TB & Format(I, Fmt) & NL

Next Period

MsgBox Msg	' Выводит таблицу.

End If


Пример использования функции PV

В данном примере используется функция PV для вычисления проекции суммы в 1 000 000, которая изымается по частям (по 50 000 ежегодно) в течение 20 лет.  В качестве входных значений при расчете используется оценочная процентная ставка (APR), число платежей (TotPmts), размер снятой суммы (YrIncome), полная итоговая сумма (FVal), а также число, задающее режим выплат (PayType).  Так как снятая сумма YrIncome собой изъятые деньги, ей приписывается отрицательный знак .

Dim Fmt, APR, TotPmts, YrIncome, FVal, PayType, PVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Режим платежей.

Fmt = "###,##0.00"	' Денежный формат.

APR = .0825	' Процентная ставка за год.

TotPmts = 20	' Полное число платежей.

YrIncome = 50000	' Снимается за год.

FVal = 1000000	' Результат.

PayType = BEGINPERIOD	' Выплаты в начале месяца.

PVal = PV(APR, TotPmts, -YrIncome, FVal, PayType)

MsgBox "Проекция составляет " & Format(PVal, Fmt) & "."


Пример использования функции Rate

В данном примере используется функция Rate для расчета ставки по займу. В качестве входных значений при расчете используется число взносов (TotPmts), размер взноса (Payment), текущий объем займа (PVal), результирующий объем займа (FVal), число, задающее режим выплат (PayType), а также оценка величины ставки (Guess).

Dim Fmt, FVal, Guess, PVal, Payment, TotPmts, PayType, APR

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Режим выплат.

Fmt = "##0.00"	' Процентный формат.

FVal = 0	' Для займа обычно 0.

Guess = .1	' Начинает с 10 процентов.

PVal = InputBox("Каков объем займа?")

Payment = InputBox("Какова величина ежемесячного взноса?")

TotPmts = InputBox("Сколько месяцев вы будете делать взносы?")

PayType = MsgBox("Выплаты производятся в конце месяца?", _

vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

APR = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100

MsgBox "Искомая ставка составляет " & Format(CInt(APR), Fmt) & " %."


Пример использования функции SLN

В данном примере используется функция SLN для расчета снижения стоимости фондов за выбранный период по методу с равномерной раскладкой.  В качестве входных данных используются значения начальной стоимости фондов (InitCost), остаточной стоимости (SalvageVal) и периода эксплуатации (LifeTime) в годах .

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, PDepr

Const YEARMONTHS = 12	' Число месяцев в году.

Fmt = "###,##0.00"	' Денежный формат.

InitCost = InputBox("Какова исходная стоимость фондов?")

SalvageVal = InputBox("Какова остаточная стоимость фондов?")

MonthLife = InputBox("Каков период эксплуатации в месяцах?")

Do While MonthLife < YEARMONTHS	' Период в годах должен быть >= 1.

MsgBox "Период должен быть не меньше 1 года."

MonthLife = InputBox("Каков период эксплуатации в месяцах?")

Loop

LifeTime = MonthLife / YEARMONTHS	' Преобразует месяцы в годы.

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' Округляет в годах.

End If

PDepr = SLN(InitCost, SalvageVal, LifeTime)

MsgBox "Снижение стоимости равно " & Format(PDepr, Fmt) & " за год."


Пример использования функции SYD

В данном примере используется функция SYD для вычисления снижения стоимости фондов за выбранный период.  В качестве входных данных используются значения начальной стоимости фондов (InitCost), остаточной стоимости (SalvageVal), периода эксплуатации (LifeTime) в годах, и периода Pdepr, для которого вычисляется снижение стоимости, также в годах.

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, PDepr

Const YEARMONTHS = 12	' Число месяцев в году.

Fmt = "###,##0.00"	' Денежный формат.

InitCost = InputBox("Какова исходная стоимость фондов?")

SalvageVal = InputBox("Какова остаточная стоимость фондов?")

MonthLife = InputBox("Каков период эксплуатации в месяцах?")

Do While MonthLife < YEARMONTHS	' Период в годах >= 1.

MsgBox "Период должен быть не меньше 1 года."

MonthLife = InputBox("Каков период эксплуатации в месяцах?")

Loop

LifeTime = MonthLife / YEARMONTHS	' Преобразует месяцы в годы.

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	'Округляет в годах.

End If

DepYear = CInt(InputBox("За какой год вычислить снижение стоимости?"))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "Введите число от 1 до " & LifeTime

DepYear = CInt(InputBox("За какой год вычислить снижение стоимости?"))

Loop

PDepr = SYD(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "Снижение стоимости за " & DepYear & " год равно " & Format(PDepr, Fmt) & "."


Функция DDB

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

Синтаксис

DDB(cost, salvage, life, period[, factor])

Синтаксис функции DDB содержит следующие именованные аргументы:

Элемент	Описание
cost	Обязательный.  Выражение типа Double, указывающее начальную стоимость фондов.
salvage	Обязательный.  Выражение типа Double, указывающее стоимость фондов к концу периода эксплуатации.
life	Обязательный.  Выражение типа Double, указывающее длительность периода эксплуатации.
period	Обязательный.  Выражение типа Double, указывающее период времени, для которого вычисляется снижение стоимости.
factor	Необязательный.  Выражение типа Variant, указывающее фактор расчета снижения стоимости.  Если этот аргумент опущен, используется значение по умолчанию 2 (двойное убывание).
Дополнительные сведения

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

Аргументы life и period должны задаваться в одних и тех же единицах.  Например, если длительность периода эксплуатации life выражена в месяцах, period также следует указать в месяцах.  Все аргументы должны иметь положительные значения.

Расчет значения функции DDB производится по следующей формуле:

Снижение стоимости за period = ((cost – salvage) * factor) / life


Функция FV

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

Синтаксис

FV(rate, nper, pmt[, pv[, type]])

Синтаксис функции FV содержит следующие именованные аргументы:

Элемент	Описание
rate	Обязательный.  Выражение типа Double, указывающее учетную ставку за период.  Например, при выплате займа на приобретение автомобиля из расчета 10 процентов годовых, ежемесячная ставка составит 0 1/12, т.е. 0,0083.
nper	Обязательный.  Выражение типа Integer, указывающее полное число периодов (выплат) за рассматриваемый срок.  Например, если заем на приобретение автомобиля взят на четыре года, число месячных периодов (количество выплат) составит 4 * 12 (48).
pmt	Обязательный.  Выражение типа Double, указывающее размер выплат за период.  Каждый платеж включает как собственно возвращаемую сумму, так и проценты, которые не изменяются от одного платежа к другому.
pv	Необязательный.  Выражение типа Variant, указывающее величину суммы на текущий момент.  Например, при займе на покупку автомобиля, сумма займа является текущим значением при расчете будущих платежей.  Если этот аргумент опущен, подразумевается значение 0.
type	Необязательный.  Выражение типа Variant, указывающее режим выплат.  Значение 0 означает, что платежи вносятся в конце каждого периода, а значение 1, что они вносятся в начале каждого периода.  Если этот аргумент опущен, подразумевается значение 0.
Дополнительные сведения

Функция подходит для расчета выплат по закладной (например за дом) или итогов накоплений при ежемесячных банковских взносах.

Аргументы rate и nper должны задаваться в расчете на одну и ту же единицу времени.  Например, если ставка rate исчисляется за месяц, то и число периодов (выплат) nper также следует указать в месяцах.

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


Функция IPmt

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

Синтаксис

IPmt(rate, per, nper, pv[, fv[, type]])

Синтаксис функции IPmt содержит следующие именованные аргументы:

Элемент	Описание
rate	Обязательный.  Выражение типа Double, указывающее учетную ставку за период.  Например, при выплате займа на приобретение автомобиля из расчета 10 процентов годовых, ежемесячная ставка составит 0 1/12, т.е. 0,0083.
per	Обязательный.  Выражение типа Double, указывающее номер периода (взноса) (в диапазоне от 1 до nper).
nper	Обязательный.  Выражение типа Double, указывающее полное число периодов (выплат) за рассматриваемый срок.  Например, если заем на приобретение автомобиля взят на четыре года, число месячных периодов (количество выплат) составит 4 * 12 (48).
pv	Обязательный.  Выражение типа Double, указывающее величину суммы на текущий момент.  Например, при займе на покупку автомобиля, сумма займа является текущим значением при расчете будущих платежей.
fv	Необязательный.  Выражение типа Variant, указывающее результат, который должен быть достигнут по завершении выплат.  Для займа это, очевидно, нулевое значение (заем должен быть погашен).  Если же вы копите деньги на обучение ребенка, а всего накопить следует 50 000 долларов за 18 лет, то результатом является сумма в 50 000 долларов.  Если этот аргумент опущен, подразумевается значение 0.
type	Необязательный.  Выражение типа Variant, указывающее режим выплат.  Значение 0 означает, что платежи вносятся в конце каждого периода, а значение 1, что они вносятся в начале каждого периода.  Если этот аргумент опущен, подразумевается значение 0.
Дополнительные сведения

Функция подходит для расчета выплат по закладной (например за дом) или итогов накоплений при ежемесячных банковских взносах.

Аргументы rate и nper должны задаваться в расчете на одну и ту же единицу времени.  Например, если ставка rate исчисляется за месяц, то и число периодов (выплат) nper также следует указать в месяцах.

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


Функция IRR

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

Синтаксис

IRR(values()[, guess])

Синтаксис функции IRR содержит следующие именованные аргументы:

Элемент	Описание
values()	Обязательный.  Массив типа Double, содержащий значения выплат и поступлений.  Массив должен содержать как минимум одно отрицательное значение, соответствующее выплате, и одно положительное значение (поступление).
guess	Необязательный.  Выражение типа Variant, содержащее оценку значения, возвращенного функцией IRR.  Если этот аргумент опущен, используется значение по умолчанию 0.1 (10 процентов).
Дополнительные сведения

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

Порядок операций (выплат и поступлений) функция IRR определяет по номерам элементов массива.  По этой причине взаимное расположение элементов обязательно должно соответствовать действительности.  Сами элементы массива вовсе не обязаны в данном случае быть одинаковыми.

Значение функции IRR определяется итерационным путем.  В качестве начального значения используется аргумент guess.  Итерации завершаются по достижении точности в 0,00001 процента.  Если после 20 итераций результат получить не удается, функция IRR завершает итерационный цикл.


Функция MIRR

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

Синтаксис

MIRR(values(), finance_rate, reinvest_rate)

Синтаксис функции MIRR содержит следующие именованные аргументы:

Элемент	Описание
values()	Обязательный.  Массив типа Double, содержащий значения выплат и поступлений.  Массив должен содержать как минимум одно отрицательное значение, соответствующее выплате, и одно положительное значение (поступление).
finance_rate	Обязательный.  Выражение типа Double, указывающее ставку по инвестициям.
reinvest_rate	Обязательный.  Выражение типа Double, указывающее процент, получаемый от реинвестиций полученных денег.
Дополнительные сведения

Норма прибыли представляет собой процент по инвестициям, получаемый в результате регулярно происходящих выплат и поступлений денег.  Модифицированная норма прибыли исчисляется, исходя из разных ставок по инвестициям (finance_rate) и реинвестициям (reinvest_rate).

Аргументы finance_rate и reinvest_rate задаются как десятичные дроби.  Например, значение 12 процентов выражается как 0,12.

Порядок операций (выплат и поступлений) функция MIRR определяет по номерам элементов массива.  По этой причине взаимное расположение элементов обязательно должно соответствовать действительности.


Функция Nper

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

Синтаксис

NPer(rate, pmt, pv[, fv[, type]])

Синтаксис функции NPer содержит следующие именованные аргументы:

Элемент	Описание
rate	Обязательный.  Выражение типа Double, указывающее учетную ставку за период.  Например, при выплате займа на приобретение автомобиля из расчета 10 процентов годовых, ежемесячная ставка составит 0 1/12, т.е. 0,0083.
pmt	Обязательный.  Выражение типа Double, указывающее размер выплат за период.  Каждый платеж включает как собственно возвращаемую сумму, так и проценты, которые не изменяются от одного платежа к другому.
pv	Обязательный.  Выражение типа Double, указывающее величину суммы на текущий момент.  Например, при займе на покупку автомобиля, сумма займа является текущим значением при расчете будущих платежей.
fv	Необязательный.  Выражение типа Variant, указывающее результат, который должен быть достигнут по завершении выплат.  Для займа это, очевидно, нулевое значение (заем должен быть погашен).  Если же вы копите деньги на обучение ребенка, а всего накопить следует 50 000 долларов за 18 лет, то результатом является сумма в 50000 долларов.  Если этот аргумент опущен, подразумевается значение 0.
type	Необязательный.  Выражение типа Variant, указывающее режим выплат.  Значение 0 означает, что платежи вносятся в конце каждого периода, а значение 1, что они вносятся в начале каждого периода.  Если этот аргумент опущен, подразумевается значение 0.
Дополнительные сведения

Функция подходит для расчета выплат по закладной (например за дом) или итогов накоплений при ежемесячных банковских взносах.

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


Функция NPV

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

Синтаксис

NPV(rate, values())

Синтаксис функции NPV содержит следующие именованные аргументы:

Элемент	Описание
rate	Обязательный.  Выражение типа Double, указывающее скорость уценки капитала, выраженную как десятичное число.
values()	Обязательный.  Массив типа Double, содержащий значения выплат и поступлений.  Массив должен содержать как минимум одно отрицательное значение, соответствующее выплате, и одно положительное значение (поступление).
Дополнительные сведения

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

Порядок операций (выплат и поступлений) функция NPV определяет по номерам элементов массива.  По этой причине взаимное расположение элементов обязательно должно соответствовать действительности.

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

Расчет проекции основан на итогах будущих операций.  Если первая операция происходит непосредственно в момент начала инвестиций, соответствующее ей значение следует просто прибавить к возвращаемому NPV результату.  В массив values() это значение включать не следует.

Функции NPV и PV похожи с тем лишь исключением, что в отличие от функции NPV функция PV разрешает регистрацию операций не только в конце, но и в начале каждого периода.  Кроме того, в отличие от функции PV функция NPV разрешает использовать не только постоянные, но и переменные суммы операций.


Функция Pmt

Возвращает значение типа Double, указывающее объем регулярных платежей по займу при фиксированной учетной ставке.

Синтаксис

Pmt(rate, nper, pv[, fv[, type]])

Синтаксис функции Pmt содержит следующие именованные аргументы:

Элемент	Описание
rate	Обязательный.  Выражение типа Double, указывающее учетную ставку за период.  Например, при выплате займа на приобретение автомобиля из расчета 10 процентов годовых, ежемесячная ставка составит 0 1/12, т.е. 0,0083.
nper	Обязательный.  Выражение типа Integer, указывающее полное число периодов (выплат) за рассматриваемый срок.  Например, если заем на приобретение автомобиля взят на четыре года, число месячных периодов (количество выплат) составит 4 * 12 (48).
pv	Обязательный.  Выражение типа Double, указывающее величину суммы на текущий момент.  Например, при займе на покупку автомобиля, сумма займа является текущим значением при расчете будущих платежей.
fv	Необязательный.  Выражение типа Variant, указывающее результат, который должен быть достигнут по завершении выплат.  Для займа это, очевидно, нулевое значение (заем должен быть погашен).  Если же вы копите деньги на обучение ребенка, а всего накопить следует 50 000 долларов за 18 лет, то результатом является сумма в 50000 долларов.  Если этот аргумент опущен, подразумевается значение 0.
type	Необязательный.  Выражение типа Variant, указывающее режим выплат.  Значение 0 означает, что платежи вносятся в конце каждого периода, а значение 1, что они вносятся в начале каждого периода.  Если этот аргумент опущен, подразумевается значение 0.
Дополнительные сведения

Функция подходит для расчета выплат по закладной (например за дом) или итогов накоплений при ежемесячных банковских взносах.

Аргументы rate и nper должны задаваться в расчете на одну и ту же единицу времени.  Например, если ставка rate исчисляется за месяц, то и число периодов (выплат) nper также следует указать в месяцах.

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


Функция PPmt

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

Синтаксис

PPmt(rate, per, nper, pv[, fv[, type]])

Синтаксис функции PPmt содержит следующие именованные аргументы:

Элемент	Описание
rate	Обязательный.  Выражение типа Double, указывающее учетную ставку за период.  Например, при выплате займа на приобретение автомобиля из расчета 10 процентов годовых, ежемесячная ставка составит 0 1/12, т.е. 0,0083.
per	Обязательный.  Выражение типа Integer, указывающее число периодов (выплат) в диапазоне от 1 до nper.
nper	Обязательный.  Выражение типа Integer, указывающее полное число периодов (выплат) за рассматриваемый срок.  Например, если заем на приобретение автомобиля взят на четыре года, число месячных периодов (количество выплат) составит 4 * 12 (48).
pv	Обязательный.  Выражение типа Double, указывающее величину суммы на текущий момент.  Например, при займе на покупку автомобиля, сумма займа является текущим значением при расчете будущих платежей.
fv	Необязательный.  Выражение типа Variant, указывающее результат, который должен быть достигнут по завершении выплат.  Для займа это, очевидно, нулевое значение (заем должен быть погашен).  Если же вы копите деньги на обучение ребенка, а всего накопить следует 50 000 долларов за 18 лет, то результатом является сумма в 50000 долларов.  Если этот аргумент опущен, подразумевается значение 0.
type	Необязательный.  Выражение типа Variant, указывающее режим выплат.  Значение 0 означает, что платежи вносятся в конце каждого периода, а значение 1, что они вносятся в начале каждого периода.  Если этот аргумент опущен, подразумевается значение 0.
Дополнительные сведения

Функция подходит для расчета выплат по закладной (например за дом) или итогов накоплений при ежемесячных банковских взносах.

Аргументы rate и nper должны задаваться в расчете на одну и ту же единицу времени.  Например, если ставка rate исчисляется за месяц, то и число периодов (выплат) nper также следует указать в месяцах.

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


Функция PV

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

Синтаксис

PV(rate, nper, pmt[, fv[, type]])

Синтаксис функции PV содержит следующие именованные аргументы:

Элемент	Описание
rate	Обязательный.  Выражение типа Double, указывающее учетную ставку за период.  Например, при выплате займа на приобретение автомобиля из расчета 10 процентов годовых, ежемесячная ставка составит 0 1/12, т.е. 0,0083.
nper	Обязательный.  Выражение типа Integer, указывающее полное число периодов (выплат) за рассматриваемый срок.  Например, если заем на приобретение автомобиля взят на четыре года, число месячных периодов (количество выплат) составит 4 * 12 (48).
pmt	Обязательный.  Выражение типа Double, указывающее размер выплат за период.  Каждый платеж включает как собственно возвращаемую сумму, так и проценты, которые не изменяются от одного платежа к другому.
fv	Необязательный.  Выражение типа Variant, указывающее результат, который должен быть достигнут по завершении выплат.  Для займа это, очевидно, нулевое значение (заем должен быть погашен).  Если же вы копите деньги на обучение ребенка, а всего накопить следует 50 000 долларов за 18 лет, то результатом является сумма в 50000 долларов.  Если этот аргумент опущен, подразумевается значение 0.
type	Необязательный.  Выражение типа Variant, указывающее режим выплат.  Значение 0 означает, что платежи вносятся в конце каждого периода, а значение 1, что они вносятся в начале каждого периода.  Если этот аргумент опущен, подразумевается значение 0.
Дополнительные сведения

Функция подходит для расчета выплат по закладной (например за дом) или итогов накоплений при ежемесячных банковских взносах.

Аргументы rate и nper должны задаваться в расчете на одну и ту же единицу времени.  Например, если ставка rate исчисляется за месяц, то и число периодов (выплат) nper также следует указать в месяцах.

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


Функция Rate

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

Синтаксис

Rate(nper, pmt, pv[, fv[, type[, guess]]])

Синтаксис функции Rate содержит следующие именованные аргументы:

Элемент	Описание
nper	Обязательный.  Выражение типа Double, указывающее полное число периодов (выплат) за рассматриваемый срок.  Например, если заем на приобретение автомобиля взят на четыре года, число месячных периодов (количество выплат) составит 4 * 12 (48).
Pmt	Обязательный.  Выражение типа Double, указывающее размер выплат за период.  Каждый платеж включает как собственно возвращаемую сумму, так и проценты, которые не изменяются от одного платежа к другому.
Pv	Обязательный.  Выражение типа Double, указывающее величину суммы на текущий момент.  Например, при займе на покупку автомобиля, сумма займа является текущим значением при расчете будущих платежей.
Fv	Необязательный.  Выражение типа Variant, указывающее результат, который должен быть достигнут по завершении выплат.  Для займа это, очевидно, нулевое значение (заем должен быть погашен).  Если же вы копите деньги на обучение ребенка, а всего накопить следует 50 000 долларов за 18 лет, то результатом является сумма в 50000 долларов.  Если этот аргумент опущен, подразумевается значение 0.
type	Необязательный.  Выражение типа Variant, указывающее режим выплат.  Значение 0 означает, что платежи вносятся в конце каждого периода, а значение 1, что они вносятся в начале каждого периода.  Если этот аргумент опущен, подразумевается значение 0.
guess	Необязательный.  Выражение типа Variant, содержащее оценку значения, возвращенного функцией Rate.  Если этот аргумент опущен, используется значение по умолчанию 0.1 (10 процентов).
Дополнительные сведения

Функция подходит для расчета выплат по закладной (например за дом) или итогов накоплений при ежемесячных банковских взносах.

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

Значение функции Rate определяется итерационным путем.  В качестве начального значения используется аргумент guess.  Итерации завершаются по достижении точности в 0,00001 процента.  Если после 20 итераций результат получить не удается, функция Rate завершает итерационный цикл.  В этом случае целесообразно использовать другое начальное значение аргумента guess.


Функция SLN

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

Синтаксис

SLN(cost, salvage, life)

Синтаксис функции SLN содержит следующие именованные аргументы:

Элемент	Описание
cost	Обязательный.  Выражение типа Double, указывающее начальную стоимость фондов.
salvage	Обязательный.  Выражение типа Double, указывающее стоимость фондов к концу периода эксплуатации.
life	Обязательный.  Выражение типа Double, указывающее длительность периода эксплуатации.
Дополнительные сведения

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


Функция SYD

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

Синтаксис

SYD(cost, salvage, life, period)

Синтаксис функции SYD содержит следующие именованные аргументы:

Элемент	Описание
cost	Обязательный.  Выражение типа Double, указывающее начальную стоимость фондов.
salvage	Обязательный.  Выражение типа Double, указывающее стоимость фондов к концу периода эксплуатации.
life	Обязательный.  Выражение типа Double, указывающее длительность периода эксплуатации.
period	Обязательный.  Выражение типа Double, указывающее период времени, для которого вычисляется снижение стоимости.
Дополнительные сведения

Аргументы life и period должны задаваться в одних и тех же единицах.  Например, если life задается в месяцах, period также следует указать в месяцах.  Все аргументы должны иметь положительные значения.


Пример использования функции IsArray

В данном примере функция IsArray используется для проверки, является ли переменная массивом.

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck	' Описывает массив.

YourArray = Array(1, 2, 3)	' Вызывает функцию Array.

MyCheck = IsArray(MyArray)	' Возвращает True.

MyCheck = IsArray(YourArray)	' Возвращает True.


Пример использования функции IsDate

В данном примере функция IsDate используется для проверки, допускает ли выражение преобразование к типу даты.

Dim MyDate, YourDate, NoDate, MyCheck

MyDate = "February 12, 1969": YourDate = #2/12/69#: NoDate = "Привет"

MyCheck = IsDate(MyDate)	' Возвращает True.

MyCheck = IsDate(YourDate)	' Возвращает True.

MyCheck = IsDate(NoDate)	' Возвращает False.


Пример использования функции IsEmpty

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

Dim MyVar, MyCheck

MyCheck = IsEmpty(MyVar)	' Возвращает True.

MyVar = Null	' Присваивает значение Null.

MyCheck = IsEmpty(MyVar)	' Возвращает False.

MyVar = Empty	' Присваивает значение Empty.

MyCheck = IsEmpty(MyVar)	' Возвращает True.


Пример использования функции IsError

В данном примере функция IsError используется для проверки, содержит ли числовое выражение значение ошибки. Функция CVErr вызывается для возврата значения подтипа Error Variant из определяемой пользователем функции. Предполагается, что UserFunction является определяемой пользователем процедурой-функцией, возвращающей значение ошибки; например, возвращаемое значение определяется инструкцией UserFunction = CVErr(32767), где 32767 -- число, задаваемое пользователем.

Dim ReturnVal, MyCheck

ReturnVal = UserFunction()

MyCheck = IsError(ReturnVal)	' Возвращает True.


Пример использования функции IsMissing

В данном примере функция IsMissing используется для проверки, был ли передан в определяемую пользователем процедуру необязательный (Optional) аргумент. Следует отметить что аргументы Optional могут иметь значения по умолчанию и типы данных, отличные от Variant.

Dim ReturnValue

' Следующие инструкции вызывают определяемую пользователем

' процедуру Function.

ReturnValue = ReturnTwice()	' Возвращает Null.

ReturnValue = ReturnTwice(2)	' Возвращает 4.

' Описывает процедуру Function.

Function ReturnTwice(Optional A)

If IsMissing(A) Then

' Если аргумент опущен, возвращается Null.

ReturnTwice = Null

Else

' Если аргумент указан, возвращается удвоенное значение.

ReturnTwice = A * 2

End If

End Function


Пример использования функции IsNull

В данном примере функция IsNull используется для проверки, содержит ли переменная значение Null.

Dim MyVar, MyCheck

MyCheck = IsNull(MyVar)	' Возвращает False.

MyVar = ""

MyCheck = IsNull(MyVar)	' Возвращает False.

MyVar = Null

MyCheck = IsNull(MyVar)	' Возвращает True.


Пример использования функции IsNumeric

В данном примере функция IsNumeric используется для проверки, имеет ли переменная значение, которое может интерпретироваться как числовое.

Dim MyVar, MyCheck

MyVar = "53"	' Присваивает значение.

MyCheck = IsNumeric(MyVar)	' Возвращает True.

MyVar = "459.95"	' Присваивает значение.

MyCheck = IsNumeric(MyVar)	' Возвращает True.

MyVar = "45 Help"	' Присваивает значение.

MyCheck = IsNumeric(MyVar)	' Возвращает False.


Пример использования функции IsObject

В данном примере функция IsObject используется для проверки, является ли идентификатор объектной переменной. MyObject и YourObject являются объектными переменными одного типа. Эти имена не представляют какие-либо реальные объекты и используются только для демонстрации.

Dim MyInt As Integer, YourObject, MyCheck	' Описывает переменные.

Dim MyObject As Object

Set YourObject = MyObject	' Задает ссылку на объект.

MyCheck = IsObject(YourObject)	' Возвращает True.

MyCheck = IsObject(MyInt)	' Возвращает False.


Пример использования функции TypeName

В данном примере функция TypeName возвращает информацию о переменной.

' Описывает переменные.

Dim NullVar, MyType, StrVar As String, IntVar As Integer, CurVar As Currency

Dim ArrayVar (1 To 5) As Integer

NullVar = Null	' Присваивает значение Null.

MyType = TypeName(StrVar)	' Возвращает "String".

MyType = TypeName(IntVar)	' Возвращает "Integer".

MyType = TypeName(CurVar)	' Возвращает "Currency".

MyType = TypeName(NullVar)	' Возвращает "Null".

MyType = TypeName(ArrayVar)	' Возвращает "Integer()".


Пример использования функции VarType

В данном примере функция VarType используется для проверки подтипа переменной.

Dim IntVar, StrVar, DateVar, MyCheck

' Инициализирует переменные.

IntVar = 459: StrVar = "Всем привет": DateVar = #2/12/69#

MyCheck = VarType(IntVar)	' Возвращает 2.

MyCheck = VarType(DateVar)	' Возвращает 7.

MyCheck = VarType(StrVar)	' Возвращает 8.


Функция IsArray

Возвращает значение типа Boolean, показывающее, является ли переменная массивом.

Синтаксис

IsArray(имяПеременной)

Обязательный аргумент имяПеременной является идентификатором переменной.

Дополнительные сведения

Функция IsArray возвращает True, если переменная содержит массив; в противном случае возвращается False.  Функцию IsArray используют для проверки значений типа Variant, содержащих массивы.


Функция IsDate

Возвращает значение типа Boolean, показывающее, может ли значение выражения быть преобразовано в значение даты.

Синтаксис

IsDate(выражение)

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

Дополнительные сведения

Функция IsDate возвращает True, если выражение принадлежит к типу даты или допускает преобразование к допустимому значению даты; в противном случае возвращается False.  В Microsoft Windows допустимыми являются даты в диапазоне от 1 января 100 г. до 31 декабря 9999 г.; другие операционные системы могут поддерживать другие диапазоны дат.


Функция IsEmpty

Возвращает значение типа Boolean, показывающее, была ли инициализирована переменная.

Синтаксис

IsEmpty(выражение)

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

Дополнительные сведения

Функция IsEmpty возвращает True, если переменная не была инициализирована или ей в явном виде было присвоено значение Empty; в противном случае возвращается False.  Если аргумент выражение содержит несколько переменных, всегда возвращается значение False.  Функция IsEmpty возвращает разумную информацию только для аргументов типа Variant.


Функция IsError

Возвращает значение типа Boolean, показывающее, представляет ли выражение значение ошибки.

Синтаксис

IsError(выражение)

Обязательный аргумент выражение должен принадлежать к подтипу VarType vbError типа Variant.

Дополнительные сведения

Значения ошибки создаются путем преобразования действительных чисел в значения ошибки с помощью функции CVErr.  Функция IsError используется для проверки, представляет ли числовое выражение ошибку.  Функция IsError возвращает True, если аргумент выражение имеет значение ошибки; в противном случае возвращается False.  IsError возвращает разумную информацию только для аргументов подтипа VarType vbError типа Variant.


Функция IsMissing

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

Синтаксис

IsMissing(имяАргумента)

Обязательный аргумент имяАргумента содержит имя необязательного аргумента процедуры.

Дополнительные сведения

Функция IsMissing используется для проверки передачи аргументов в процедурах, имеющих необязательные аргументы.  Функция IsMissing возвращает True, если в указанный аргумент не было передано значение; в противном случае возвращается False.  Если для конкретного аргумента функция IsMissing возвращает значение True, то использование этого аргумента в других программных конструкциях может привести к возникновению определяемой пользователем ошибки.  Для аргументов, описанных с ключевым словом ParamArray, функция IsMissing всегда возвращает False.  Для обнаружения пустых элементов ParamArray, следует проверить, не задано ли для верхней границы массива значение, меньшее, чем для нижней границы.


Функция IsNull

Возвращает значение типа Boolean, показывающее, является ли результатом выражения пустое значение (Null).

Синтаксис

IsNull(выражение)

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

Дополнительные сведения

Функция IsNull возвращает True, если выражение имеет значение Null; в противном случае IsNull возвращает значение False.  Если выражение содержит несколько переменных, то значение Null любой из этих переменных приводит к значению True, возвращаемому для всего выражения.

Значение Null указывает, что переменная типа Variant не содержит допустимых данных.  Не следует путать значение Null со значением Empty, указывающим, что переменная не была инициализирована.  Это значение также не эквивалентно пустой строке (""), которую иногда называют строкой нулевой длины.

Внимание!   Функция IsNull проверяет, содержит ли выражение значение Null.  Выражения, которые могли бы при некоторых обстоятельствах иметь значение True, например, If Var = Null and If Var <> Null, всегда возвращают значение False.  Еще раз подчеркнем, что любое выражение, содержащее внутри себя значение Null, всегда имеет значение Null и, следовательно, возвращает False.


Функция IsNumeric

Возвращает значение типа Boolean, показывающее, имеет ли выражение числовое значение.

Синтаксис

IsNumeric(выражение)

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

Дополнительные сведения

Функция IsNumeric возвращает True, если выражение имеет числовое значение; в противном случае возвращается False.

IsNumeric возвращает False, если выражение является выражением даты.


Функция IsObject

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

Синтаксис

IsObject(идентификатор)

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

Дополнительные сведения

Функция IsObject используется только для проверки, принадлежит ли выражение типа Variant к подтипу VarType vbObject.  Это случается только тогда, когда выражение типа Variant задает (или задавало) ссылку на объект, или если выражение имеет значение Nothing.

Функция IsObject возвращает True, если идентификатор определяет переменную, описанную с типом Object или с любым допустимым типом класса, а также, если идентификатор представляет подтип VarType vbObject типа Variant или определяемый пользователем объект.  В противном случае возвращается False.  IsObject возвращает True, даже для переменной со значением Nothing.

Для проверки допустимой ссылки на объект следует использовать перехват ошибок.  Проверить, имеет ли ссылка на объект значение Nothing, позволяет функция IsNothing.


Функция TypeName

Возвращает значение типа String, представляющее тип переменная.

Синтаксис

TypeName(имяПеременной)

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

Дополнительные сведения

Строка, возвращаемая функцией TypeName, может быть любой из следующих:

Строка	Значение переменной
ТипОбъекта	Объект указанного типа.
Byte	Байтовое .
Integer	Целое.
Long	Длинное целое.
Single	С плавающей точкой обычной точности.
Double	С плавающей точкой двойной точности.
Currency	Денежное.
Decimal	Типа Decimal
Date	Дата.
String	Строковое.
Boolean	Логическое.
Error	Значение ошибки.
Empty	Не инициализированное.
Null	Пустое.
Object	Объект.
Unknown	Объект неизвестного типа.
Nothing	Объектная переменная, не содержащая ссылки на объект.
Если имяПеременной представляет массив, то возвращается одна из перечисленных выше строк (или Variant) с добавлением пустых скобок.  Например, если имяПеременной представляет массив целых значений, то TypeName возвращает строку "Integer()".


Функция VarType

Возвращает значение типа Integer, указывающее подтип переменной.

Синтаксис

VarType(имяПеременной)

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

Возвращаемые значения

Константа	Значение	Описание типа
vbEmpty	0	Empty (не инициализирована).
vbNull	1	Null (не содержит данных).
vbInteger	2	Целое.
vbLong	3	Длинное целое.
vbSingle	4	С плавающей точкой обычной точности.
vbDouble	5	С плавающей точкой двойной точности.
vbCurrency	6	Денежное.
vbDate	7	Дата.
vbString	8	Строковое.
vbObject	9	Объект.
vbError	10	Ошибка.
vbBoolean	11	Логическое.
vbVariant	12	Тип Variant (используется только для массивов типа Variant).
vbDataObject	13	Объект доступа к данным.
vbDecimal	14	Значение типа Decimal.
vbByte	17	Байтовое.
vbArray	8192	Массив.
Примечание.   Данные константы определены в языке Visual Basic для приложений.  Использование имен этих констант вместо их значений допускается в любом месте программы.

Дополнительные сведения

Функция VarType никогда не возвращает значение vbArray само по себе.  Эта константа всегда складывается с каким-либо другим значением, указывающим тип массива.  Константа vbVariant возвращается только в сочетании с константой vbArray, чтобы показать, что в аргументе функции VarType указан массив типа Variant.  Например, значение, возвращаемое массивом с целочисленными элементами, имеет вид vbInteger + vbArray, т.е. 8194. Если объект имеет свойство, используемое по умолчанию, то VarType(объект) возвращает тип этого свойства.


Empty

Ключевое слово Empty используется для указания подтипа типа Variant.  Оно указывает неинициализированное значение переменной.


False

Ключевое слово False имеет значение, равное 0.


Me

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

Sub ChangeFormColor(ИмяФормы As Form)

ИмяФормы.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

End Sub

Можно вызвать эту процедуру и передать в нее текущий экземпляр класса Form как аргумент с помощью следующей инструкции:

ChangeFormColor Me


Nothing

Ключевое слово Nothing используется для прекращения связи объектной переменной с любым реальным объектом.  Состояние Nothing присваивается объектной переменной с помощью инструкции Set.  Например:

Set ИмяОбъекта = Nothing

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


Null

Ключевое слово Null используется для указания подтипа типа Variant.  Оно указывает, что переменная не содержит допустимые данные.


True

Ключевое слово True значение, равное -1.


Функция MacID

Используется на Macintosh для преобразования 4-х символьной константы в значение, которое может быть использовано функциями Dir, Kill, Shell и AppActivate.

Синтаксис

MacID(константа)

Обязательный аргумент константа состоит из 4 символов, используемых для задания типа ресурса, типа файла, подписи приложения или события Apple (Apple Event), например, TEXT, OBIN, MSWD (Microsoft Word), XCEL (Microsoft Excel) и т.д.

Дополнительные сведения

MacID is used with Dir and Kill to specify a Macintosh file type. Since the Macintosh does not support * and ? as wildcards, you can use a four-character constant instead to identify groups of files. For example, the following statement returns TEXT type files from the current folder:

Dir("SomePath", MacID("TEXT"))

Функция MacID используется вместе с функциями Shell и AppActivate для указания приложения с помощью его уникальной подписи.


Функция MacScript

Выполняет макрос AppleScript и возвращает значение, возвращаемое макросом, если оно имеется.

Синтаксис

MacScript макрос

Аргумент макрос представляет собой выражение типа String. Выражение типа String может быть последовательностью команд AppleScript, либо указывать имя макроса AppleScript или файла макроса.

Дополнительные сведения

Многострочные макросы могут быть созданы с помощью добавления символа перевода строки (Chr(13)).


Пример использования функции MacScript

В данном примере функция MacScript используется для открытия окна диалога Choose File (стандартного окна диалога Macintosh, предназначенного для выбора файлов) и возвращает полный путь к файлу, выбранному пользователем.  Если возможно, перед описанием пути указывается тип выбранного файла.

ThePath$ = Macscript("ChooseFile")


Инструкция Date (Apple Power Macintosh)

Для Macintosh дата должна быть в пределах от 1 января 1904 г. И до 5 февраля 2040 г.


Инструкция Call (Apple Power Macintosh)

ByVal и ByRef могут использоваться с инструкцией Call при выполнении вызова программных ресурсов Macintosh.


Функция Shell (Apple Power Macintosh)

Синтаксис функции Shell содержит следующие именованные аргументы:

Аргумент	Описание
pathname	На Macintosh возможно применение функции MacID для указания подписи приложения вместо его имени. В следующем примере используется подпись для Microsoft Word:
	Shell MacID("MSWD")
windowstyle	На Macintosh (система System 7.0 или более поздняя) windowstyle определяет только получает ли приложение фокус при запуске, или нет.
Константа vbHide не применима на платформах Macintosh.


Инструкция Declare (Apple Power Macintosh)

На Power Macintosh синтаксис инструкции Declare совпадает с синтаксисом инструкции в Windows, за исключением ключевого слова Cdecl, которое применяется для указания, что процедура использует последовательность аргументов, соглашения об именах и вызовах, принятые в языке C:

[Public | Private ] Declare Function имя [CDecl] Lib "библиотека" [Alias "псевдоним" ] [([список])] [As тип]

Ключевое слово Alias указывает, что процедура, которая будет вызываться, является программным ресурсом Macintosh. Это полезно при совпадении имени внешней процедуры с ключевым словом.

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

"[тип_ресурса]$[имя_ресурса]"

тип_ресурса представляет собой любую допустимую 4-х символьную константу. При ее отсутствии по умолчанию используется тип CODE. имя_ресурса представляет собой имя процедуры программного ресурса. Если имя_ресурса пропускается, подразумевается, что оно совпадает с именем.

На Power Macintosh инструкция Declare поддерживает вызовы в программах только для программных фрагментов. Вызовы в программных ресурсах также поддерживаются, но только в режиме эмуляции 68000.

При использовании на Power Macintosh синтаксис инструкции Declare имеет следующий вид:

Declare Function MyFunction Lib "hd:system folder:extensions:MyCodeFragment" Alias "MyFunction" () As Long

Как для программных фрагментов, так и для программных ресурсов в предложении Lib может быть задано либо полное, либо частичное имя файла. Если указанное предложение Lib является неоднозначным, это разрешается следующим образом:

•	Если файл содержит ресурс 'cfrg', он рассматривается как программный фрагмент.

•	Если он не содержит ресурс 'cfrg', он рассматривается в качестве программных ресурсов.

Это позволяет создавать "полные" программные фрагменты, то есть, файлы, которые содержат как программные фрагменты, так и программные ресурсы 68000. При выполнении Visual Basic для приложений на Macintosh 68000, используется программный ресурс. При выполнении на Power Macintosh используется собственный программный ресурс.

Панель управления Macintosh доступна на Power Macintosh с помощью описания в системном программном фрагменте.


Инструкция ChDir (Apple Power Macintosh)

На Power Macintosh основной диск всегда изменяется на диск, указанный в пути. Описание полного пути начинается с имени тома, а относительный путь начинается с двоеточия (:). ChDir позволяет указывать в пути любые псевдонимы:

ChDir "MacDrive:Tmp"	' На Macintosh.

Следует отметить, что при выполнении относительных изменений каталога, на Microsoft Windows и Macintosh используются различные символы:

ChDir ".."	' Переход на один уровень вверх в Microsoft Windows.

ChDir "::"	' Переход на один уровень вверх на Macintosh.


Функция Dir (Apple Power Macintosh)

В Microsoft Windows Dir поддерживает использование нескольких знаков (*) одиночного подстановочного знака (?)для указания нескольких файлов. На Macintosh эти знаки рассматриваются как допустимые символы имени файла и не могут использоваться в качестве подстановочных для указания нескольких файлов.

Поскольку Macintosh не поддерживает подстановочных знаков, используйте тип файла для указания удаления групп файлов. Можно использовать функцию MacID для задания типа файла вместо повторения команды для каждого имени файла. Например, следующая инструкция возвращает имя первого файла типа TEXT из текущей папки:

Dir("SomePath", MacID("TEXT"))

Для перечисления всех файлов папки укажите пустую строку:

Dir("")

Использование функции MacID вместе с функцией Dir в Microsoft Windows приводит к возникновению ошибок.

Любое значение атрибута большее 256 рассматривается как значение MacID.

Следующие константы на Macintosh недоступны:

Константа	Значение	Описание
vbSystem	4	Системный файл
vbVolume	8	Метка тома
Следующая константа доступна только на Macintosh:

Константа	Значение	Описание
vbAlias	64	Указанное имя файла является псевдонимом.


Функция GetAttr (Apple Power Macintosh)

Следующие константы на Macintosh недоступны:

Константа	Значение	Описание
vbSystem	4	Системный файл
vbArchive	32	Файл был изменен со времени создания последней резервной копии.
Следующая константа доступна только на Macintosh

Константа	Значение	Описание
vbAlias	64	Указанное имя файла является псевдонимом.


Инструкция Kill (Apple Power Macintosh)

В Microsoft Windows Kill поддерживает использование нескольких знаков (*) и одиночного подстановочного знака (?) для указания нескольких файлов. Однако на Macintosh эти символы рассматриваются как допустимые символы имени файла и не могут использоваться в качестве подстановочных для указания нескольких файлов.

Поскольку Macintosh не поддерживает подстановочных знаков, используйте тип файла для указания удаления групп файлов. Можно использовать функцию MacID для задания типа файла вместо повторения команды для каждого имени файла. Например, следующая инструкция удаляет все файлы типа TEXT из текущей папки.

Kill MacID("TEXT")

Использование функции MacID вместе с Kill в Microsoft Windows приводит к возникновению ошибок.


Инструкция SetAttr (Apple Power Macintosh)

Следующие константы на Macintosh недоступны:

Константа	Значение	Описание
vbSystem	4	Системный файл
vbArchive	32	Файл был изменен со времени создания последней резервной копии.
Следующая константа доступна только на Macintosh

Константа	Значение	Описание
vbAlias	64	Указанное имя файла является псевдонимом.


Константы Dir, GetAttr и SetAttr (Apple Power Macintosh)

Следующие константы на Macintosh недоступны:

Константа	Значение	Описание
vbSystem	4	Системный файл
vbVolume	8	Метка тома
vbArchive	32	Файл был изменен со времени создания последней резервной копии.
Следующая константа доступна только на Macintosh

Константа	Значение	Описание
vbAlias	64	Указанное имя файла является псевдонимом.


Константы StrConv (Apple Power Macintosh)

Следующие константы на Macintosh недоступны:

Константа	Значение	Описание
vbUnicode***	64***	Преобразует строку в формат Unicode, используя стандартную кодовую страницу системы. Указание этого кода на Macintosh или в 16-разрядных системах Windows приводит к ошибке выполнения.
vbFromUnicode***	128***	Преобразует строку из формата Unicode в стандартную кодовую страницу системы. Указание этого кода на Macintosh или в 16-разрядных системах Windows приводит к ошибке выполнения.


Инструкция ChDrive (Apple Power Macintosh)

На Macintosh ChDrive изменяет текущую папку на корневую папку указанного диска.


Функция CurDir (Apple Power Macintosh)

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


Функция RGB (Apple Power Macintosh)

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


Оператор Like (Apple Power Macintosh)

На порядок сортировки определяется набором символов.


Инструкция Option Compare (Apple Power Macintosh)

На порядок сортировки определяется набором символов.


Объектная библиотека не зарегистрирована (Apple Power Macintosh)

Удалите папку Macintosh Preferences и перезапустите приложение.


Пример использования функции Abs

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

Dim MyNumber

MyNumber = Abs(50.3)	' Возвращает 50.3.

MyNumber = Abs(-50.3)	' Возвращает 50.3.


Пример использования функции Atn

В данном примере функция Atn используется для вычисления значения pi.

Dim pi

pi = 4 * Atn(1)	' Вычисляет значение pi.


Пример использования функции Cos

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

Dim MyAngle, MySecant

MyAngle = 1.3	' Задает угол в радианах.

MySecant = 1 / Cos(MyAngle)	' Вычисляет секанс.


Пример использования функции Exp

В данном примере функция Exp используется для вычисления числа e, возведенного в указанную степень.

Dim MyAngle, MyHSin

' Задает угол в радианах.

MyAngle = 1.3

' Вычисляет гиперболический синус.

MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2


Пример использования функций Int и Fix

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

Dim MyNumber

MyNumber = Int(99.8)	' Возвращает 99.

MyNumber = Fix(99.2)	' Возвращает 99.

MyNumber = Int(-99.8)	' Возвращает -100.

MyNumber = Fix(-99.8)	' Возвращает -99.

MyNumber = Int(-99.2)	' Возвращает -100.

MyNumber = Fix(-99.2)	' Возвращает -99.


Пример использования функции Log

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

Dim MyAngle, MyLog

' Задает угол в радианах.

MyAngle = 1.3

' Вычисляет гиперболический арксинус.

MyLog = Log(MyAngle + Sqr(MyAngle * MyAngle + 1))


Пример использования инструкции Randomize

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

Dim MyValue

Randomize	' Инициализирует генератор случайных чисел.

MyValue = Int((6 * Rnd) + 1)	' Возвращает случайное число от 1 до 6.


Пример использования функции Rnd

В данном примере функция Rnd используется для получения случайного целого числа в диапазоне от 1 до 6.

Dim MyValue

MyValue = Int((6 * Rnd) + 1)	' Возвращает случайное число от 1 до 6.


Пример использования функции Sgn

В данном примере функция Sgn используется для определения знака числа.

Dim MyVar1, MyVar2, MyVar3, MySign

MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0

MySign = Sgn(MyVar1)	' Возвращает 1.

MySign = Sgn(MyVar2)	' Возвращает -1.

MySign = Sgn(MyVar3)	' Возвращает 0.


Пример использования функции Sin

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

Dim MyAngle, MyCosecant

MyAngle = 1.3	' Задает угол в радианах.

MyCosecant = 1 / Sin(MyAngle)	' Вычисляет косеканс.


Пример использования функции Sqr

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

Dim MySqr

MySqr = Sqr(4)	' Возвращает 2.

MySqr = Sqr(23)	' Возвращает 4.79583152331272.

MySqr = Sqr(0)	' Возвращает 0.

MySqr = Sqr(-4)	' Ошибка выполнения.


Пример использования функции Tan

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

Dim MyAngle, MyCotangent

MyAngle = 1.3	' Задает угол в радианах.

MyCotangent = 1 / Tan(MyAngle)	' Вычисляет котангенс.


Математические функции

Функция Abs

Функция Atn

Функция Cos

Функция Exp

Функция Fix

Функция Int

Функция Log

Функция Rnd

Функция Sgn

Функция Sin

Функция Sqr

Функция Tan

Производные математические функции


Функция Abs

Возвращает значение, тип которого совпадает с типом переданного аргумента, равное абсолютному значению указанного числа.

Синтаксис

Abs(число)

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

Дополнительные сведения

Абсолютное значение числа это его величина с положительным знаком.  Например, оба выражения ABS(-1) и ABS(1) возвращают 1.


Функция Atn

Возвращает значение типа Double, содержащее арктангенс числа.

Синтаксис

Atn(число)

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

Дополнительные сведения

Функция Atn определяет величину угла (в радианах) по указанному отношению длин двух сторон прямоугольного треугольника (противолежащего катета и прилежащего катета).  Это отношение задается с помощью аргумента число.

Значение, возвращаемое данной функцией, лежит в диапазоне от -pi/2 до pi/2 радиан.

Для преобразования градусов в радианы следует умножить градусы на pi/180.  Для преобразования радиан в градусы следует умножить радианы на 180/pi.

Примечание.   Функция Atn является обратной к функции Tan, которая возвращает тангенс указанного угла.  Не путайте арктангенс с котангенсом, который равняется (1 / тангенс).


Функция Cos

Возвращает значение типа Double, содержащее косинус угла.

Синтаксис

Cos(число)

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

Дополнительные сведения

Функция Cos определяет отношение длин двух сторон прямоугольного треугольника (прилежащего катета и гипотенузы) по указанному углу (в радианах).

Значение, возвращаемое данной функцией, лежит в диапазоне от -1 до 1.

Для преобразования градусов в радианы следует умножить градусы на pi/180.  Для преобразования радиан в градусы следует умножить радианы на 180/pi.


Функция Exp

Возвращает значение типа Double, содержащее результат возведения числа e (основание натуральных логарифмов) в указанную степень.

Синтаксис

Exp(число)

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

Дополнительные сведения

Если значение аргумента число превышает 709,782712893, возникает ошибка.  Константа e приблизительно равняется 2,718282.

Примечание.   Функция Exp является обратной к функции Log, поэтому иногда ее называют "антилогарифмом".


Функции Int и Fix

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

Синтаксис

Int(число)

Fix(число)

Обязательный аргумент число представляет значение типа Double или любое допустимое числовое выражение.  Если число имеет значение Null, возвращается Null.

Дополнительные сведения

Обе функции Int и Fix отбрасывают дробную часть числа и возвращают целое значение.

Различие между функциями Int и Fix состоит в том, что для отрицательного значения аргумента число функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, а Fix ближайшее отрицательное целое число, большее либо равное указанному.  Например, функция Int преобразует -8.4 в -9, а функция Fix преобразует -8,4 в -8.

Выражение Fix(число) эквивалентно следующему:

Sgn(число) * Int(Abs(число))


Функция Log

Возвращает значение типа Double, содержащее натуральный логарифм числа.

Синтаксис

Log(число)

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

Дополнительные сведения

Натуральным логарифмом называют логарифм по основанию e.  Константа e приблизительно равняется 2,718282.

Для вычисления логарифма числа x по основанию n следует разделить натуральный логарифм числа x на натуральный логарифм числа n:

Logn(x) = Log(x) / Log(n)

В следующем примере показана специальная процедура Function, предназначенная для вычисления логарифмов по основанию 10:

Static Function Log10(X)

Log10 = Log(X) / Log(10#)

End Function


Инструкция Randomize

Инициализирует датчик случайных чисел.

Синтаксис

Randomize [число]

Необязательный аргумент число представляет значение типа Variant или любое допустимое числовое выражение.

Дополнительные сведения

Инструкция Randomize использует аргумент число для инициализации датчика случайных чисел функции Rnd, передавая ему новое опорное число.  Если аргумент число опущен, в качестве нового опорного числа используется значение, возвращаемое системным таймером.

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

Примечание.   Для повторения последовательности случайных чисел следует вызвать функцию Rnd с отрицательным аргументом сразу после использования инструкции Randomize с числовым аргументом.  Повторное использование инструкции Randomize с тем же числовым аргументом не приведет к повторению предыдущей последовательности случайных чисел.


Функция Rnd

Возвращает значение типа Single, содержащее случайное число.

Синтаксис

Rnd[(число)]

Необязательный аргумент число представляет значение типа Single или любое допустимое числовое выражение.

Возвращаемые значения

Если число	Rnd возвращает
Меньше нуля	Каждый раз одно и то же число, используя аргумент число в качестве опорного числа.
Больше нуля	Следующее случайное число в последовательности.
Равняется нулю	Случайное число, возвращенное при предыдущем вызове этой функции.
Не указано	Следующее случайное число в последовательности.
Дополнительные сведения

Функция Rnd возвращает значение, меньшее 1 и большее или равное нулю.

Аргумент число определяет способ генерации случайного числа функцией Rnd:

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

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

Ниже приведена формула, предназначенная для получения случайных целых чисел в заданном диапазоне:

Int((верхняяГраница - нижняяГраница+ 1) * Rnd + нижняяГраница)

Здесь верхняяГраница представляет максимальное число в диапазоне, а нижняяГраница минимальное число в диапазоне.

Примечание.   Для повторения последовательности случайных чисел следует вызвать функцию Rnd с отрицательным аргументом сразу после использования инструкции Randomize с числовым аргументом.  Повторное использование инструкции Randomize с тем же числовым аргументом не приведет к повторению предыдущей последовательности случайных чисел.


Функция Sgn

Возвращает значение типа Variant (Integer), соответствующее знаку указанного числа.

Синтаксис

Sgn(число)

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

Возвращаемые значения

Если число	Sgn возвращает
Больше нуля	1
Равняется нулю	0
Меньше нуля	-1
Дополнительные сведения

Знак аргумента число определяет значение, возвращаемое функцией Sgn.


Функция Sin

Возвращает значение типа Double, содержащее синус угла.

Синтаксис

Sin(число)

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

Дополнительные сведения

Функция Sin определяет отношение длин двух сторон прямоугольного треугольника (противолежащего катета и гипотенузы) по указанному углу (в радианах).

Значение, возвращаемое данной функцией, лежит в диапазоне от -1 до 1.

Для преобразования градусов в радианы следует умножить градусы на pi/180.  Для преобразования радиан в градусы следует умножить радианы на 180/pi.


Функция Sqr

Возвращает значение типа Double, содержащее квадратный корень указанного числа.

Синтаксис

Sqr(число)

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


Функция Tan

Возвращает значение типа Double, содержащее тангенс угла.

Синтаксис

Tan(число)

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

Дополнительные сведения

Функция Tan определяет отношение длин двух сторон прямоугольного треугольника (противолежащего катета и прилежащего катета) по указанному углу (в радианах).

Для преобразования градусов в радианы следует умножить градусы на pi/180.  Для преобразования радиан в градусы следует умножить радианы на 180/pi.


Производные математические функции

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

Функция	Комбинация встроенных функций
Секанс	Sec(X) = 1 / Cos(X)
Косеканс	Cosec(X) = 1 / Sin(X)
Котангенс	Cotan(X) = 1 / Tan(X)
Арксинус	Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Арккосинус	Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Арккосеканс	Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))
Арккосеканс	Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
Арккотангенс	Arccotan(X) = Atn(X) + 2 * Atn(1)
Гиперболический синус	HSin(X) = (Exp(X) - Exp(-X)) / 2
Гиперболический косинус	HCos(X) = (Exp(X) + Exp(-X)) / 2
Гиперболический тангенс	HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
Гиперболический секанс	HSec(X) = 2 / (Exp(X) + Exp(-X))
Гиперболический косеканс	HCosec(X) = 2 / (Exp(X) - Exp(-X))
Гиперболический котангенс	HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
Гиперболический арксинус	HArcsin(X) = Log(X + Sqr(X * X + 1))
Гиперболический арккосинус	HArccos(X) = Log(X + Sqr(X * X - 1))
Гиперболический арктангенс	HArctan(X) = Log((1 + X) / (1 - X)) / 2
Гиперболический арксеканс	HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Гиперболический арккосеканс	HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Гиперболический арккотангенс	HArccotan(X) = Log((X + 1) / (X - 1)) / 2
Логарифм по основанию N	LogN(X) = Log(X) / Log(N)


Пример использования метода Add

В данном примере метод Add используется для добавления объектов Inst (экземпляров класса Class1, содержащего переменную InstanceName типа Public) в семейство MyClasses. Для проверки работы этой программы необходимо выбрать команду Модуль класса (Class Module) в меню Вставка и описать общую переменную InstanceName на уровне модуля Class1 (Public InstanceName), в которую будут записываться имена экземпляров объекта. Оставьте стандартное имя Class1. Скопируйте и вставьте следующую программу в модуль формы, в процедуру обработки события загрузки формы Form_Load.

Dim MyClasses As New Collection	' Создает объект Collection.

Dim Num As Integer	' Счетчик записей.

Dim Msg

Dim TheName	' Содержит имена, вводимые пользователем.

Do

Dim Inst As New Class1	' Создает новый экземпляр класса Class1.

Num = Num + 1	' Увеличивает значение Num, затем

' вводится имя.

Msg = "Введите имя объекта." & Chr(13) _

 & "Для просмотра имен в семействе нажмите кнопку 'Отмена'."

TheName = InputBox(Msg, "Имена компонентов семейства.")

Inst.InstanceName = TheName	' Присваивает имя экземпляру объекта.

' Если пользователь ввел имя, оно добавляется в семейство.

If Inst.InstanceName <> "" Then

' Добавляет именованный объект в семейство.

MyClasses.Add item := Inst, key := CStr(Num)

End If

' Очищаем текущую ссылку, чтобы принять новую.

Set Inst = Nothing

Loop Until TheName = ""

For Each x In MyClasses

MsgBox x.instancename, , "Имя экземпляра"

Next


Пример использования метода Clear

В данном примере метод Clear объекта Err применяется для сброса числовых значений свойств объекта Err до нулевых, а строковых значений до пустых строк. Если исключить метод Clear из следующей программы, то в каждом цикле будет выводиться сообщение об ошибке (после возникновения первой ошибки), вне зависимости от того, имела ли место ошибка при дальнейших вычислениях. Это легко понять, если проследить работу программы шаг за шагом.

Dim Result(10) As Integer	' Описание массива, элементы которого

' легко переполняются.

Dim indx

On Error Resume Next	' Отложенный перехват ошибок.

Do Until indx = 10

' Создаем случайную ошибку или сохраняем результат, если ошибки нет.

Result(indx) = Rnd * indx * 20000

If Err.Number <> 0 Then

MsgBox Err, , "Создана ошибка: ", Err.HelpFile, Err.HelpContext

Err.Clear	' Сброс значений свойств объекта Err.

End If

indx = indx + 1

Loop


Пример использования метода Item

В данном примере метод Item используется для считывания ссылки на объект, входящий в семейство. Подразумевается, что Birthdays является именем объекта Collection. Следующая программа считывает из семейства ссылки на объекты, представляющие дни рождения людей с именами Bill Smith и Adam Smith, с использованием ключевых строк "SmithBill" и "SmithAdam" в качестве аргументов индекс. Следует отметить, что в первом вызове метод Item указан явным образом, а во втором нет. Обе конструкции являются правильными, поскольку Item является стандартным методом объекта Collection. Ссылки, присвоенные переменным SmithBillBD и SmithAdamBD (в инструкциях Set) обеспечивают доступ к свойствам и методам указанных объектов. Для выполнения этой программы следует создать семейство и добавить в него не менее двух компонентов, на которые заданы ссылки.

Dim SmithBillBD As Object

Dim SmithAdamBD As Object

Dim Birthdays

Set SmithBillBD = Birthdays.Item("SmithBill")

Set SmithAdamBD = Birthdays("SmithAdam")


Пример использования метода Print

В данном примере метод Print выводит значение переменной MyVar на панель проверки окна отладки. Следует отметить, что метод Print применим только к объектам, способным выводить текст.

Dim MyVar

MyVar = "Вывод текста в окно отладки."

Debug.Print MyVar


Пример использования метода Raise

В данном примере метод Raise объекта Err применяется для создания ошибки в программируемом объекте, созданном средствами Visual Basic. В программе используется программный идентификатор MyProj.MyObject.

Const MyContextID = 1010407	' Определяет идентификатор раздела.

Function TestName(CurrentName, NewName)

If Instr(NewName, "Маша") Then	' Проверка значения NewName.

' Создание ошибки

Err.Raise vbObjectError + 27, "MyProj.MyObject", _

"Имя ""Маша"" не допускается", "c:\MyProj\MyHelp.Hlp", _

MyContextID

End If

End Function


Пример использования метода Remove

В данном примере метод Remove вызывается для удаления компонентов из объекта Collection MyClasses. В каждом цикле удаляется объект с индексом 1.

Dim Num, MyClasses

For Num = 1 To MyClasses.Count

MyClasses.Remove 1	' В каждом цикле удаляем первый

' объект в семействе, пока не будут

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

Next Num


Метод Add

Добавляет компонент в объект Collection.

Синтаксис

объект.Add item, key, before, after

Синтаксис метода Add содержит следующий указатель объекта и именованные аргументы:

Элемент	Описание
объект	Обязательный.  Объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
item	Обязательный.  Выражение любого типа, определяющее компонент, добавляемый в семейство.
key	Необязательный.  Уникальное строковое выражение, определяющее ключевую строку, которая может быть использована для доступа к компоненту семейства вместо порядкового номера.
before	Необязательный.  Выражение, указывающее относительную позицию компонента в семействе.  Компонент, добавляемый в семейство, размещается перед компонентом, указанным в аргументе before.   Если этот аргумент задается с помощью числового выражения, то аргумент before должен иметь значение от 1 до значения свойства Count семейства.  Если аргумент before определяется строковым выражением, то его значение должно совпадать со значением аргумента key, указанным для одного из компонентов семейства при его добавлении в семейство.  Допускается указание в инструкции одного из аргументов before или after, но не их обоих.
after	Необязательный.   Выражение, указывающее относительную позицию компонента в семействе.  Компонент, добавляемый в семейство, размещается после компонента, указанного в аргументе after.   Если этот аргумент задается с помощью числового выражения, after определяется строковым выражением, то его значение должно совпадать со значением аргумента key, указанным для одного из компонентов семейства при его добавлении в семейство.  Допускается указание в инструкции одного из аргументов before или after, но не их обоих.
Дополнительные сведения

Другими словами, числовое или строковое значение аргумента before или after должно определять существующий компонент семейства.  В противном случае возникает ошибка.

Ошибка возникает также, если указанное значение аргумента key совпадает со значением ключа существующего компонента семейства.


Метод Clear

Очищает все значения свойств объекта Err.

Синтаксис

объект.Clear

Аргумент объект всегда представляет объект Err.

Дополнительные сведения

Метод Clear используется для явной очистки значений свойств объекта Err после завершения обработки ошибки.  Это необходимо, например, при отложенной обработке ошибки, которая задается инструкцией On Error Resume Next.  Метод Clear автоматически вызывается при выполнении любой из следующих инструкций:

•	инструкция Resume любого вида;

•	Exit Sub, Exit Function, Exit Property;

•	инструкция On Error любого вида.

Примечание.   При обработке ошибок, возникающих при доступе к другим объектам, рекомендуется использовать конструкцию On Error Resume Next, а не конструкцию On Error GoTo.  Проверка объекта Err после каждого взаимодействия с другим объектом позволяет устранить неопределенность в том, при доступе к какому объекту возникла ошибка.  Это позволяет всегда точно знать, какой объект поместил значение кода ошибки в свойство Err.Number, а также в каком объекте возникла ошибка (эта информация содержится в свойстве Err.Source).


Метод Item

Возвращает конкретный компонент объекта Collection, определяемый по номеру или по ключу.

Синтаксис

объект.Item(индекс)

Синтаксис метода Item содержит следующий указатель объекта и аргумент:

Элемент	Описание
объект	Обязательный.  Объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
индекс	Обязательный.  Выражение, определяющее положение компонента в семействе.  Если этот аргумент задается с помощью числового выражения, то индекс должен иметь значение от 1 до значения свойства Count.  Если этот аргумент задается с помощью строкового выражения, то его значение должно совпадать со значением аргумента key, указанным для одного из компонентов семейства при его добавлении в семейство.
Дополнительные сведения

Если значение аргумента индекс не соответствует ни одному из существующих компонентов семейства, возникает ошибка.

Метод Item является методом семейства, который используется по умолчанию.  Это означает, что следующие конструкции эквивалентны:

Print ИмяСемейства(1)

Print ИмяСемейства.Item(1)


Метод Print

Выводит текст на панель проверки окна отладки.

Синтаксис

объект.Print [списокПечати]

Синтаксис метода Print содержит следующий указатель объекта и аргумент:

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

{Spc(n) | Tab(n)} выражение позиция

Элемент	Описание
Spc(n)	Необязательный.  Указывает количество пробелов n, вставляемых в выводящийся текст.
Tab(n)	Необязательный.  Помещает курсор в экранный столбец с номером n.  Элемент Tab без аргумента помещает курсор в первый столбец следующей зоны печати.
выражение	Необязательный.  Числовое выражение или строковое выражение, определяющее выводящийся текст.
позиция	Необязательный.  Указывает позицию, в которой выводится следующий символ.  Двоеточие (;) помещает курсор непосредственно за последним выведенным символом.  Tab(n) помещает курсор в экранный столбец с номером n.  Элемент Tab без аргумента помещает курсор в первый столбец следующей зоны печати.  Если аргумент позиция опущен, следующий символ выводится в начале новой строки.
Дополнительные сведения

Для печати нескольких выражений следует разделять их точкой с запятой или пробелом.

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

Логические (тип Boolean) значения печатаются как True или False.  Ключевые слова True и False отображаются в соответствии с языком головного приложения.

Значения типа Date выводятся в стандартном кратком формате дат, установленном в системе.  Если в значениях даты/времени опущен или равен нулю один из компонентов, выводится оставшийся компонент.

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

Значения ошибки выводится в виде Ошибка кодОшибки.  Ключевое слово Error переводится.

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

Примечание.   Метод Print обычно выводит текст с использованием пропорциональных шрифтов.  Следует помнить, что для пропорциональных шрифтов не существует точного соответствия между числом выведенных символов и числом столбцов постоянной ширины, которые занимают выведенные символы.  Например, широкая буква (такая как "W") занимает больше одного столбца постоянной ширины, в то время как узкая буква (такая как "i") занимает меньше места.  При выводе большого числа широких символов следует располагать столбцы таблицы достаточно далеко друг от друга.  Альтернативным вариантом является применение моноширинного шрифта (такого как Courier), при этом каждый символ будет занимать ровно один столбец.


Метод Raise

Создает ошибку выполнения.

Синтаксис

объект.Raise number, source, description, helpfile, helpcontext

Синтаксис метода Raise содержит следующий указатель объекта и именованные аргументы:

Аргумент	Описание
объект	Обязательный.  Всегда представляет объект Err.
number	Обязательный.  Значение типа Long, определяющее ошибку.  В языке Visual Basic коды ошибок (как внутренних ошибок Visual Basic, так и определяемых пользователем) лежат в диапазоне 0–65535.  Задавая в значении свойства Number собственный код ошибки в модуле класса, пользователь должен выполнить сложение собственного кода с константой vbObjectError.  Например, чтобы создать код ошибки 1050, следует определить значение свойства Number с помощью выражения vbObjectError + 1050.
source	Необязательный.  Строковое выражение, определяющее имя объекта или приложения, в котором возникла ошибка.  Для объекта значение данного свойства необходимо задавать в виде проект.класс.  Если этот аргумент не определен, используется программный идентификатор текущего проекта Visual Basic.
description	Необязательный.  Строковое выражение, содержащее описание ошибки.  Если этот аргумент не определен, проверяется значение свойства Number.  В случае, когда это значение соответствует коду ошибки выполнения Visual Basic, значением свойства Description становится строка, которая была бы возвращена функцией Error.  В противном случае свойство Description содержит значение "Ошибка, определяемая приложением или объектом".
helpfile	Необязательный.  Полное имя (включая диск и путь) файла справки Microsoft Windows, содержащего описание данной ошибки.  Если этот аргумент не определен, используется полное имя файла справочной системы Visual Basic.
helpcontext	Необязательный.  Контекстный идентификатор, определяющий в файле, указанном в аргументе helpfile, раздел, соответствующий обрабатываемой ошибке.  Если этот аргумент не определен, то, при наличии, используется контекстный идентификатора раздела файла справки Visual Basic, соответствующий ошибке с кодом, указанным в свойстве Number.
Дополнительные сведения

Все именованные аргументы, кроме аргумента number, являются необязательными.  Если при вызове метода Raise без указания некоторых аргументов в свойствах объекта Err содержатся не сброшенные значения, то эти значения будут использованы как значения, определяющие текущую ошибку.

Метод Raise используется для создания ошибок выполнения.  Этот метод может быть использован вместо инструкции Error.  Метод Raise полезен для генерации ошибок при программировании модулей класса, поскольку объект Err представляет программисту более широкий объем информации, чем инструкция Error.  Например, метод Raise позволяет использовать исходный генератор ошибок, указав его в свойстве Source, допускает вызов встроенной справки объекта и т.д.


Метод Remove

Удаляет компонент из объекта Collection.

Синтаксис

объект.Remove индекс

Синтаксис метода Remove содержит следующий указатель объекта и аргумент:

Элемент	Описание
объект	Обязательный.  Объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
индекс	Обязательный.  Выражение, определяющее положение компонента в семействе.  Если этот аргумент задается с помощью числового выражения, то индекс должен иметь значение от 1 до значения свойства Count.  Если этот аргумент задается с помощью строкового выражения, то его значение должно совпадать со значением аргумента key, указанным для одного из компонентов семейства при его добавлении в семейство.
Дополнительные сведения

Если значение аргумента индекс не соответствует ни одному из существующих компонентов семейства, возникает ошибка.


Пример инструкции AppActivate

В данном примере приведены различные способы активизации окна приложения с помощью инструкции AppActivate. При вызове функции Shell считается, что запускаемые приложения находятся там, где указано.  На Macintosh для указания сигнатуры приложения вместо его имени используется функция MacID.  Инструкцию AppActivate можно использовать с Macintosh System 7.0 или более поздней версии.

Dim MyAppID, ReturnValue

' В Microsoft Windows:

AppActivate "Microsoft Word"	' Активизирует Microsoft

' Word.

' Кроме того, можно использовать значение, возвращаемое функцией Shell.

MyAppID = Shell("C:\WORD\WINWORD.EXE", 1)	' Запускает Microsoft Word.

AppActivate MyAppID	' Активизирует Microsoft

' Word.

' Кроме того, можно использовать значение, возвращаемое функцией Shell.

ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1)	' Запускает Microsoft Excel.

AppActivate ReturnValue	' Активизирует Microsoft

' Excel.


Пример инструкции Beep

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

Dim I

For I = 1 To 3	' Цикл выполняется 3 раза.

Beep	' Подача звукового сигнала.

Next I


Пример функции Command

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

Function GetCommandLine(Optional MaxArgs)

'Описание переменных.

Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs

'Проверяет наличие MaxArgs.

If IsMissing(MaxArgs) Then MaxArgs = 10

'Задание правильной размерности массива.

ReDim ArgArray(MaxArgs)

NumArgs = 0: InArg = False

'Получает аргументы командной строки.

CmdLine = Command()

CmdLnLen = Len(CmdLine)

'Последовательный анализ всех символов

'командной строки.

For I = 1 To CmdLnLen

C = Mid(CmdLine, I, 1)

'Проверка на наличие пробела или табуляции.

If (C <> " " And C <> vbTab) Then

'Символы пробела и табуляции не обнаружены.

'Проверяет, является ли символ частью аргумента.

If Not InArg Then

'Начинается новый аргумент.

'Проверка количества аргументов.

If NumArgs = MaxArgs Then Exit For

NumArgs = NumArgs + 1

InArg = True

End If

'Добавление символа к текущему аргументу.

ArgArray(NumArgs) = ArgArray(NumArgs) + C

Else

'Найден символ пробела или табуляции.

'Устанавливает для флага InArg значение False.

InArg = False

End If

Next I

'Изменение размера массива для хранения аргументов.

ReDim Preserve ArgArray(NumArgs)

'Возвращает массив в качестве имени функции.

GetCommandLine = ArgArray()

End Function


Пример функции InputBox

В данном примере приведены различные способы получения сведений от пользователя с помощью функции InputBox. Если аргументы x и y опущены, окно диалога автоматически выравнивается по центру по соответствующим осям.  Переменная MyValue содержит значение, введенное пользователем, если была нажата кнопка OK или клавиша ENTER.  Если пользователь нажмет кнопку Отмена, функция возвратит пустую строку.

Dim Message, Title, Default, MyValue

Message = "Введите число от 1 до 3"	' Сообщение-подсказка.

Title = "Пример"	' Заголовок.

Default = "1"	' Значение по умолчанию.

' Выводит на экран сообщение, заголовок и значение по умолчанию.

MyValue = InputBox(Message, Title, Default)

' Получение справки. Кнопка "Справка" добавляется автоматически.

MyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)

' Размещает верхний левый угол окна диалога в точке 100, 100.

MyValue = InputBox(Message, Title, Default, 100, 100)


Пример функции MsgBox

В данном примере функция MsgBox используется для вывода окна диалога с сообщением об ошибке и кнопками "Да" (Yes) и "Нет" (No).  Основной является кнопка "Нет" (No).  Значение, возвращаемое функцией MsgBox, зависит от того, какая кнопка была нажата пользователем.  Предположим, что DEMO.HLP является файлом справки, содержащим раздел с номером, равным 1000.

Dim Msg, Style, Title, Help, Ctxt, Response, MyString

Msg = "Обнаружена ошибка. Продолжить?"	' Сообщение.

Style = vbYesNo + vbCritical + vbDefaultButton2	' Кнопки.

Title = "Пример"	' Заголовок.

Help = "DEMO.HLP"	' Файл справки.

Ctxt = 1000	' Контекст.

' Выводит сообщение.

Response = MsgBox(Msg, Style, Title, Help, Ctxt)

If Response = vbYes Then	' Нажата кнопка "Да" (Yes).

MyString = "Да"	' Выполняет действие.

Else	' Нажата кнопка "Нет" (No).

MyString = "Нет"	' Выполняет действие.

End If


Пример инструкции SendKeys

В данном примере используется функция Shell для запуска приложения "Калькулятор", имеющийся в Microsoft Windows. Затем с помощью инструкции SendKeys имитируется нажатие клавиш для введения чисел и последующего выхода из калькулятора.  Инструкция SendKeys не используется на Macintosh.  (Для проработки примера вставьте его в процедуру с помощью буфера, а затем выполните эту процедуру.  Поскольку инструкция AppActivate передает фокус приложению "Калькулятор", этот пример нельзя выполнить в пошаговом отладочном режиме.)

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1)	' Запускает калькулятор.

AppActivate ReturnValue 	' Активизирует калькулятор.

For I = 1 To 100	' Организует цикл.

SendKeys I & "{+}", True	' Передает данные калькулятору

Next I	' для вычисления суммы.

SendKeys "=", True	' Окончательный результат.

SendKeys "%{F4}", True	' ALT+F4 закрывает калькулятор.


Инструкция AppActivate

Активизирует окно приложения.

Синтаксис

AppActivate title[, wait]

Синтаксис инструкции AppActivate содержит следующие именованные аргументы:

Элемент	Описание
title	Обязательный.  Строковое выражение, указывающее содержимое строки заголовка окна приложения, которое следует активизировать.  Для активизации приложения вместо аргумента title допускается использование кода задачи, возвращаемого функцией Shell.
wait	Необязательный.  Выражение типа Boolean, указывающее, должно ли вызывающее приложение иметь фокус при активизации другого приложения. Если этот аргумент имеет значение False (по умолчанию), указанное приложение активизируется немедленно, независимо от наличия фокуса у вызывающего приложения.  Если этот аргумент имеет значение True, указанное приложение активизируется только после получения фокуса вызывающим приложением.
Дополнительные сведения

Инструкция AppActivate передает фокус указанному приложению или окну, не изменяя его размеры.  Активизированное окно приложения может потерять фокус в результате соответствующих действий пользователя или закрытия этого окна.  Для запуска приложения и указания типа окна следует использовать функцию Shell.

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


Инструкция Beep

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

Синтаксис

Beep

Дополнительные сведения

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


Функция Command

Возвращает параметры командной строки указанные при запуске Microsoft Visual Basic или программы, разработанной с использованием Visual Basic.

Синтаксис

Command

Дополнительные сведения

При запуске Visual Basic из командной строки вся часть командной строки, расположенная после ключа /cmd, передается в программу как аргумент командной строки. В следующем примере cmdlineargs представляют собой аргументы, возвращаемые функцией Command.

VB /cmd cmdlineargs

Для приложений, разработанных с использованием Visual Basic и откомпилированных в исполняемый файл ( .exe), Command возвращает аргументы, расположенные в командной строке после имени приложения. Например:

MyApp cmdlineargs

Способ изменения аргументов командной строки в пользовательском интерфейсе используемого приложения описан в разделе "Параметры командной строки" справочной системы.


Функция InputBox

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

Синтаксис

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Синтаксис функции InputBox содержит следующие именованные аргументы:

Элемент	Описание
prompt	Обязательный.  Строковое выражение, отображаемое как сообщение в диалоговом окне.  Максимальная длина строки prompt составляет приблизительно 1024 символов и зависит от ширины используемых символов.  Строковое значение prompt может содержать нескольких физических строк.  Для разделения строк допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или комбинацию этих символов (Chr(13) & Chr(10)).
title	Необязательный.  Строковое выражение, отображаемое в строке заголовка диалогового окна.  Если этот аргумент опущен, в строку заголовка помещается имя приложения.
default	Необязательный.  Строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку.  Если этот аргумент опущен, поле ввода изображается пустым.
xpos	Необязательный.  Числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана (в твипах).  Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали.
ypos	Необязательный.  Числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана (в твипах).  Если этот аргумент опущен, диалоговое окно помещается по вертикали примерно на одну треть высоты экрана.
helpfile	Необязательный.  Строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне.  Если этот аргумент указан, необходимо указать также аргумент context.
context	Необязательный.  Числовое выражение, определяющее номер соответствующего раздела справочной системы.  Если этот аргумент указан, необходимо указать также аргумент helpfile.
Дополнительные сведения

Если указаны оба аргумента, helpfile и context, пользователь имеет возможность нажатием клавиши F1 вызвать контекстную справку.  Некоторые главные приложения, например, Microsoft Excel, также автоматически добавляют в диалоговое окно кнопку "Справка".  Если пользователь нажимает кнопку "OK" или клавишу ENTER, функция InputBox возвращает содержимое поля ввода.  Если пользователь нажимает кнопку "Отмена", функция возвратит пустую строку ("").

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


Функция MsgBox

Выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.

Синтаксис

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Синтаксис функции MsgBox содержит следующие именованные аргументы:

Элемент	Описание
prompt	Обязательный.  Строковое выражение, отображаемое как сообщение в диалоговом окне.  Максимальная длина строки prompt составляет приблизительно 1024 символов и зависит от ширины используемых символов.  Строковое значение prompt может содержать нескольких физических строк.  Для разделения строк допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или комбинацию этих символов (Chr(13) & Chr(10)).
buttons	Необязательный.  Числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения.  Значение по умолчанию этого аргумента равняется 0.
title	Необязательный.  Строковое выражение, отображаемое в строке заголовка диалогового окна.  Если этот аргумент опущен, в строку заголовка помещается имя приложения..
helpfile	Необязательный.  Строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне.  Если этот аргумент указан, необходимо указать также аргумент context.
context	Необязательный.  Числовое выражение, определяющее номер соответствующего раздела справочной системы.  Если этот аргумент указан, необходимо указать также аргумент helpfile.
Значения

Ниже перечислены допустимые значения аргумента buttons:

Константа	Значение	Описание
vbOKOnly	0	Отображается только кнопка "OK".
VbOKCancel	1	Отображаются кнопки "OK" и "Отмена" (Cancel).
VbAbortRetryIgnore	2	Отображаются кнопки "Прервать" (Abort), "Повторить" (Retry) и "Пропустить" (Ignore).
VbYesNoCancel	3	Отображаются кнопки "Да" (Yes), "Нет" (No) и "Отмена" (Cancel).
VbYesNo	4	Отображаются кнопки "Да" (Yes) и "Нет" (No).
VbRetryCancel	5	Отображаются кнопки "Повторить" (Retry) и "Отмена" (Cancel).
VbCritical	16	Используется значок "Критическое сообщение".
VbQuestion	32	Используется значок "Предупреждающий запрос".
VbExclamation	48	Используется значок "Предупреждение".
VbInformation	64	Используется значок "Информационное сообщение".
VbDefaultButton1	0	Основной является первая кнопка.
VbDefaultButton2	256	Основной является вторая кнопка.
VbDefaultButton3	512	Основной является третья кнопка.
VbDefaultButton4	768	Основной является четвертая кнопка.
VbApplicationModal	0	Модальное окно на уровне приложения: чтобы продолжить работу с текущим приложением, необходимо ответить на данное сообщение.
VbSystemModal	4096	Модальное окно на уровне системы: все приложения будут недоступны до тех пор, пока пользователь не ответит на данное сообщение.
Первая группа значений (0–5) указывает число и тип кнопок, отображаемых в окне диалога, вторая группа (16, 32, 48, 64) задает тип используемого значка, третья (0, 256, 512) определяет кнопку, которая является основной, а четвертая (0, 4096) модальность окна сообщения.  При определении значения аргумента buttons следует суммировать не более одного значения из каждой группы.

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

Возвращаемые значения

Константа	Значение	Нажатая кнопка
vbOK	1	OK
vbCancel	2	Отмена (Cancel)
vbAbort	3	Прервать (Abort)
vbRetry	4	Повторить (Retry)
vbIgnore	5	Пропустить (Ignore)
vbYes	6	Да (Yes)
vbNo	7	Нет (No)
Дополнительные сведения

Если указаны оба аргумента, helpfile и context, пользователь имеет возможность нажатием клавиши F1 вызвать контекстную справку.  Некоторые главные приложения, например, Microsoft Excel, также автоматически добавляют в диалоговое окно кнопку "Справка".

Если окно диалога содержит кнопку "Отмена" (Cancel), нажатие клавиши ESC эквивалентно нажатию этой кнопки.  Если окно диалога содержит кнопку "Справка" (Help), значит, существует связанный с ним раздел справочной системы.  Однако никакое значение не возвращается до тех пор, пока не будет нажата какая-либо другая кнопка.

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


Инструкция SendKeys

Передает активному окну одно или несколько нажатий клавиш, как если бы они были нажаты на клавиатуре.

Синтаксис

SendKeys string[, wait]

Синтаксис инструкции SendKeys содержит следующие именованные аргументы:

Элемент	Описание
string	Обязательный.  Строковое выражение, указывающее набор нажатий клавиш, который следует передать.
wait	Необязательный.  Значение типа Boolean, указывающее режим ожидания.  Если этот аргумент имеет значение False (значение по умолчанию), управление возвращается вызывающей процедуре сразу после завершения передачи нажатий клавиш.  Если этот аргумент имеет значение True, управление возвращается вызывающей процедуре только после завершения обработки переданных нажатий клавиш.
Дополнительные сведения

Для описания нажатий клавиш используются коды, состоящие из одного или нескольких символов.  В качестве кода клавиши, соответствующей печатному символу, используется сам символ.  Например, нажатию клавиши string "A".  Для описания нескольких нажатий клавиш следует последовательно включить в string коды каждой клавиши.  Например, последовательности клавиш A, B и C соответствует "ABC".

Символы плюс (+), "крышка" (^), знак процентов (%), тильда (~) и круглые скобки ( ) имеют специальное значение для инструкции SendKeys.  Чтобы указать передачу одного из этих символов, следует заключить его в фигурные скобки ({}).  Например, знаку плюс соответствует код {+}.  Квадратные скобки ([ ]) не имеют специального значения для инструкции SendKeys, однако, их также необходимо заключать в фигурные скобки, поскольку они могут иметь специальное значение для других приложений, например, при динамическом обмене данными (DDE).  Фигурным скобкам соответствуют коды {{} и {}}.

Для описания нажатий клавиш, которые не отображаются на экране (например, ENTER или TAB) или вызывают выполнение определенных действий, следует использовать перечисленные ниже коды:

Клавиша	Код
BACKSPACE	{BACKSPACE}, {BS} или {BKSP}
BREAK	{BREAK}
CAPS LOCK	{CAPSLOCK}
DEL или DELETE	{DELETE} или {DEL}
СТРЕЛКА ВНИЗ	{DOWN}
END	{END}
ENTER	{ENTER}или ~
ESC	{ESC}
HELP	{HELP}
HOME	{HOME}
INS или INSERT	{INSERT} или {INS}
СТРЕЛКА ВЛЕВО	{LEFT}
NUM LOCK	{NUMLOCK}
PAGE DOWN	{PGDN}
PAGE UP	{PGUP}
PRINT SCREEN	{PRTSC}
СТРЕЛКА ВПРАВО	{RIGHT}
SCROLL LOCK	{SCROLLLOCK}
TAB	{TAB}
СТРЕЛКА ВВЕРХ	{UP}
F1	{F1}
F2	{F2}
F3	{F3}
F4	{F4}
F5	{F5}
F6	{F6}
F7	{F7}
F8	{F8}
F9	{F9}
F10	{F10}
F11	{F11}
F12	{F12}
F13	{F13}
F14	{F14}
F15	{F15}
F16	{F16}
Для описания сочетания клавиши с клавишами SHIFT, CTRL или ALT следует указать один из перечисленных ниже кодов перед кодом обычной клавиши:

Клавиша	Код
SHIFT	+
CTRL	^
ALT	%
Для описания сочетаний нескольких клавиш с клавишами SHIFT, CTRL или ALT следует заключить коды этих клавиш в круглые скобки, а перед ними указать код, соответствующий клавише SHIFT, CTRL или ALT.  Например, нажатию клавиш E и C при нажатой и удерживаемой клавише SHIFT соответствует "+(EC)".  Для указания нажатия клавиши E при нажатой клавише SHIFT, за которым следует нажатие клавиши C без удерживания клавиши SHIFT, следует использовать код "+EC".

Для описания нескольких последовательных нажатий одной клавиши следует использовать синтаксис {клавиша число}.  Пробел между элементами клавиша и число является обязательным.  Например, {LEFT 42} означает "нажмите клавишу СТРЕЛКА ВЛЕВО 42 раза; {h 10} означает "нажмите клавишу H 10 раз".

Примечание.   Инструкция SendKeys предназначена для передачи нажатий клавиш только приложениям, разработанным для работы в среде Microsoft Windows.  Кроме того, эта инструкция не позволяет передать нажатие клавиши PRINT SCREEN {PRTSC} ни в одно приложение.


Набор символов (0-127)
Набор символов (0–127)

0	•	32	[пробел]	64	@	96	`
1	•	33	!	65	A	97	a
2	•	34	"	66	B	98	b
3	•	35	#	67	C	99	c
4	•	36	$	68	D	100	d
5	•	37	%	69	E	101	e
6	•	38	&	70	F	102	f
7	•	39	'	71	G	103	g
8	* *	40	(	72	H	104	h
9	* *	41	)	73	I	105	i
10	* *	42	*	74	J	106	j
11	•	43	+	75	K	107	k
12	•	44	,	76	L	108	l
13	* *	45	-	77	M	109	m
14	•	46	.	78	N	110	n
15	•	47	/	79	O	111	o
16	•	48	0	80	P	112	p
17	•	49	1	81	Q	113	q
18	•	50	2	82	R	114	r
19	•	51	3	83	S	115	s
20	•	52	4	84	T	116	t
21	•	53	5	85	U	117	u
22	•	54	6	86	V	118	v
23	•	55	7	87	W	119	w
24	•	56	8	88	X	120	x
25	•	57	9	89	Y	121	y
26	•	58	:	90	Z	122	z
27	•	59	;	91	[	123	{
28	•	60	<	92	\	124	|
29	•	61	=	93	]	125	}
30	•	62	>	94	^	126	~
31	•	63	?	95	_	127	•
•	Эти символы не поддерживаются Microsoft Windows.

* *	Значения 8, 9, 10 и 13 преобразуются в символы забоя, табуляции, конца строки и возврата каретки, соответственно.  Эти символы не отображаются графически, однако в зависимости от конкретного приложения могут влиять на изображение текста.


Функция IMEStatus

Возвращает значение типа Integer, указывающее текущий режим редактора IME (Input Method Editor) Microsoft Windows.  Применяется только в дальневосточных версиях.

Синтаксис

IMEStatus

Возвращаемые значения

Японская национальная настройка:

Константа	Значение	Описание
vbIMENoOP	0	IME не установлен.
vbIMEOn	1	IME включен.
vbIMEOff	2	IME отключен.
vbIMEDisable	3	IME отключен.
vbIMEHiragana	4	Хирагана (двухбайтовые символы - 2Б).
vbIMEKatakanaDbl	5	Катакана (2Б).
vbIMEKatakanaSng	6	Катакана (однобайтовые символы - 1Б).
vbIMEAlphaDbl	7	Алфавитно-цифровые (2Б).
vbIMEAlphaSng	8	Алфавитно-цифровые (1Б).
Китайская национальная настройка:

Константа	Значение	Описание
vbIMENoOP	0	IME не установлен.
vbIMEOn	1	IME включен.
vbIMEOff	2	IME отключен.
Корейская национальная настройка; следует анализировать первые пять бит возвращаемого значения (см. ниже):

Бит	Значение	Описание	Значение	Описание
0	0	IME не установлен.	1	IME установлен.
1	0	IME отключен.	1	IME включен.
2	0	Английский режим.	1	Режим Hangeul.
3	0	Режим Banja (1Б).	1	Режим Junja (2Б).
4	0	Обычный режим.	1	Режим Hanja.


Невозможно выполнение программы в режиме прерывания.

Переход в режим прерывания происходит при приостановке выполнения программы. Причины и способы исправления этой ошибки приведены ниже:

•	Была выполнена попытка запуска программы из окна диалога Макрос, но в это время в Visual Basic уже выполнялась программа, хотя и находящаяся в режиме прерывания.

Следует продолжить выполнение текущей программы или завершить ее, прежде чем запускать программу из окна диалога Макрос. Возможен непреднамеренный вход в режим прерывания, например если в программе обнаружена синтаксическая ошибка или возникла ошибка выполнения.. В этом случае следует исправить ошибку и выбрать Продолжить, вместо того, чтобы заново запускать макрос.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Невозможен вызов friend-функции для объекта, который не является экземпляром определяющего класса (ошибка 97).

Friend-процедура может быть вызвана из модулей, не входящих в класс, но являющихся частью проекта, в котором этот класс определен. Причины и способы исправления этой ошибки приведены ниже:

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

Это может произойти, например, если имеется два класса, classics и classy, и было выполнено ошибочное присвоение экземпляра classy экземпляру classics.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Не удается выйти из режима редактирования, поскольку не удается создать элемент управления.

Для выхода из режима конструктора должны быть подтверждены все элементы управления. Причины и способы исправления этой ошибки приведены ниже:

•	Создание указанного в сообщении об ошибке элемента управления невозможно.

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

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Объект не является источником событий программирования.

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

•	Написана процедура обработки событий для события объекта, но это событие недоступно вне проекта.

Следует обратиться к документации по объекту. Возможно существует обходной путь работы с нужным событием.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Операция не поддерживается в DLL.

Внутри библиотеки динамической компоновки (DLL) доступны не все инструкции Visual Basic. Причины и способы исправления этой ошибки приведены ниже:

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

Следует найти в классе все невыполнимые в DLL инструкции, например End и удалить их.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Недопустимый внешний оператор Enum.

Enum – это тип данных, используемый для создания групп декларативных констант (называемых перечнями). Причины и способы исправления этой ошибки приведены ниже:

•	Инструкция End Enum использована вне описания Enum.

Следует проверить наличие текста между телом описания Enum и инструкцией End Enum.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Документ был открыт в режиме отключенных макросов.

Допускается отключение и разрешение макросов ведущим приложением. Причины и способы исправления этой ошибки приведены ниже :

•	Документ открыт в режиме Macros Disabled (макросы запрещены).

Для включения макросов следует закрыть и вновь открыть документ, установив параметр Enable Macros (разрешить макросы).

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


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

В библиотеках содержится информация о типах и объектах. Причины и способы исправления этой ошибки приведены ниже:

•	Определение для этого символа содержится в библиотеке типов.

Если необходимо указать, что символ содержится в упомянутой библиотеке, для добавления ссылки на нее следует нажать OK.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Объект не имеет процедуры Property Let.

Присвоение значения свойству невозможно, если только оно не содержит метод Property Let. Причины и способы исправления этой ошибки приведены ниже:

•	Попытка присвоить значение свойству, не содержащему метод Property Let.

Прямое присвоение значения этому свойству невозможно. Если создать класс, допускается изменение интерфейса, путем добавления метода Property Let. Либо следует обратиться к документации для выяснения обходного пути присвоения значения.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Справка недоступна.

Не для всех ошибок существуют соответствующие разделы справки. Причины и способы исправления этой ошибки приведены ниже:

•	Произошла ошибка, для которой не существует справки.

Следует обратиться к файлу. Часто в этом файле содержится необходимые сведения.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Не удается подавить события объекта, поскольку объект уже активизировал события для максимального числа поддерживаемых им
Не удается подавить события объекта, поскольку объект уже активизировал события для максимального числа поддерживаемых им получателей (ошибка 96).

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

•	Попытка использования инструкции Set для переменной WithEvents элемента управления формы.

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

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Не удается найти для DLL точку указанную входа.

Точкой входа является имя процедуры DLL или представляющее процедуру порядковое число. Причины и способы исправления этой ошибки приведены ниже :

•	В библиотеке типов неверно описана точка входа, возможно неправильно задано имя или порядковое число.

Следует связаться с поставщиком для получения исправленной библиотеки типов.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Невозможно выполнение указанной программы.

При создании исполняемого файла требуется запуск некоторых внешних программ. Причины и способы исправления этой ошибки приведены ниже :

•	Недостаток памяти или системных ресурсов для запуска компилятора или компоновщика.

Следует закрыть все активные приложения, чтобы освободить память и системные ресурсы.

•	Неправильно установлен Visual Basic.

Следует переустановить Visual Basic.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


Повторяющийеся ресурсы с одинаковыми именем и типом.

Файл ресурсов Windows обычно содержит битовые изображения, текстовые строки и другие похожие данные, используемые приложением. Причины и способы исправления этой ошибки приведены ниже :

•	Используемый в проекте файл ресурсов Windows содержит два или более ресурса с одинаковыми именем и типом, либо файл содержит ресурс, автоматически создаваемый Visual Basic.

Следует использовать другой файл ресурса, либо заново создать неправильный файл и удалить один из повторяющихся ресурсов.

Для получения более подробных сведений следует выбрать нужный элемент и нажать клавишу F1.


События Activate и Deactivate

Событие Activate (Активизация) происходит, когда объект становится активным окном. Событие Deactivate (Деактивизация) происходит, когда объект более не является активным окном.

Синтаксис

Private Sub объект_Activate()

Private Sub объект_Deactivate()

Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".

Дополнительные сведения

Имеется возможность активизировать объект, используя в программе метод Show.

Событие Activate может произойти, только когда объект является видимым. Форма UserForm, загруженная с помощью метода Load, не является видимой до тех пор, пока не применен метод Show.

События Activate и Deactivate происходят, только когда пользователь перемещает фокус внутри приложения. Перемещение фокуса к объекту или из объекта другого приложения не вызывает никакого события.

При выгрузке объекта событие Deactivate не происходит.


Событие Initialize

Данное событие происходит после загрузки объекта, но до его отображения на экране.

Синтаксис

Private Sub объект_Initialize()

Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".

Дополнительные сведения

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


Событие QueryClose

Данное событие происходит перед закрытием формы UserForm.

Синтаксис

Private Sub UserForm_QueryClose(отмена As Integer, причина As Integer)

Синтаксис события QueryClose (Запрос закрытия) содержит следующие элементы:

Элемент	Описание
отмена	Переменная типа Integer. Присвоение данному аргументу значения, отличного от 0, прекращает событие QueryClose во всех загруженных пользователем формах и предотвращает закрытие формы UserForm и приложения.
причина	Значение или константа, указывающая причину события QueryClose.
Возвращаемые значения

Аргумент причина принимает следующие значения:

Константа	Значение	Описание
vbFormControlMenu	0	Пользователь выбрал команду Close в оконном меню формы.
VbFormCode	1	В программе вызывается инструкция Unload.
vbAppWindows	2	Конец текущего сеанса Windows.
vbAppTaskManager	3	Диспетчер задач Windows закрывает приложение.
Эти константы перечислены в окне Просмотр объектовобъектной библиотеки VBA (Visual Basic для Приложений). Обратите внимание, что константа vbFormMDIForm, также указанная в окне Просмотр объектов, пока еще не поддерживается.

Дополнительные сведения

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

Когда приложение закрывается, пользователь может использовать процедуру обработки события QueryClose для присвоения значения True свойству Cancel, прекращая таким образом процесс закрытия.


Событие Resize

Данное событие происходит при первом выводе объекта на экран или при изменении вида окна объекта. Примером может служить свертывание или восстановление формы UserForm.

Синтаксис

Private Sub UserForm_Resize()

Private Sub объект_Resize(высота As Single, ширина As Single)

Синтаксис события Resize (Изменение размера) содержит следующие элементы

Элемент	Описание
объект	Объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
высота	Число, указывающее новую высоту формы пользователя.
ширина	Число, указывающее новую ширину формы пользователя.
Дополнительные сведения

Процедура обработки события "Изменение размера" (Resize) используется для изменения расположения или размеров элементов управления, когда изменяется размер родительской формы UserForm. Она используется также для вычисления новых значений переменныхs или свойств.


Событие Terminate

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

Синтаксис

Private Sub объект_Terminate( )

Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".

Дополнительные сведения

Событие Terminate (Завершение) происходит после того, как объект выгружен. Оно не запускается, если экземпляры формы UserForm или класса удаляются из памяти вследствие неправильного завершения приложения. Например, если приложение пользователя вызывает инструкцию End до того, как все существующие экземпляры класса или формы пользователя удалены из памяти, событие Terminate не происходит для данного класса или формы.


Примеры событий Activate и Deactivate

В следующем примере программы используются два объекта UserForm: UserForm1 и UserForm2. Скопируйте эти процедуры в модуль формы UserForm1 и затем добавьте форму UserForm2. В процедуре события Activate для формы UserForm1 создается ее заголовок. Когда пользователь выбирает область клиента формы UserForm1, UserForm2 загружается и отображается на экране, запуская событие Deactivate для UserForm1, которое изменяет заголовки обеих форм.

' Событие Activate (Активизация) для UserForm1.

Private Sub UserForm_Activate()

    UserForm1.Caption = "Выберите область клиента."

End Sub

' Событие Click (Нажатие кнопки) для UserForm1.

Private Sub UserForm_Click()

    Load UserForm2

    UserForm2.StartUpPosition = 3

    UserForm2.Show

End Sub

' Событие Deactivate (Деактивизация) для UserForm1.

Private Sub UserForm_Deactivate()

    UserForm1.Caption = "Я утратила фокус!"

    UserForm2.Caption = "Фокус перешел от UserForm1 ко мне."

End Sub


Пример события Initialize

В следующем примере предполагается, что в программе определены пользователем две формы UserForm. Если произошло событие Initialize (Инициализация) для формы UserForm1, форма UserForm2 загружается и выводится на экран. Когда пользователь выбирает UserForm2 при помощи мыши, она скрывается, и появляется форма UserForm1. Если же выбирается UserForm1, UserForm2 появляется вновь.

' Процедура события Initialize (Инициализация)

' для UserForm1.

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Событие Click (Нажатие кнопки) для UserForm2.

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Событие Click (Нажатие кнопки) для UserForm1.

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Пример события QueryClose

В следующем примере программы пользователю предлагается для закрытия формы UserForm выбрать ее область клиента. Если пользователь попытается использовать список Close из области заголовка, параметр Отмена примет значение, отличное от нуля, предотвращая тем самым завершение. Напротив, когда пользователь выбирает область клиента, переменная CloseMode получает значение 1, и выполняется инструкция Unload Me.

Private Sub UserForm_Activate()

    UserForm1.Caption = "Чтобы закрыть меня, надо выбрать меня!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    Делает использование списка Close неэффективным.

    If CloseMode <> 1 Then Cancel = 1

    UserForm1.Caption = "Close не будет работать. Выберите меня!"

End Sub


Пример события Resize

В данном примере продемонстрировано использование событий Activate (Активизация) и Click (Нажатие кнопки) для запуска события Resize (Изменение размера) для объекта UserForm. Когда пользователь выбирает область клиента формы, форма или увеличивается, или сокращается, а в области заголовка указывается ее новая высота. Следует отметить, что для хранения исходного значения высоты UserForm используется свойство Tag.

' Событие Activate (Активизация) для UserForm1.

Private Sub UserForm_Activate()

UserForm1.Caption = "Чтобы сделать меня выше, надо выбрать меня!"

Tag = Height	' Хранение первоначальной высоты.

End Sub

' Событие Click (Нажатие кнопки) для UserForm1.

Private Sub UserForm_Click()

Dim NewHeight As Single

NewHeight = Height

' Если высота формы недостаточна, увеличьте ее.

If NewHeight = Val(Tag) Then

Height = Val(Tag) * 2

Else

' Если форма слишком высокая, сделайте ее ниже.

Height = Val(Tag)

End If

End Sub

' Событие Resize (Изменение размера) для UserForm1.

Private Sub UserForm_Resize()

UserForm1.Caption = "Новая высота: " & Height & "  " & "Для изменения размера выберите меня!"

End Sub


Пример события Terminate

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

Private Sub UserForm_Activate()

    UserForm1.Caption = "Чтобы закрыть меня, надо выбрать меня!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_Terminate()

    Dim Count As Integer

    For Count = 1 To 100

        Beep

    Next

End Sub


Метод Hide

Скрывает объект, но не выгружает его.

Синтаксис

объект.Hide

Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение". Если этот элемент синтаксиса опущен, предполагается, что объектом является форма UserForm, имеющая фокус.

Дополнительные сведения

Когда объект скрывается, он удаляется с экрана и его свойство Visible приобретает значение False. Элементы управления скрытого объекта недоступны для пользователя, однако они доступны программным образом для выполняемого приложения, для других процессов, взаимодействие с которыми может осуществляться по протоколу DDE или же с помощью программирования объектов, а также для событий элемента управления Timer.

Когда скрывается форма UserForm, пользователь не может взаимодействовать с приложением, пока не завершится подпрограмма обработки событий, вызвавшая скрытие формы.

Если в момент вызова метода Hide форма UserForm не загружена, метод Hide загружает форму, но не выводит ее на экран.


Инструкция Load

Загружает объект, но не отображает его на экране.

Синтаксис

Load объект

Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".

Дополнительные сведения

Когда объект загружается, он помещается в память, но не становится видимым. Чтобы сделать объект видимым, используется метод Show. Пока объект не станет видимым, пользователь не может взаимодействовать с ним, однако с объектом можно работать программным образом в его процедуре обработки события Initialize (Инициализация).


Метод PrintForm

Посылает изображение объекта UserForm на принтер по битам.

Синтаксис

объект.PrintForm

Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение". Если этот элемент синтаксиса опущен, предполагается, что объектом является форма UserForm, имеющая фокус.

Дополнительные сведения

Метод PrintForm выводит на печать все видимые объекты и точечные рисунки объекта UserForm, а также печатает графические объекты, добавленные к объекту UserForm.

Тип принтера, используемый методом PrintForm определяется настройками системной Панели управления.


Метод Show

Выводит на экран объект UserForm.

Синтаксис

[объект.]Show

Необязательный прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение". Если этот элемент синтаксиса опущен, предполагается, что объектом является форма UserForm, связанная с активным модулемUserForm.

Дополнительные сведения

Если при вызове метода Show указанный объект не загружен, Visual Basic автоматически загружает его.

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

Когда UserForm выведена на экран, другие формы данного приложения недоступны, однако это не относится к другим приложениям.


Инструкция Unload

Удаляет объект из памяти.

Синтаксис

Unload объект

Обязательный прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".

Дополнительные сведения

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


Метод WhatsThisMode

Преобразует указатель мыши к виду Что это такое? и подготавливает приложение к выводу справки для выбранного объекта.

Синтаксис

объект.WhatsThisMode

Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение". Если этот элемент синтаксиса опущен, предполагается, что объектом является форма UserForm, имеющая фокус.

Дополнительные сведения

Выполнение метода WhatsThisMode переводит приложение в то же состояние, что и нажатие кнопки Что это такое? в области заголовка окна. Указатель мыши преобразуется к виду Что это такое?. Когда пользователь выбирает объект, для вызова контекстной справки используется свойство WhatsThisHelpID выбранного объекта.


Пример использования метода Hide

В следующем примере предполагается, что в программе определены пользователем две формы UserForms. Если произошло событие "Инициализация" (Initialize) для формы UserForm1, форма UserForm2 загружается и выводится на экран. Когда пользователь выбирает UserForm2 при помощи мыши, она скрывается, и появляется форма UserForm1. Если же выбирается UserForm1, UserForm2 появляется вновь.

' Процедура события "Инициализация" (Initialize)

' для формы UserForm1.

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm2".

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Событие "Нажатие кнопки" (Click) для формы

UserForm1.

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Пример использования инструкции Load

В данном примере в момент, когда для формы UserForm1 происходит событие "Инициализация" (Initialize), загружается форма UserForm2. При последующем выделении с помощью мыши UserForm2 открывается UserForm1.

' Процедура события "Инициализация" (Initialize)

' для формы UserForm1.

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm2.

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Пример использования метода PrintForm

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

' Событие "Нажатие кнопки" (Click) для формы UserForm1

Private Sub UserForm_Click()

UserForm1.PrintForm

End Sub


Пример использования метода Show

В следующем примере предполагается, что в программе определены пользователем две формы UserForms. Если произошло событие "Инициализация" (Initialize) для формы UserForm1, форма UserForm2 загружается и выводится на экран. Когда пользователь выбирает при помощи мыши UserForm2, она делается невидимой, и появляется форма UserForm1. Если же выбирается UserForm1, UserForm2 появляется вновь.

' Процедура события "Инициализация" (Initialize)

' для формы UserForm1.

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Пример использования инструкции Unload

В следующем примере предполагается, что в программе определены пользователем две формы UserForms. Если произошло событие "Инициализация" (Initialize) для формы UserForm1, форма UserForm2 загружается и выводится на экран. Когда пользователь выбирает при помощи мыши UserForm2, она выгружается, и появляется форма UserForm1. Если же выбирается UserForm1, то она, в свою очередь, выгружается.

' Процедура события "Инициализация" (Initialize)

' для формы UserForm1.

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm2

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm1

Private Sub UserForm_Click()

Unload UserForm1

End Sub


Пример использования метода WhatsThisMode

В данном примере указатель мыши преобразуется к виду Что это такое? (знак вопроса), когда пользователь выбирает форму UserForm при помощи мыши. Если ни одно из свойств WhatsThisHelp и WhatsThisButton в окне Свойства не имеет значения True, последующий вызов процедуры не приводит к выполнению каких-либо операций.

Private Sub UserForm_Click()

' Переведите указатель мыши в режим "Что это такое?"

WhatsThisMode

End Sub


Объект UserForm, семейство UserForms

Объект UserForm представляет собой окно или диалоговое окно, являющееся составной частью интерфейса пользователя в приложении.

Семейство UserForms является семейством, компоненты которого представляют все загруженные формы UserForm в приложении. У семейства UserForms имеются свойства Count и Item, а также метод Add. Свойство Count указывает число компонентов в семействе; свойство Item (компонент, используемый по умолчанию) указывает определенный компонент семейства; метод Add помещает в семейство новый компонент UserForm.

Синтаксис

UserForm

UserForms[.Item](индекс)

Прототип индекс представляет собой значение типа Integer в диапазоне от 0 до UserForms.Count – 1. Item -- это используемый по умолчанию компонент семейства UserForms, поэтому его можно не указывать.

Дополнительные сведения

Семейство UserForms можно использовать для итераций по всем загруженным формам пользователя в приложении. Оно определяет внутреннюю глобальную переменную с именем UserForms. Переменную UserForms(индекс) можно передать функции, аргумент которой указан как класс UserForm.

Формы пользователя имеют свойства, определяющие внешний вид, как например, положение, размер, цвет и реакция на события.

Формы пользователя также могут реагировать на события, инициированные пользователем или запущенные системой. Например, пользователь может написать подпрограмму обработки события Initialize (Инициализация) для UserForm, чтобы инициализировать переменные уровня модуля до того, как UserForm будет выведена на экран.

Помимо свойств и событий для программной обработки форм пользователя могут использоваться методы. Например, можно использовать метод Move для изменения положения и размера формы UserForm.

При конструировании форм пользователя следует задать свойство BorderStyle для определения границ и свойство Caption для занесения текста в область заголовка. В программе можно использовать методы Show и Hide, чтобы делать форму соответственно видимой и невидимой во время выполнения.

UserForm относится к типу данных Object . Пользователь может описать переменные с типом UserForm до их присвоения экземпляру типа UserForm, объявляемому во время разработки. Подобным образом, допускается передача аргумента с типом UserForm в процедуру. В программе возможно создание нескольких экземпляров форм пользователя с помощью ключевого слова New в инструкциях Dim, Set и Static.

Доступ к семейству элементов управления формы UserForm осуществляется с помощью семейства Controls. Например, чтобы скрыть все элементы управления формы UserForm, можно использовать код, подобный следующему:

For Each Control in UserForm1.Controls

Control.Visible = False

Next Control


Свойство Calendar

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

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

Параметр	Знач.	Описание
vbCalGreg	0	Григорианский календарь (используется по умолчанию).
VbCalHijri	1	Календарь Хиджры.
Дополнительные сведения

Значение свойства Calendar задается только в программе. В следующем примере устанавливается календарь Хиджры:

Calendar = vbCalHijri


Свойство StartUpPosition

Возвращает или задает значение, определяющее положение формы UserForm при ее первом появлении на экране.

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

Параметр	Знач.	Описание
Manual	0	Начальное значение не указывается
CenterOwner	1	Выравнивание по центру объекта, к которому принадлежит форма UserForm.
CenterScreen	2	Выравнивание по центру экрана.
Windows Default	3	Положение в верхнем левом углу экрана (стандарт Windows).
Дополнительные сведения

Значение свойства StartUpPosition можно задать в программе или в окне Свойства.


Свойство WhatsThisButton

Возвращает значение переменной типа Boolean, указывающее, появляется ли кнопка Что это такое? в области заголовка объекта UserForm. Во время выполнения доступно только для чтения.

Дополнительные сведения

Свойство WhatsThisButton может иметь следующие параметры:

Параметр	Описание
True	Включает отображение кнопки Что это такое?
False	Выключает отображение кнопки Что это такое? (используется по умолчанию).
Дополнительные сведения

Для того, чтобы свойство WhatsThisButton имело значение True, необходимо, чтобы свойство WhatsThisHelp имело значение True.


Свойство WhatsThisHelp

Возвращает значение переменной типа Boolean, определяющей, используется ли для контекстной справки всплывающее окно, предоставляемое справочной системой Windows 95, или же главное окно Справка. Во время выполнения доступно только для чтения.

Дополнительные сведения

Свойство WhatsThisHelp может иметь следующие параметры:

Параметр	Описание
True	Приложение использует один из методов доступа к команде всплывающего меню Что это такое? для запуска справочной системы Windows и загрузки раздела, указанного с помощью свойства WhatsThisHelpID.
False	Приложение использует клавишу F1 для запуска справочной системы Windows и загрузки раздела, указанного с помощью свойства HelpContextID (используется по умолчанию).
Дополнительные сведения

Имеется два метода доступа к справочной системе Что это такое? из приложения. Оба они требуют, чтобы свойство WhatsThisHelp имело значение True.

•	Кнопка Что это такое? подается в область заголовка формы UserForm с помощью свойства WhatsThisButton. Указатель мыши принимает соответствующий вид -- стрелка со знаком вопроса. Для вывода какого-либо раздела справки надо выбрать соответствующий элемент управления и задать в нем требуемое значение свойства WhatsThisHelpID.

•	Вызов метода WhatsThisMode формы UserForm. Это влечет такие же последствия, что и выбор кнопки Что это такое?, хотя кнопка и не используется. Например, пользователь может вызвать этот метод с помощью команды в пункте строки меню приложения.


Пример использования свойства StartUpPosition

В следующем примере используется инструкция Load и метод Show в событии "Нажатие кнопки " (Click) в форме UserForm1 для загрузки формы UserForm2, в которой свойству StartUpPosition присвоено значение 3 (стандартное положение Windows). Затем метод Show делает форму UserForm2 видимой.

Private Sub UserForm1_Click()

Load UserForm2

UserForm2.StartUpPosition = 3

UserForm2.Show

End Sub


Ключевое слово не найдено

Ключевое слово, выбранное пользователем, не найдено в справочнике Visual Basic. Причиной могут быть следующие ошибочные действия пользователя: неверное написание ключевого слова; выделение неполного или, напротив, избыточного текста; или же запрос справки для слова, которое не является ключевым словом Visual Basic.

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

Простейший способ получить справку для указанного ключевого слова -- поместить место вставки в пределах ключевого слова и нажать клавишу F1. При этом не надо выделять ключевое слово. Фактически, если выделяется только часть слова или более одного слова, справочная система Windows не найдет его.

Если поместить курсор между "a" и "l" в ключевом слове Value и нажать клавишу F1, будет выведен раздел для свойства Value, как показано в следующем примере.

Worksheets(1).Range ("A2").value=3.14159

Чтобы использовать вкладку Поиск справочной системы Windows , следует выбрать раздел Вызов справки в меню ?.


Collection (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'Collection'.

2	Нажмите кнопку


ColorConstants (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'ColorConstants'.

2	Нажмите кнопку


Constants (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'Constants'.

2	Нажмите кнопку


Conversion (Окно "Просмотр объектов")

Модуль Conversion содержит процедуры, предназначенные для выполнения различных операций преобразования. Эти процедуры могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'Conversion'.

2	Нажмите кнопку

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


DateTime (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре или свойстве:

1	Выберите эту процедуру или свойство из списка Компоненты 'DateTime'.

2	Нажмите кнопку


ErrObject (Окно "Просмотр объектов")

Модуль ErrObject содержит свойства и процедуры, предназначенные для распознавания и обработки ошибок выполнения с помощью объекта Err. Они могут использоваться в любом месте программы пользователя.

Для получения справки о конкретном свойстве или процедуре:

1	Выберите это свойство или процедуру из списка Компоненты 'ErrObject'.

2	Нажмите кнопку


FileSystem (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'FileSystem'.

2	Нажмите кнопку


Financial (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'Financial'.

2	Нажмите кнопку


Global (Окно "Просмотр объектов")

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

Для получения справки о конкретном свойстве или процедуре:

1	Выберите эту процедуру из списка Компоненты 'Global'.

2	Нажмите кнопку


Information (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'Information'.

2	Нажмите кнопку


Interaction (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'Interaction'.

2	Нажмите кнопку


KeycodeConstants (Окно "Просмотр объектов")

Модуль KeyCodeConstants содержит стандартные константы кодов клавиш, которые могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'KeyCodeConstants'.

2	Нажмите кнопку


Math (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'Math'.

2	Нажмите кнопку


String (Окно "Просмотр объектов")

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

Для получения справки о конкретной процедуре:

1	Выберите эту процедуру из списка Компоненты 'String'.

2	Нажмите кнопку


SystemColorConstants (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'SystemColorConstants'.

2	Нажмите кнопку


VbAppWinStyle (Окно "Просмотр объектов")

Перечень VbAppWinStyle содержит константы функции Shell, предназначенные для управления внешним видом окна приложения. Эти константы могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbAppWinStyle'.

2	Нажмите кнопку


VbCalendar (Окно "Просмотр объектов")

ПереченьVbCalendar содержит константы, предназначенные для определения типа календаря, используемого в Visual Basic. Эти константы могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу процедуру из списка Компоненты 'VbCalendar'.

2	Нажмите кнопку


VbCompareMethod (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbCompareMethod'.

2	Нажмите кнопку


VbDayOfWeek (Окно "Просмотр объектов")

Перечень VbDayOfWeek содержит константы, предназначенные для распознавания определенных дней недели с помощью функций DateDiff, DatePart, и Weekday. Эти константы могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbDayOfWeek'.

2	Нажмите кнопку


VbFileAttribute (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbFileAttribute'.

2	Нажмите кнопку


VbFirstWeekOfYear (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbFirstWeekOfYear'.

2	Нажмите кнопку


VbIMEStatus (Окно "Просмотр объектов")

Перечень VbIMEStatus, применяемый только в дальневосточных версиях, содержит константы, предназначенные для определения режима IME (Input Method Editor) с помощью функции IMEStatus. Эти константы могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbIMEStatus'.

2	Нажмите кнопку


VbMsgBoxResult (Окно "Просмотр объектов")

Перечень VbMsgBoxResult содержит константы, указывающие, какая кнопка была нажата в окне сообщения, отображаемом с помощью функции MsgBox. Эти константы могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbMsgBoxResult'.

2	Нажмите кнопку


VbMsgBoxStyle (Окно "Просмотр объектов")

Перечень VbMsgBoxStyle содержит константы, задающие режим окна сообщения, отображаемого с помощью функции MsgBox, а также имеющиеся в нем символы и кнопки. Эти константы могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbMsgBoxStyle'.

2	Нажмите кнопку


VbQueryClose (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbQueryClose'.

2	Нажмите кнопку


VbStrConv (Окно "Просмотр объектов")

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

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbStrConv'.

2	Нажмите кнопку


VbVarType (Окно "Просмотр объектов")

Перечень VbVarType содержит константы, указывающие различные подтипы типа данных Variant. Эти константы соответствуют возвращаемым значениям функции VarType и могут использоваться в любом месте программы пользователя.

Для получения справки о конкретной константе:

1	Выберите эту константу из списка Компоненты 'VbVarType'.

2	Нажмите кнопку


Пример использования объекта Collection

В данном примере создается объект Collection (MyClasses), а затем создается окно диалога, в котором пользователи добавляют объекты в семейство. Для проверки работы этой программы необходимо выбрать команду Модуль класса (Class Module) в меню Вставка и описать общую переменную InstanceName на уровне модуля Class1 Class1 (Public InstanceName), в которую будут записываться имена экземпляров объекта. Оставьте по умолчанию имя Class1 . Скопируйте и вставьте следующую программу в общий раздел другого модуля и запустите ее с помощью инструкции ClassNamer в другой процедуре.  (Данный пример будет работать только в главном приложении, поддерживающем классы).

Sub ClassNamer()

Dim MyClasses As New Collection	' Создаем объект Collection.

Dim Num	' Счетчик индексов.

Dim Msg As String	' Переменная для записи приглашения.

Dim TheName, MyObject, NameList	' Переменные типа Variant.

Do

Dim Inst As New Class1	' Создаем новый экземпляр Class1.

Num = Num + 1	' Увеличиваем значение Num, а затем

' принимаем имя.

Msg = "Введите имя объекта." & Chr(13) _

 & "Для просмотра имен в семействе нажмите кнопку 'Отмена'."

TheName = InputBox(Msg, "Имена компонентов семейства")

Inst.InstanceName = TheName	' Даем имя экземпляру объекта.

' Если пользователь ввел имя,

If Inst.InstanceName <> "" Then

' добавляем именованный объект в семейство.

MyClasses.Add item := Inst, key := CStr(Num)

End If

' Очищаем текущую ссылку, чтобы принять новую.

Set Inst = Nothing

Loop Until TheName = ""

For Each MyObject In MyClasses	' Создаем список имен.

NameList = NameList & MyObject.InstanceName & Chr(13)

Next MyObject

' Выводим список имен в окно сообщений.

MsgBox NameList, , "Имена компонентов в семействе MyClasses"

For Num = 1 To MyClasses.Count	' Удаляем имя из семейства.

MyClasses.Remove 1	' Поскольку семейства индексируются

' автоматически, каждый раз удаляем

Next	' первый компонент семейства.

End Sub


Пример использования объекта Err

В данном примере свойства объекта Err используются для создания окна диалога с сообщением об ошибке. Отметим, что если при создании ошибки Visual Basic с помощью метода Raise предварительно вызывается метод Clear , то значениями свойств объекта Err становятся стандартные значения свойств, определенные Visual Basic.

Dim Msg

' Вывод окна сообщений при возникновении ошибки.

On Error Resume Next	' Отложенный перехват ошибок.

Err.Clear

Err.Raise 6	' Создаем ошибку "Переполнение".

' Проверка ошибки и вывод окна сообщения.

If Err.Number <> 0 Then

Msg = "Ошибка # " & Str(Err.Number) & " возникла в " _

& Err.Source & Chr(13) & Err.Description

MsgBox Msg, , "Ошибка", Err.Helpfile, Err.HelpContext

End If


Объект Collection

Объект Collection (семейство) представляет упорядоченной набор компонентов, на который можно ссылаться как на единое целое.

Дополнительные сведения

Объект Collection предоставляет возможность ссылок на группу родственных компонентов как на единый объект.  Единственным условием связи различных компонентов является сам факт их включения в семейство.  Компоненты семейства не обязаны иметь одинаковый тип данных.

Объект Collection создается аналогично любому другому объекту. Например:

Dim X As New Collection

После создания семейства его компоненты добавляются с помощью метода Add и удаляются с помощью метода Remove.  Возвратить конкретные компоненты из семейства позволяет метод Item, а перебор всех элементов семейства осуществляется с помощью конструкции For Each...Next.


Объект Debug

Объект Debug используется для организации вывода в окно отладки во время выполнения.


Объект Err

Содержит информацию об ошибках выполнения.

Дополнительные сведения

Свойства объекта Err задаются генератором ошибок Visual Basic, объектом или разработчиком программы Visual Basic.

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

Если возникает ошибка выполнения, то свойства объекта Err получают значения, однозначно определяющие ошибку.  В эти свойства записываются также сведения, которые могут быть использованы для обработки ошибки.  Для того чтобы создать ошибку выполнения в программе, следует использовать метод Raise.

Значения свойств объекта Err сбрасываются до нулей или пустых строк ("") после выполнения инструкций Resume или On Error  любого вида, а также после выполнения инструкций Exit Sub, Exit Function или Exit Property в программе обработки ошибки.  Для того чтобы явным образом сбросить значения свойств объекта Err, следует вызвать метод Clear.

Для генерации ошибок в модуле класса следует использовать метод Raise (а не инструкцию Error).  Необходимость применения метода Raise в других программах зависит от объема информации, которую требуется возвращать.  В программе, в которой для генерирования ошибок вместо метода Raise используются инструкции Error, свойства объекта Err по умолчанию получают следующие значения при выполнении инструкции Error:

Свойство	Значение
Number	Значение, указанное как аргумент инструкции Error.  Может представлять любой допустимый код ошибки.
Source	Имя текущего проекта Visual Basic.
Description	Строка, соответствующая строке, возвращаемой функцией Error для кода ошибки, указанного в свойстве Number, если такая строка существует.  В противном случае свойство Description содержит значение "Ошибка, определяемая приложением или объектом".
HelpFile	Полное имя (включая диск и путь) файла справки Visual Basic.
HelpContext	Контекстный идентификатор файла справки Visual Basic, соответствующий ошибке с кодом, указанным в свойстве Number.
LastDLLError	Только для 32-разрядных операционных систем Microsoft Windows.  Содержит системный код ошибки для последнего вызова библиотеки динамической компоновки (DLL).  Значение свойства LastDLLError доступно только для чтения.
Синтаксически нет необходимости изменять существующие программы, в которых используются функция Err и инструкции Error.  Однако совместное использование объекта Err и инструкций Error может дать нежелательные результаты.  Например, даже если свойствам объекта Err были присвоены значения, то эти значения могут быть сброшены до стандартных, перечисленных в приведенной выше таблице, при выполнении инструкции Error.  Хотя по-прежнему разрешается использовать инструкцию Error для генерирования ошибок выполнения в программах Visual Basic, эта инструкция сохранена, в основном, для совместимости существующих программ с новой версией.  Для обработки системных ошибок, а также в новых программах следует использовать объект Err и методы Raise и Clear, в особенности при работе с модулями класса.

Объект Err является внутренним объектом с глобальной областью определения.  Нет необходимости создавать отдельный экземпляр этого объекта в программе пользователя.


Пример использования оператора ^

В данном примере демонстрируется использование оператора ^ для возведения числа в степень.

Dim MyValue

MyValue = 2 ^ 2	' Возвращает 4.

MyValue = 3 ^ 3 ^ 3	' Возвращает 19683.

MyValue = (-5) ^ 3	' Возвращает -125.


Пример использования оператора +

В данном примере демонстрируется использование оператора + для суммирования чисел.  Оператор + позволяет также выполнять слияние строковых значений, однако, во избежание неопределенности рекомендуется выполнять эту операцию только с помощью оператора &. Если один из операндов содержит числовое значение, а второй строковое, то оператор + выполняет операцию сложения. Если оба операнда содержат строковые значения, выполняется слияние строк (конкатенация).

Dim MyNumber, Var1, Var2

MyNumber = 2 + 2	' Возвращает 4.

MyNumber = 4257.04 + 98112	' Возвращает 102369.04.

Var1 = "34": Var2 = 6	' Инициализирует переменные разных типов.

MyNumber = Var1 + Var2	' Возвращает 40.

Var1 = "34": Var2 = "6"	' Инициализирует строковые переменные.

MyNumber = Var1 + Var2	' Возвращает "346" (слияние строк)


Пример использования оператора -

В данном примере демонстрируется использование оператора - для вычисления разности двух чисел.

Dim MyResult

MyResult = 4 - 2	' Возвращает 2.

MyResult = 459.35 - 334.90	' Возвращает 124.45.


Пример использования оператора *

В данном примере демонстрируется использование оператора * для расчета произведения двух чисел.

Dim MyValue

MyValue = 2 * 2	' Возвращает 4.

MyValue = 459.35 * 334.90 	' Возвращает 153836.315.


Пример использования оператора /

В данном примере демонстрируется использование оператора / для деления двух чисел.

Dim MyValue

MyValue = 10 / 4	' Возвращает 2.5.

MyValue = 10 / 3	' Возвращает 3.333333.


Пример использования оператора \

В данном примере демонстрируется использование оператора \ для целого деления двух чисел.

Dim MyValue

MyValue = 11 \ 4	' Возвращает 2.

MyValue = 9 \ 3	' Возвращает 3.

MyValue = 100 \ 3	' Возвращает 33.


Пример использования оператора Mod

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

Dim MyResult

MyResult = 10 Mod 5	' Возвращает 0.

MyResult = 10 Mod 3	' Возвращает 1.

MyResult = 12 Mod 4.3	' Возвращает 0.

MyResult = 12.6 Mod 5	' Возвращает 3.


Пример использования оператора &

В данном примере демонстрируется использование оператора & для слияния строк.

Dim MyStr

MyStr = "Всем" & " привет"	' Возвращает "Всем привет".

MyStr = "Check " & 123 & " Check"	' Возвращает "Check 123 Check".


Пример использования операторов сравнения

В данном примере демонстрируется использование операторов сравнения для сравнения выражений.

Dim MyResult, Var1, Var2

MyResult = (45 < 35)	' Возвращает False.

MyResult = (45 = 45)	' Возвращает True.

MyResult = (4 <> 3)	' Возвращает True.

MyResult = ("5" > "4")	' Возвращает True.

Var1 = "5": Var2 = 4	' Инициализирует переменные.

MyResult = (Var1 > Var2)	' Возвращает True.

Var1 = 5: Var2 = Empty

MyResult = (Var1 > Var2)	' Возвращает True.

Var1 = 0: Var2 = Empty

MyResult = (Var1 = Var2)	' Возвращает True.


Пример использования оператора And

В данном примере демонстрируется использование оператора And для выполнения операции конъюнкции (логического умножения) двух выражений.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Инициализирует переменные.

MyCheck = A > B And B > C	' Возвращает True.

MyCheck = B > A And B > C	' Возвращает False.

MyCheck = A > B And B > D	' Возвращает Null.

MyCheck = A And B	' Возвращает 8 (поразрядное сравнение).


Пример использования оператора Eqv

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

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Инициализирует переменные.

MyCheck = A > B Eqv B > C	' Возвращает True.

MyCheck = B > A Eqv B > C	' Возвращает False.

MyCheck = A > B Eqv B > D	' Возвращает Null.

MyCheck = A Eqv B	' Возвращает -3 (поразрядное сравнение).


Пример использования оператора Imp

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

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Инициализирует переменные

MyCheck = A > B Imp B > C	' Возвращает True.

MyCheck = A > B Imp C > B	' Возвращает False.

MyCheck = B > A Imp C > B	' Возвращает True.

MyCheck = B > A Imp C > D	' Возвращает True.

MyCheck = C > D Imp B > A	' Возвращает Null.

MyCheck = B Imp A	' Возвращает -1 (поразрядное сравнение).


Пример использования оператора Not

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

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Инициализирует переменные.

MyCheck = Not(A > B)	' Возвращает False.

MyCheck = Not(B > A)	' Возвращает True.

MyCheck = Not(C > D)	' Возвращает Null.

MyCheck = Not A	' Возвращает -11 (поразрядное сравнение).


Пример использования оператора Or

В данном примере демонстрируется использование оператора Or для выполнения операции дизъюнкции (логического сложения) двух выражений.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Инициализирует переменные.

MyCheck = A > B Or B > C	' Возвращает True.

MyCheck = B > A Or B > C	' Возвращает True.

MyCheck = A > B Or B > D	' Возвращает True.

MyCheck = B > D Or B > A	' Возвращает Null.

MyCheck = A Or B	' Возвращает 10 (поразрядное сравнение).


Пример использования оператора Xor

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

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Инициализирует переменные.

MyCheck = A > B Xor B > C	' Возвращает False.

MyCheck = B > A Xor B > C	' Возвращает True.

MyCheck = B > A Xor C > B	' Возвращает False.

MyCheck = B > D Xor A > B	' Возвращает Null.

MyCheck = A Xor B	' Возвращает 2 (поразрядное сравнение).


Пример использования оператора Like

В данном примере демонстрируется использование оператора Like для сравнения строкового значения с образцом.

Dim MyCheck

MyCheck = "aBBBa" Like "a*a"	' Возвращает True.

MyCheck = "F" Like "[A-Z]"	' Возвращает True.

MyCheck = "F" Like "[!A-Z]"	' Возвращает False.

MyCheck = "a2a" Like "a#a"	' Возвращает True.

MyCheck = "aM5b" Like "a[L-P]#[!c-e]"	' Возвращает True.

MyCheck = "BAT123khg" Like "B?T*"	' Возвращает True.

MyCheck = "CAT123khg" Like "B?T*"	' Возвращает False.


Пример использования оператора Is

В данном примере демонстрируется использование оператора Is для сравнения ссылок на объекты. Имена объектных переменных являются произвольными и используются только для демонстрации.

Dim MyObject, YourObject, ThisObject, OtherObject, ThatObject, MyCheck

Set YourObject = MyObject	' Определяет ссылки на объекты.

Set ThisObject = MyObject

Set ThatObject = OtherObject

MyCheck = YourObject Is ThisObject	' Возвращает True.

MyCheck = ThatObject Is ThisObject	' Возвращает False.

' Пусть MyObject <> OtherObject

MyCheck = MyObject Is ThatObject	' Возвращает False.


Типы операторов

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


Старшинство операторов

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

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

Арифметические	Сравнения	Логические
Возведение в степень (^)	Равняется (=)	Not
Изменение знака (–)	Не равняется (<>)	And
Умножение и деление (*, /)	Меньше (<)	Or
Целое деление (\)	Больше (>)	Xor
Деление по модулю (Mod)	Меньше или равняется (<=)	Eqv
Сложение и вычитание (+, –)	Больше или равняется (>=)	Imp
Слияние строк (&)	Like Is
Стоящие рядом в выражении операторы умножения и деления выполняются слева направо.  В таком же порядке выполняются стоящие рядом операторы сложения и вычитания.  Операторы внутри круглых скобок всегда выполняются раньше, чем операторы вне скобок.  Порядок выполнения операторов, стоящих внутри скобок, определяется старшинством операторов.

Оператор конкатенации (слияния строк) (&) не является арифметическим оператором, однако, по порядку старшинства он следует сразу за арифметическими операторами и перед операторами сравнения.

Оператор Like , равный по старшинству остальным операторам сравнения, выделяется в самостоятельный тип оператора сравнения с образцом.

Оператор Is является оператором сравнения ссылок на объект.  Этот оператор не выполняет сравнение объектов или их значений; он проверяет только, указывают ли две разные ссылки на один объект.


Арифметические операторы

Оператор ^

Оператор *

Оператор /

Оператор \

Оператор Mod

Оператор +

Оператор -


Операторы конкатенации

Оператор &

Оператор +


Логические операторы

Оператор And

Оператор Eqv

Оператор Imp

Оператор Not

Оператор Or

Оператор Xor


Оператор ^

Возводит число в степень.

Синтаксис

результат = число^показатель

Оператор ^ использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
число	Обязательный; любое числовое выражение.
показатель	Обязательный; любое числовое выражение.
Дополнительные сведения

Отрицательные значения операнда число допускаются только для целых значений операнда показатель.  Стоящие рядом в выражении несколько операторов возведения в степень ^ выполняются слева направо.

Обычно, результат имеет тип данных Double или Variant, содержащий значение типа Double.  Если любой из операндов число или показатель представлен выражением, имеющим значение Null, то результат также имеет значение Null.


Оператор +

Возвращает сумму двух чисел.

Синтаксис

результат = выражение1+выражение2

Оператор + использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение1	Обязательный; любое expression.
выражение2	Обязательный; любое выражение.
Дополнительные сведения

Несмотря на то, что допускается использование оператора + для слияния строковых значений, рекомендуется во избежание возможной путаницы и необходимости дополнительных описаний в программе использовать для слияния строк оператор конкатенации &.

Если по крайней мере один из операндов не принадлежит к типу Variant, действуют следующие правила:

Операнды	Операция
Оба выражения имеют числовые типы данных (Byte, Boolean, Integer, Long, Single, Double, Date, Currency или Decimal)	Сложение.
Оба выражения имеют тип String	Слияние строк.
Одно выражение имеет числовой тип данных, а другое тип Variant (за исключением значения Null).	Сложение.
Одно выражение имеет тип String , а другое тип Variant (за исключением значения Null).	Слияние строк.
Одно выражение имеет тип Variant и содержит значение Empty.	результат получает значение второго операнда.
Одно выражение имеет числовой тип данных, а другое тип String.	Возникает ошибка несогласования типов.
Оба выражения имеют значения Null	результат имеет значение Null.
Если оба операнда являются выражениями типа Variant, действуют следующие правила:

Операнды	Операция
Оба выражения типа Variant являются числовыми.	Сложение.
Оба выражения типа Variant являются строковыми.	Слияние строк.
Одно из выражений типа Variant является числовым, а другое строковым.	Сложение.
В простых операциях сложения с участием только операндов с числовыми типами результат обычно имеет тип данных слагаемого с максимальной точностью.  В порядке возрастания точности следуют типы Byte, Integer, Long, Single, Double, Currency и Decimal.  Из этого правила существуют такие исключения:

Операция	результат
Сложение чисел типа Single и Long.	Double.
результат должен получить значение подтипа Long, Single или Date типа Variant, выходящее за рамки допустимых для этих типов диапазонов значений.	Преобразуется к подтипу Double.
результат должен получить значение подтипа Byte типа Variant, выходящее за рамки допустимых для этого типа диапазона значений.	Преобразуется к подтипу Integer.
результат должен получить значение подтипа Integer типа Variant, выходящее за рамки допустимых для этого типа диапазона значений.	Преобразуется к подтипу Long.
Значение типа Date складывается со значением любого типа.	Date.
Если один или оба операнда является выражением со значением Null, то результат имеет значение Null.  Если оба операнда имеют значение Empty, результат имеет тип Integer.  Если значение Empty имеет только один из операндов, результат получает значение второго операнда.

Примечание.   Точность результатов операций сложения и вычитания может отличаться от точности результатов операции умножения.


Оператор -
Оператор –

Возвращает разность двух чисел или изменяет знак числового выражения.

Синтаксис 1

результат = число1–число2

Синтаксис 2

–число

Оператор – использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
число	Обязательный; любое числовое выражение.
число1	Обязательный; любое числовое выражение.
число2	Обязательный; любое числовое выражение.
Дополнительные сведения

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

результат обычно имеет тип данных выражения с максимальной точностью.  В порядке возрастания точности следуют типы Byte, Integer, Long, Single, Double, Currency и Decimal.  Из этого правила имеются такие исключения:

Операция	результат
Вычитание значений Single и Long.	Преобразуется к типу Double.
результат должен получить значение подтипа Long, Single или Date типа Variant, выходящее за рамки допустимых для этих типов диапазонов значений.	Преобразуется к подтипу Variant, содержащему значение типа Double.
результат должен получить значение подтипа Byte типа Variant, выходящее за рамки допустимых для этого типа диапазона значений.	Преобразуется к подтипу Integer.
результат должен получить значение подтипа Integer типа Variant, выходящее за рамки допустимых для этого типа диапазона значений.	Преобразуется к подтипу Long.
Значение типа Date участвует в операции вычитания со значением любого типа.	Date.
Два значения типа Date участвуют в операции вычитания.	Double.
Если один или оба операнда является выражением со значением Null, то результат имеет значение Null.  Выражение со значением Empty рассматривается как имеющее значение 0.

Примечание.   Точность результатов операций сложения и вычитания может отличаться от точности результатов операции умножения.


Оператор *

Возвращает произведение двух чисел.

Синтаксис

результат = число1*число2

Оператор * использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
число1	Обязательный; любое числовое выражение.
число2	Обязательный; любое числовое выражение.
Дополнительные сведения

результат обычно имеет тип данных выражения с максимальной точностью.  В порядке возрастания точности следуют типы Byte, Integer, Long, Single, Currency, Double и Decimal.  Из этого правила имеются такие исключения:

Операция	результат
Умножение чисел типа Single и Long,	Double.
результат должен получить значение подтипа Long, Single или Date типа Variant, выходящее за рамки допустимых для этих типов диапазонов значений.	Преобразуется к подтипу Double типа Variant.
результат должен получить значение подтипа Byte типа Variant, выходящее за рамки допустимых для этого типа диапазона значений.	Преобразуется к подтипу Integer.
результат должен получить значение подтипа Integer типа Variant, выходящее за рамки допустимых для этого типа диапазона значений.	Преобразуется к подтипу Long.
Если один или оба операнда является выражением со значением Null, то результат имеет значение Null.  Выражение, имеющее значение Empty, рассматривается как имеющее значение 0.

Примечание.   Точность результатов операции умножения может отличаться от точности результатов операций сложения и вычитания.


Оператор /

Возвращает результат деления двух чисел.

Синтаксис

результат = число1/число2

Оператор / использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
число1	Обязательный; любое числовое выражение.
число2	Обязательный; любое числовое выражение.
Дополнительные сведения

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

Операция	результат
Оба выражения имеют тип Byte, Integer или Single.	Тип Single, если при этом результат не выходит за рамки допустимого для этого типа диапазона значений; в последнем случае возникает ошибка.
Оба выражения принадлежат к подтипу Byte, Integer или Single типа Variant.	результат имеет подтип Single типа Variant, если при этом он не выходит за рамки допустимого диапазона значений; в последнем случае результат получает значение подтипа Double.
В делении участвует значение типа Decimal и значение любого другого типа.	Decimal.
Если один или оба операнда является выражением со значением Null, то результат имеет значение Null.  Выражение, имеющее значение Empty, рассматривается как имеющее значение 0.


Оператор \

Возвращает результат целого деления двух чисел.

Синтаксис

результат = число1\число2

Оператор \ использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
число1	Обязательный; любое числовое выражение.
число2	Обязательный; любое числовое выражение.
Дополнительные сведения

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

Обычно, результат имеет тип данных Byte, подтип Byte типа Variant, тип Integer, подтип Integer типа Variant, тип Long или подтип Long типа Variant, вне зависимости от того, является ли результат целым числом.  Любая дробная часть отбрасывается.  Если один или оба операнда является выражением со значением Null, результат имеет значение Null.  Выражение, имеющее значение Empty, рассматривается как имеющее значение 0.


Оператор Mod

Возвращает остаток при целом делении двух чисел (значение по модулю).

Синтаксис

результат = число1 Mod число2

Оператор Mod использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
число1	Обязательный; любое числовое выражение.
число2	Обязательный; любое числовое выражение.
Дополнительные сведения

Выполняется деление по модулю (нахождение остатка) число1 на число2 (с округлением действительных чисел до целых).  результат получает значение остатка.  Например, в следующем выражении A (результат) равняется 5.

A = 19 Mod 6.7

Обычно, результат имеет тип данных Byte, подтип Byte типа Variant, тип Integer, подтип Integer типа Variant, тип Long или подтип Long типа Variant, вне зависимости от того, является ли результат целым числом.  Любая дробная часть отбрасывается.  Если один или оба операнда является выражением со значением Null, результат имеет значение Null.  Выражение, имеющее значение Empty, рассматривается как имеющее значение 0.


Оператор &

Используется для слияния двух строковых выражений.

Синтаксис

результат = выражение1 & выражение2

Оператор & использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая переменная типа String или Variant.
выражение1	Обязательный; любое выражение.
выражение2	Обязательный; любое выражение.
Дополнительные сведения

Если выражение не содержит строковое значение, то оно преобразуется к подтипу String типа Variant.  Если оба операнда являются строковыми выражениями, то результат имеет тип данных String; в противном случае результат принадлежит к подтипу String типа Variant.  Если оба операнда является выражением со значением Null, результат имеет значение Null. Однако если значение Null имеет только одно выражение, то при слиянии с другим операндом этот операнд. рассматривается как пустая строка ("").  Любой операнд со значением Empty также рассматривается как пустая строка.


Операторы сравнения

Используются для сравнения двух выражений.

Синтаксис

результат = выражение1 операторСравнения выражение2

результат = объект1 Is объект2

результат = строка Like образец

Операторы сравнения используют следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение	Обязательный; любое выражение.
операторСравнения	Обязательный; любой оператор сравнения.
объект	Обязательный; любое имя объекта.
строка	Обязательный; любое строковое выражение.
образец	Обязательный; любое строковое выражение или диапазон символов.
Дополнительные сведения

Ниже приведен список операторов сравнения и условия, при которых результат имеет значение True, False или Null:

Оператор	True	False	Null
< (Меньше)	выражение1 < выражение2	выражение1 >= выражение2	выражение1 или выражение2 = Null
<= (Меньше или равняется)	выражение1 <= выражение2	выражение1 > выражение2	выражение1 или выражение2 = Null
> (Больше)	выражение1 > выражение2	выражение1 <= выражение2	выражение1 или выражение2 = Null
>= (Больше или равняется)	выражение1 >= выражение2	выражение1 < выражение2	выражение1 или выражение2 = Null
= (Равняется)	выражение1 = выражение2	выражение1 <> выражение2	выражение1 или выражение2 = Null
<> (Не равняется)	выражение1 <> выражение2	выражение1 = выражение2	выражение1 или выражение2 = Null
Примечание.   Операторы Is и Like функционально отличаются от операторов сравнения, перечисленных в таблице.

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

Операнды	Операция
Оба выражения имеют числовые типы данных (Byte, Boolean, Integer, Long, Single, Double, Date, Currency или Decimal).	Сравнение чисел.
Оба выражения имеют тип String.	Сравнение строк.
Одно выражение имеет числовой тип, а другое тип Variant, содержащий число или допускающий преобразование к числовому типу.	Сравнение чисел.
Одно выражение имеет числовой тип, а другое тип Variant, содержащий строку, не допускающую преобразование к числовому типу.	Ошибка несогласования типов.
Одно выражение имеет тип String, а другое тип Variant (не Null).	Сравнение строк.
Одно выражение имеет значение Empty, а другое числовой тип данных.	Сравнение чисел, где значение Empty рассматривается как 0.
Одно выражение имеет значение Empty, а другое тип String.	Сравнение строк, где значение Empty рассматривается как пустая строка ("").
Если оба операнда, выражение1 и выражение2, принадлежат к типу Variant , то способ сравнения определяется подтипами, к которым они принадлежат.  В следующей таблице показано,  как осуществляется сравнение в зависимости от подтипов типа Variant:

Операнды	Операция
Оба выражения типа Variant имеют числовые значения.	Сравнение чисел.
Оба выражения типа Variant имеют строковые значения.	Сравнение строк.
Одно из выражений типа Variant является числовым, а другое строковым.	Числовое выражение считается меньшим, чем строковое.
Одно из выражений типа Variant имеет значение Empty, а другое числовое значение.	Сравнение чисел, где значение Empty рассматривается как 0.
Одно из выражений типа Variant имеет значение Empty, а другое строковое значение.	Сравнение строк, где значение Empty рассматривается как пустая строка ("").
Оба выражения типа Variant имеют значение Empty.	Выражения считаются равными.
При сравнении значения типа Single со значением типа Double, значение типа Double округляется до точности типа Single.

Если значение типа Currency сравнивается со значением типа Single или Double, то значение типа Single или Double преобразуется к типу Currency.  Аналогично, при сравнении значения типа Decimal со значением типа Single или Double, значение типа Single или Double преобразуется к типу Decimal.  Для типа Currency любая дробная часть со значением, меньшим 0,0001 может оказаться потерянной. Для типа Decimal могут быть потеряны дробные части, меньшие 1E-28, или возникнуть ошибка переполнения.  Потеря дробных частей может привести к тому, что числа, не являющиеся целыми, будут сравниваться как целые.


Оператор And

Возвращает результат конъюнкции (логического И) для двух выражений.

Синтаксис

результат = выражение1 And выражение2

Оператор And использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение1	Обязательный; любое выражение.
выражение2	Обязательный; любое выражение.
Дополнительные сведения

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

выражение1	выражение2	результат
True	True	True
True	False	False
True	Null	Null
False	True	False
False	False	False
False	Null	False
Null	True	Null
Null	False	False
Null	Null	Null
Оператор And выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1	Разряд в выражение2	результат
0	0	0
0	1	0
1	0	0
1	1	1


Оператор Eqv

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

Синтаксис

результат = выражение1 Eqv выражение2

Оператор Eqv использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение1	Обязательный; любое выражение.
выражение2	Обязательный; любое выражение.
Дополнительные сведения

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

выражение1	выражение2	результат
True	True	True
True	False	False
False	True	False
False	False	True
Оператор Eqv выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1	Разряд в выражение2	результат
0	0	1
0	1	0
1	0	0
1	1	1


Оператор Imp

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

Синтаксис

результат = выражение1 Imp выражение2

Оператор Imp использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение1	Обязательный; любое выражение.
выражение2	Обязательный; любое выражение.
Дополнительные сведения

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

выражение1	выражение2	результат
True	True	True
True	False	False
True	Null	Null
False	True	True
False	False	True
False	Null	True
Null	True	True
Null	False	Null
Null	Null	Null
Оператор Imp выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1	Разряд в выражение2	результат
0	0	1
0	1	1
1	0	0
1	1	1


Оператор Not

Выполняет над выражением операцию логического отрицания.

Синтаксис

результат = Not выражение

Оператор Not использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение	Обязательный; любое выражение.
Дополнительные сведения

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

выражение	результат
True	False
False	True
Null	Null
Оператор Not выполняет также поразрядное изменение значений каждого разряда переменной и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение	результат
0	1
1	0


Оператор Or

Выполняет операцию логического ИЛИ (сложения) для двух выражений.

Синтаксис

результат = выражение1 Or выражение2

Оператор Or использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение1	Обязательный; любое выражение.
выражение2	Обязательный; любое выражение.
Дополнительные сведения

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

выражение1	выражение2	результат
True	True	True
True	False	True
True	Null	True
False	True	True
False	False	False
False	Null	Null
Null	True	True
Null	False	Null
Null	Null	Null
Оператор Or выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1	Разряд в выражение2	результат
0	0	0
0	1	1
1	0	1
1	1	1


Оператор Xor

Выполняет операцию исключающего ИЛИ для двух выражений.

Синтаксис

[результат =] выражение1 Xor выражение2

Оператор Xor использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
выражение1	Обязательный; любое выражение.
выражение2	Обязательный; любое выражение.
Дополнительные сведения

Если одно и только одно из выражений истинно (имеет значение True), результат имеет значение True.  Если хотя бы одно из выражений имеет значение Null, результат также имеет значение Null,  Если ни одно из выражений не имеет значение Null, результат определяется следующим образом:

выражение1	выражение2	результат
True	True	False
True	False	True
False	True	True
False	False	False
Оператор Xor выполняет также поразрядное сравнение двух выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1	Разряд в выражение2	результат
0	0	0
0	1	1
1	0	1
1	1	0


Оператор Is

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

Синтаксис

результат = объект1 Is объект2

Оператор Is использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
объект1	Обязательный; любое имя объекта.
объект2	Обязательный; любое имя объекта.
Дополнительные сведения

Если переменные объект1 и объект2 содержат ссылки на один объект, результат имеет значение True; в противном случае результат имеет значение False.  Ссылки на один объект в двух переменных задаются различными способами.

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

Set A = B

Следующая инструкция задает в переменных A и B ссылку на тот же объект, что и в переменной C:

Set A = C

Set B = C


Оператор Like

Используется для сравнения двух строковых выражений.

Синтаксис

результат = строка Like образец

Оператор Like использует следующие операнды:

Элемент	Описание
результат	Обязательный; любая числовая переменная.
строка	Обязательный; любое строковое выражение.
образец	Обязательный; любое строковое выражение, удовлетворяющее описанным ниже соглашениям о сравнениях строк с образцом.
Дополнительные сведения

Если значение переменной строка соответствует значению переменной образец, результат имеет значение True; при их несоответствии результат имеет значение False.  Если любой из операндов, строка или образец, имеет значение Null, результат также имеет значение Null.

Характеристики оператора Like определяются настройкой, задаваемой в инструкции Option Compare.  Если не указано другое, то стандартный способ сравнения строк в каждом модуле задается инструкцией 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)< (А=а) < (К=к) < (Ш=ш)

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

Специальные символы	Совпадающие символы
?	Любой одиночный символ.
*	Любое количество символов или отсутствие символа.
#	Любая одиночная цифра (0–9).
[список]	Любой одиночный символ, входящий в список.
[!список]	Любой одиночный символ, не входящий в список.
Любой одиночный символ в переменной строка может быть сравнен с группой из одного или нескольких символов (список), заключенных в квадратные скобки ([ ]). Такая группа может содержать символы практически с любыми кодами, включая цифры.

Примечание.   Специальные символы левая квадратная скобка ([), вопросительный знак (?), символ (#) и звездочка (*) сравниваются как обычные символы, только если они заключены в квадратные скобки.  Правая квадратная скобка (]) в группе всегда рассматривается как специальный символ, но может сравниваться как обычный символ вне группы.

В дополнение к простому списку символов в квадратных скобках, допускается указание в образце диапазона символов с помощью дефиса (–), отделяющего нижнюю и верхнюю границы диапазона.  Например, [A-Z] указывает, что совпадающими будут считаться все символы верхнего регистра латинского алфавита, находящиеся в нужной позиции в переменной строка.  Допускается указание внутри прямых скобок нескольких диапазонов без символов разделителей.

Конкретный вид указанного диапазона определяется действующим во время выполнения способом упорядочивания символов (который задается инструкцией Option Compare и национальной настройкойсистемы).  Если использовать приведенный выше пример в режиме Option Compare Binary, то диапазону [A–E] соответствуют символы A, B и E.  В режиме Option Compare Text, образцу [A–E] соответствуют символы A, a, А, а, B, b, E, e.  Отметим, что в это диапазон не попадают символы К или к, поскольку все символы русского алфавита размещаются в порядке сортировки после стандартных символов латинского алфавита.

Существуют также следующие правила, действующие при сравнении с образцом:

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

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

•	Определять диапазон необходимо в порядке возрастания.  [A-Z] является допустимым определением диапазона, а [Z-A] недопустимым.

•	Пустая пара квадратных скобок [] игнорируется; она рассматривается как пустая строка ("").

В некоторых языках имеются специальные символы алфавита, представляющие пару букв.  Например, символ "ж" представляет стоящие рядом буквы "a" и "e".  Оператор Like распознает такой символ и соответствующую пару букв как эквивалентные.

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


Пример использования свойства Count

В данном примере свойство Count объекта Collection используется для определения числа циклов, необходимых для удаления всех компонентов семейства MyClasses. При числовой индексации компонентов семейства нумерация по умолчанию начинается с 1. Так как в семействе после удаления компонентов индексация автоматически выполняется заново, следующая программа в каждом цикле удаляет текущий первый компонент семейства.

Dim Num, MyClasses

For Num = 1 To MyClasses.Count	' Удаляет имя из семейства.

MyClasses.Remove 1	' По умолчанию нумерация компонентов

Next	' семейства начинается с 1.


Пример использования свойства Description

В данном примере определяемый пользователем текст сообщение записывается как значение свойства Description объекта Err.

Err.Description = "Невозможно получить доступ к объекту, необходимому" _

& " для выполнения данной операции."


Пример использования свойства HelpContext

В данном примере свойство HelpContext объекта Err используется для вывода раздела справка Visual Basic для ошибки Переполнение.

Dim Msg

Err.Clear

On Error Resume Next

Err.Raise 6 ' Создает ошибку "Переполнение".

If Err.Number <> 0 Then

Msg = "Нажмите клавишу F1 или кнопку 'Справка' " & Err.HelpFile & _

" для вывода раздела, соответствующего идентификатору: " & _

Err.HelpContext

MsgBox Msg, , "Ошибка: " & Err.Description, Err.HelpFile, _

Err.HelpContext

End If


Пример использования свойства HelpFile

В данном примере свойство HelpFile объекта Err используется для вызова справочной системы Microsoft Windows. По умолчанию, значение свойства HelpFile содержит имя файла Справочника Visual Basic.

Dim Msg

Err.Clear

On Error Resume Next	' Подавление ошибок в целях демонстрации.

Err.Raise 6	' Создает ошибку "Переполнение".

Msg = "Нажмите клавишу F1 или кнопку 'Справка' " & Err.HelpFile & _

" для вывода нужного раздела справки."

MsgBox Msg, , "Ошибка: " & Err.Description,Err.HelpFile, Err.HelpContext


Пример использования свойства LastDLLError

Если следующие программные строки вставить в модуль UserForm, это приведет к попытке вызова функции библиотеки динамической компоновки (DLL). Вызов не состоится, так как переданный аргумент (указатель Null) вызовет ошибку. Однако при любом событии выполнение SQL не будет прервано. В строках, следующих за инструкцией вызова, проверяется возвращаемое значение и затем заполняется значение свойства LastDLLError объекта Err, чтобы вывести код ошибки.

 Private Declare Function SQLCancel Lib "ODBC32.dll" _

 (ByVal hstmt As Long) As Integer

Private Sub UserForm_Click()

Dim RetVal

' Вызов с некорректным аргументом.

RetVal = SQLCancel(myhandle&)

' Проверка кода ошибки SQL.

If RetVal = -2 Then

'Выводит код сообщения.

MsgBox "Код ошибки :" & Err.LastDllError

    End If

End Sub


Пример использования свойства Number

В первом примере проиллюстрировано типичное использование свойства Number в подпрограмме обработки ошибок. Во втором примере проверка свойства Number объекта Err позволяет определить, является ли ошибка, возвращаемая из программируемого объекта, определенной в объекте, или она может быть определена как ошибка Visual Basic. Следует отметить, что значением константы vbObjectError является большое отрицательное число, которое объект складывает с собственным кодом ошибки, указывая, что эта ошибка определена на сервере. Поэтому для получения собственного кода ошибки объекта необходимо вычесть эту константу из значения свойства Err.Number. Если ошибка определена в объекте, основной код ошибки сохраняется в переменной MyError, которая выводится в окне сообщения вместе с именем источника ошибки. Если значение Err.Number представляет ошибку Visual Basic, то в окне сообщения выводится код ошибки Visual Basic.

' Типичное использование свойства Number.

Sub test()

On Error GoTo out

Dim x, y

x = 1 / y	' Приводит к ошибке деления на нуль.

Exit Sub

out:

MsgBox Err.Number

MsgBox Err.Description

' Проверка ошибки деления на нуль.

If Err.Number = 11 Then

y = y + 1

End If

Resume

End Sub

' Использование свойства Number для обработки ошибок

' программируемого объекта.

Dim MyError, Msg

' Вначале, вычитаем константу, добавленную объектом, чтобы получить

' собственный код ошибки объекта.

MyError = Err.Number - vbObjectError

' Если после вычитания константы vbObjectError число по-прежнему

' попадает в диапазон 0 - 65535, то ошибка определена в объекте.

If MyError > 0 And MyError < 65535 Then

Msg = "Адресуемый объект присвоил ошибке следующий код : " _

 	& MyError & ". Источником ошибки является: " _

& Err.Source & ". Нажмите клавишу F1 для вывода справки."

' В противном случае это код ошибки Visual Basic.

Else

Msg = "Эта ошибка (# " & Err.Number & ") имеет код ошибки Visual" & _

" Basic. Для вывода раздела справки Visual Basic нажмите" & _

" кнопку 'Справка' или клавишу F1."

End If

MsgBox Msg, , "Ошибка объекта", Err.HelpFile, Err.HelpContext


Пример использования свойства Source

В данном примере программный идентификатор программируемого объекта, созданный в Visual Basic, записывается в переменную MyObjectID, после чего присваивается свойству Source объекта Err при создании ошибки с помощью метода Raise. При обработке ошибок не следует использовать в программах свойство Source, или другие свойства объекта Err, отличные от свойства Number. Единственным полезным использованием таких свойств является вывод пространной информации об ошибке для конечного пользователя в тех случаях, когда ошибку не удается обработать. В примере предполагается, что App и MyClass представляют собой реальные объекты.

Dim MyClass, MyObjectID, MyHelpFile, MyHelpContext

' Объект типа MyClass создает ошибку и определяет значения всех

' свойств объекта Err, включая свойство Source, которое получает

' значение MyObjectID. Это значение является комбинацией значений

' свойства Title объекта App и свойства Name объекта MyClass.

MyObjectID = App.Title & "." & MyClass.Name

Err.Raise	Number := vbObjectError + 894, Source := MyObjectID, _

Description := "Не удается завершить задачу.", _

HelpFile := MyHelpFile, HelpContext := MyHelpContext


Свойство Count

Возвращает значение типа Long (длинное целое), содержащее число компонентов в семействе.  Доступно только для чтения.


Свойство Description

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

Для объекта Err возвращает или задает текст сообщения, соответствующего определенной ошибке.

Дополнительные сведения

Значением свойства Description является текст, содержащий краткое описание ошибки.  Это свойство используют для вывода сообщений пользователям приложения об ошибке, которую невозможно или не нужно обрабатывать.  При генерировании определяемой пользователем ошибки следует указать в этом свойстве краткое описание создаваемой ошибки.  Если значение свойства Description не указано, а значение свойства Number соответствует значению ошибки выполнения, определенному в Visual Basic, то при возникновении ошибки значением свойства Description становится строка, возвращаемая функцией Error.


Свойство HelpContext

Возвращает или задает строковое выражение, содержащее контекстный идентификатор раздела в файле справочной системы Microsoft Windows.  Доступно для чтения/записи.

Дополнительные сведения

Свойство HelpContext позволяет автоматически вывести определенный раздел файла справки, указанный в свойстве HelpFile.  Если оба значения свойств HelpFile и HelpContext окажутся пустыми, будет проверено значение свойства Number.  Если Number соответствует значению ошибки выполнения Visual Basic, то будет использован контекстный идентификатор раздела файла справки Visual Basic для этой ошибке.  Если же значение свойства Number не совпадает ни с одним из кодов ошибки Visual Basic, то открывается экран оглавления справки Visual Basic.

Примечание.   Разработчик приложения должен написать программы для обработки типичных ошибок. При программировании работы с объектом можно использовать файл справочной системы объекта для более качественной обработки ошибок или для вывода сообщений пользователям приложения в случаях, когда ошибка является непоправимой.


Свойство HelpFile

Возвращает или задает строковое выражение, определяющее полный путь к файлу справочной системы Microsoft Windows.  Доступно для чтения/записи.

Дополнительные сведения

Если в свойстве HelpFile указан файл справки Microsoft Windows, то этот файл автоматически вызывается при нажатии кнопки "Справка" (или клавиши F1) в окне сообщения об ошибке.  Если при этом значением свойства HelpContext является допустимое значение контекстного идентификатора раздела указанного файла, автоматически выводится этот раздел.  Если файл справки в свойстве HelpFile не указан, открывается файл справки Visual Basic.

Примечание.   Разработчик приложения должен написать программы для обработки типичных ошибок.  При программировании работы с объектом можно использовать файл справочной системы объекта для более качественной обработки ошибок или для вывода сообщений пользователям приложения в случаях, когда ошибка является непоправимой.


Свойство LastDLLError

Возвращает системный код ошибки, возникшей при вызове библиотеки динамической компоновки (DLL).  Доступно только для чтения.

Дополнительные сведения

Свойство LastDLLError применимо только при вызовах в программах Visual Basic библиотек динамической компоновки (DLL).  После вызова библиотеки вызываемая функция обычно возвращает код, свидетельствующий об успешном или неудачном выполнении, и заполняет значение свойства LastDLLError.  Для того чтобы получить список возвращаемых значений и их описание, следует обратиться к документации по функциям DLL.  При любом случае возвращения кода неудачного вызова в приложение, использующее Visual Basic, необходимо немедленно проверить значение свойства LastDLLError.  Задание значения свойства LastDLLError не приводит к возникновению исключения.


Свойство Number

Возвращает или задает числовое значение, представляющее код ошибки.  Свойство Number является свойством объекта Err, используемым по умолчанию.  Доступно для чтения/записи.

Дополнительные сведения

При возвращении определяемой пользователем ошибки следует определить значение Err.Number путем сложения указанного разработчиком кода ошибки с константой vbObjectError.  Например, чтобы возвратить в качестве кода ошибки значение 1051, необходимо использовать следующую конструкцию:

Err.Raise Number := vbObjectError + 1051, Source:= "ИмяКласса"


Свойство Source

Возвращает или задает строковое выражение, указывающее имя объекта или приложения, в котором возникла ошибка.  Доступно для чтения/записи.

Дополнительные сведения

Свойство Source строковое выражение, представляющее объект, являющийся исходным источником ошибки.  Выражение обычно содержит имя класса объекта или программный идентификатор.  Свойство Source используют для передачи пользователям необходимой информации в тех случаях, когда программа не способна обработать ошибку, возникающую в объекте при доступе к нему.  Например, если при обращении к Microsoft Excel возвращается ошибка Деление на нуль, то Microsoft Excel задает для свойства Err.Number собственный код этой ошибки и указывает в свойстве Source определяющую приложение строку "Excel.Application".

При генерировании ошибки в программе значением свойства Source является программный идентификатор приложения.  Для модулей класса свойство Source должно содержать имя в виде проект.класс.  При возникновении неожиданной ошибки в программе пользователя свойство Source получает значение автоматически.  При ошибках в стандартном модуле свойство Source содержит имя проекта.  При ошибках в модуле класса свойство Source получает имя вида проект.класс.


Пример использования инструкции DeleteSetting

В данном примере сначала с помощью инструкции SaveSetting заполняются элементы реестра Windows (или файла .INI на 16-разрядных платформах Windows) для приложения MyApp, а затем инструкция DeleteSetting вызывается для их удаления. Поскольку аргумент key не определен, удаляется весь раздел, в том числе имя раздела и все содержащиеся в нем записи.

' Заполнение реестра.

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' Удаление из реестра раздела со всем содержимым.

DeleteSetting "MyApp", "Startup"


Пример использования функции GetAllSettings

В данном примере сначала с помощью инструкции SaveSetting заполняются элементы реестра Windows (или файла .INI на 16-разрядных платформах Windows) для приложения, указанного в аргументе appname, а затем значения записей выводятся с помощью функции GetAllSettings. Отметим, что функция GetAllSettings не возвращает имена приложений и имена разделов, указанных в аргументе section . И наконец, функция DeleteSetting удаляет элементы, относящиеся к приложению.

' Описываем переменную типа Variant, в которую будет записан двумерный

' массив, возвращаемый функцией GetAllSettings.

' Описываем счетчик с типом Integer.

Dim MySettings As Variant, intSettings As Integer

' Заполнение реестра.

SaveSetting appname := "MyApp", section := "Startup", _

key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' Возвращает записи.

MySettings = GetAllSettings(appname := "MyApp", section := "Startup")

For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)

Debug.Print MySettings(intSettings, 0), MySettings(intSettings, 1)

Next intSettings

DeleteSetting "MyApp", "Startup"


Пример использования функции GetSetting

В данном примере сначала с помощью инструкции SaveSetting заполняются элементы реестра Windows (или файла .INI на 16-разрядных платформах Windows) для приложения, указанного в аргументе appname, а затем одна из записей выводится с помощью функции GetSetting. Поскольку аргумент default определен, обязательно будет возвращено некоторое значение. Следует отметить, что имена разделов, указанные в аргументе section, не могут быть возвращены с помощью GetSetting. И наконец, функция DeleteSetting удаляет элементы, относящиеся к приложению.

' Переменная типа Variant, в которую будет записан двумерный

' массив, возвращаемый функцией GetSetting.

Dim MySettings As Variant

' Заполнение реестра.

SaveSetting "MyApp","Startup", "Top", 75

SaveSetting "MyApp","Startup", "Left", 50

Debug.Print GetSetting(appname := "MyApp", section := "Startup", _

                       key := "Left", default := "25")

DeleteSetting "MyApp", "Startup"


Пример использования инструкции SaveSetting

В данном примере сначала с помощью инструкции SaveSetting заполняются элементы реестра Windows (или файла .INI на 16-разрядных платформах Windows) для приложения MyApp, а затем инструкция DeleteSetting вызывается для их удаления.

' Заполнение реестра.

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' Удаляем из реестра раздел приложения со всем содержимым.

DeleteSetting "MyApp", "Startup"


Инструкция DeleteSetting

Удаляет раздел или запись из раздела приложения в реестре Windows.

Синтаксис

DeleteSetting appname, section[, key]

Синтаксис инструкции DeleteSetting содержит следующие именованные аргументы:

Элемент	Описание
appname	Обязательный.  Строковое выражение, содержащее имя приложения или проекта, к которому относится раздел или запись.
section	Обязательный. Строковое выражение, содержащее имя раздела, в котором удаляется запись.  Если определены только аргументы appname и section, указанный раздел удаляется полностью со всеми записями.
key	Необязательный. Строковое выражение, содержащее имя удаляемой записи.
Дополнительные сведения

Если определены все аргументы, удаляется только указанная запись. Если указанный раздел или запись не существует, инструкция DeleteSetting не имеет последствий.


Функция GetAllSettings

Возвращает список записей и их значений (созданных с помощью функции SaveSetting) из раздела, соответствующего приложению, в реестре Windows.

Синтаксис

GetAllSettings(appname, section)

Синтаксис функции GetAllSettings содержит следующие именованные аргументы:

Элемент	Описание
appname	Обязательный.  Строковое выражение, содержащее имя приложения или проекта, для которого определяются записи.
section	Обязательный. Строковое выражение, содержащее имя раздела, для которого определяются записи.  Функция GetAllSettings возвращает значение типа Variant, содержащее двумерный массив, содержащее двумерный строковый массив с именами всех записей в указанном разделе и их значений.
Дополнительные сведения

Функция GetAllSettings возвращает неинициализированное значение типа Variant, если хотя бы в одном из аргументов appname или section указано несуществующее значение.


Функция GetSetting

Возвращает значение записи из раздела, соответствующего приложению в реестре Windows.

Синтаксис

GetSetting(appname, section, key[, default])

Синтаксис функции GetSetting содержит следующие именованные аргументы:

Элемент	Описание
appname	Обязательный.  Строковое выражение, содержащее имя приложения или проекта, для которого определяются записи.
section	Обязательный. Строковое выражение, содержащее имя раздела, в котором находится запись.
key	Обязательный. Строковое выражение, содержащее имя возвращаемой записи.
default	Необязательный.  Выражение, содержащее значение, возвращаемое в том случае, если значение записи не задано.  Если аргумент default не определен, то подразумевается пустая строка ("").
Дополнительные сведения

Если в любом из аргументов указано несуществующее значение, функция GetSetting возвращает значение аргумента default.


Инструкция SaveSetting

Сохраняет или создает раздел или запись в разделе приложения в реестре Windows.

Синтаксис

SaveSetting appname, section, key, setting

Синтаксис инструкции SaveSetting содержит следующие именованные аргументы:

Элемент	Описание
appname	Обязательный.  Строковое выражение, содержащее имя приложения или проекта, которому соответствует раздел.
section	Обязательный.  Строковое выражение, содержащее имя раздела, в котором сохраняется значение.
key	Обязательный.  Строковое выражение, содержащее имя сохраняемой записи.
setting	Обязательный.  Выражение, содержащее значение записи, указанной в аргументе key.
Дополнительные сведения

Если значение по какой-либо причине сохранить не удается, возвращается ошибка.


Пример использования функции Chr

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

Dim MyChar

MyChar = Chr(65)	' Возвращает A.

MyChar = Chr(97)	' Возвращает a.

MyChar = Chr(62)	' Возвращает >.

MyChar = Chr(37)	' Возвращает %.


Пример использования функции Format

В данном примере показаны различные применения функции Format для форматирования значений с использованием стандартных и специальных форматов.  Фактические символы, используемые в качестве разделителя даты (/), разделителя времени  (:) и индикатора "AM/PM", определяются текущими национальными настройками.  В среде разработчика для изображения дат и времени используются установленные в этой среде краткий формат времени и даты, соответственно.  Во время выполнения программы для изображения дат и времени используются краткие системные форматы даты и времени, которые могут отличаться от установленных в среде разработчика.  В данном примере используются национальные настройки, принятые в России.

 В среде разработчика MyTime и MyDate изображаются в текущем системном кратком формате времени и даты соответственно.

Dim MyTime, MyDate, MyStr

MyTime = #17:04:23#

MyDate = #January 27, 1993#

' Возвращает текущее системное время в длинном системном формате.

MyStr = Format(Time, "Длинный формат времени")

' Возвращает текущую системную дату в длинном системном формате.

MyStr = Format(Date, "Длинный формат даты")

MyStr = Format(MyTime, "h:m:s")	' Возвращает "17:4:23".

MyStr = Format(MyTime, "hh:mm:ss AMPM")	' Возвращает "05:04:23 PM".

MyStr = Format(MyDate, "dddd, mmm d yyyy")	' Возвращает "Wednesday,

' Jan 27 1993".

' Если формат не указан, возвращается строка.

MyStr = Format(23)	' Возвращает "23".

' Специальные форматы.

MyStr = Format(5459.4, "##,##0.00")	' Возвращает "5,459.40".

MyStr = Format(334.9, "###0.00")	' Возвращает "334.90".

MyStr = Format(5, "0.00%")	' Возвращает "500.00%".

MyStr = Format("ПРИВЕТ", "<")	' Возвращает "привет".

MyStr = Format("Вот он какой", ">")	' Возвращает "ВОТ ОН КАКОЙ".


Пример использования функции Hex

В данном примере функция Hex используется для получения шестнадцатеричного представления числа.

Dim MyHex

MyHex = Hex(5)	' Возвращает 5.

MyHex = Hex(10)	' Возвращает A.

MyHex = Hex(459)	' Возвращает 1CB.


Пример использования функции InStr

В данном примере функция InStr используется для определения позиции первого появления одной строки внутри другой строки.

Dim SearchString, SearchChar, MyPos

SearchString ="XXpXXpXXPXXP"	' Исходная строка.

SearchChar = "P"	' Следует найти "P".

' Посимвольное сравнение, начиная с позиции 4. Возвращает 6.

MyPos = Instr(4, SearchString, SearchChar, 1)

' Двоичное сравнение, начиная с позиции 1. Возвращает 9.

MyPos = Instr(1, SearchString, SearchChar, 0)

' Сравнение является двоичным по умолчанию (последний аргумент опущен).

MyPos = Instr(SearchString, SearchChar)	' Возвращает 9.

MyPos = Instr(1, SearchString, "W")	' Возвращает 0.


Пример использования функции LCase

В данном примере функция LCase используется для преобразования строки к нижнему регистру.

Dim UpperCase, LowerCase

Uppercase = "Всем Привет 1234"	' Строка, подлежащая преобразованию.

Lowercase = Lcase(UpperCase)	' Возвращает "всем привет 1234".


Пример использования функции Left

В данном примере функция Left используется для извлечения указанного числа первых символов строки.

Dim AnyString, MyStr

AnyString = "Всем привет"	' Задает строку.

MyStr = Left(AnyString, 1)	' Возвращает "В".

MyStr = Left(AnyString, 6)	' Возвращает "Всем п".

MyStr = Left(AnyString, 20)	' Возвращает "Всем привет".


Пример использования функции Len

В данном примере функция Len используется для определения числа символов в строке или числа байт, необходимого для размещения переменной.  Если блок Type...End Type, описывающий тип CustomerRecord, помещен в модуль класса, то перед ним необходимо добавить ключевое слово Private. В стандартном модуле инструкция Type может быть общей (Public).

Type CustomerRecord	' Описывает тип, определяемый пользователем.

ID As Integer	' Помещает это описание

Name As String * 10	' в стандартный модуль.

Address As String * 30

End Type

Dim Customer As CustomerRecord	' Описывает переменные.

Dim MyInt As Integer, MyCur As Currency

Dim MyString, MyLen

MyString = "Всем привет"	' Инициализирует переменную.

MyLen = Len(MyInt)	' Возвращает 2.

MyLen = Len(Customer)	' Возвращает 42.

MyLen = Len(MyString)	' Возвращает 11.

MyLen = Len(MyCur)	' Возвращает 8.


Пример использования функции LSet

В данном примере инструкция LSet используется для выравнивания строки по левому краю строковой переменной.  Несмотря на то, что функцию LSet также можно использовать для копирования переменной одного типа, определенного пользователем, в переменную другого (совместимого) типа, также определенного пользователем, делать это не рекомендуется, поскольку это может привести к потере переносимости на другую платформу.

Dim MyString

MyString = "0123456789"	' Инициализирует строку.

Lset MyString = "<-Left"	' MyString содержит "<-Left    ".


Пример использования функций LTrim, RTrim, and Trim

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

Dim MyString, TrimString

MyString = "  <-Trim->  "	' Инициализирует строку.

TrimString = LTrim(MyString)	' TrimString = "<-Trim->  ".

TrimString = RTrim(MyString)	' TrimString = "  <-Trim->".

TrimString = LTrim(RTrim(MyString))	' TrimString = "<-Trim->".

' Тот же результат можно получить с помощью одной функции Trim.

TrimString = Trim(MyString)	' TrimString = "<-Trim->".


Пример использования функции Mid

В данном примере функция Mid используется для извлечения указанного числа символов из строки.

Dim MyString, FirstWord, LastWord, MidWords

MyString = "Пример функции Mid"	' Инициализирует строку.

FirstWord = Mid(MyString, 1, 6)	' Возвращает "Пример".

LastWord = Mid(MyString, 16, 3)	' Возвращает "Mid".

MidWords = Mid(MyString, 8)	' Возвращает "функции Mid".


Пример использования инструкции Mid

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

Dim MyString

MyString = "В четверг утром"	' Инициализирует строку.

Mid(MyString, 3, 7) = "пятницу"	' MyString = "В пятницу утром".

Mid(MyString, 3) = "субботу"	' MyString = "В субботу утром".

Mid(MyString, 3) = "субботу вечером"	' MyString = "В субботу вечер".

Mid(MyString, 3, 7) = "воскресенье"	' MyString = "В воскрес вечер".


Пример использования функции Oct

В данном примере функция Oct используется для получения восьмеричного представления числа.

Dim MyOct

MyOct = Oct(4) 	' Возвращает 4.

MyOct = Oct(8)	' Возвращает 10.

MyOct = Oct(459)	' Возвращает 713.


Пример использования функции Right

В данном примере функция Right используется для извлечения указанного числа последних символов строки.

Dim AnyString, MyStr

AnyString = "Всем привет"	' Инициализирует строку.

MyStr = Right(AnyString, 1)	' Возвращает "т"

MyStr = Right(AnyString, 7)	' Возвращает " привет".

MyStr = Right(AnyString, 20)	' Возвращает "Всем привет".


Пример использования функции RSet

В данном примере инструкция RSet используется для выравнивания строки по правому краю строковой переменной.

Dim MyString

MyString = "0123456789"	' Инициализирует строку.

Rset MyString = "Right->"	' MyString содержит "   Right->".


Пример использования функции Space

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

Dim MyString

' Возвращает строку, содержащую 10 пробелов.

MyString = Space(10)

' Вставляет 10 пробелов между двумя строками.

MyString = "Всем" & Space(10) & "привет"


Пример использования функции Str

В данном примере функция Str используется для получения строкового представления числа.  При преобразовании числа в строку в начале строки обязательно резервируется позиция для знака числа.

Dim MyString

MyString = Str(459)	' Возвращает " 459".

MyString = Str(-459.65)	' Возвращает "-459.65".

MyString = Str(459.001)	' Возвращает " 459.001".


Пример использования функции StrComp

В данном примере функция StrComp используется для сравнения строк.  Если третий аргумент имеет значение 1, выполняется посимвольное сравнение; если третий аргумент имеет значение 0 или опущен, выполняется двоичное сравнение.

Dim MyStr1, MyStr2, MyComp

MyStr1 = "ABCD": MyStr2 = "abcd"	' Определяет переменные.

MyComp = StrComp(MyStr1, MyStr2, 1)	' Возвращает 0.

MyComp = StrComp(MyStr1, MyStr2, 0)	' Возвращает -1.

MyComp = StrComp(MyStr2, MyStr1)	' Возвращает 1.


Пример использования функции String

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

Dim MyString

MyString = String(5, "*")	' Возвращает "*****".

MyString = String(5, 42)	' Возвращает "*****".

MyString = String(10, "ABC")	' Возвращает "AAAAAAAAAA".


Пример использования функции UCase

В данном примере функция UCase используется для преобразования строки к верхнему регистру.

Dim LowerCase, UpperCase

LowerCase = "Всем привет 1234"	' Строка, подлежащая преобразованию.

UpperCase = UCase(LowerCase)	' Возвращает "ВСЕМ ПРИВЕТ 1234".


Функция Chr

Возвращает значение типа String, содержащее символ, соответствующий указанному коду символа.

Синтаксис

Chr(кодСимвола)

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

Дополнительные сведения

Коды 0–31 соответствуют стандартным управляющим символам ASCII.  Например, Chr(10) возвращает символ перевода строки.  Обычным диапазоном значений аргумента кодСимвола является интервал 0–255.  Однако в системах DBCS допустимыми являются значения аргумента кодСимвола от -32768 до 65536.

Примечание.   Эквивалентной функцией побайтовой обработки значений типа String является функция ChrB.  Эта функция всегда возвращает один байт, а не символ, который может занимать один или два байта.  Функция ChrW возвращает значение типа String, содержащее символ в основном формате Unicode, за исключением платформ, в которых Unicode не поддерживается и функция работает аналогично функции Chr.


Функция Format

Возвращает значение типа Variant (String), содержащее выражение, отформатированное согласно инструкциям, заданным в описании формата.

Синтаксис

Format(выражение[, формат[, первыйДеньНедели[, перваяНеделяГода]]])

Синтаксис функции Format содержит следующие элементы:

Элемент	Описание
выражение	Обязательный.  Любое допустимое выражение.
формат	Необязательный.  Любое допустимое именованное или определяемое пользователем выражение формата.
первыйДеньНедели	Необязательный.  Константа, определяющая первый день недели.
перваяНеделяГода	Необязательный.  Константа, определяющая первую неделю года.
Значения

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

Константа	Значение	Описание
vbUseSystem	0	Используется настройка NLS API.
VbSunday	1	Воскресенье (по умолчанию).
vbMonday	2	Понедельник.
vbTuesday	3	Вторник
vbWednesday	4	Среда.
vbThursday	5	Четверг.
vbFriday	6	Пятница.
vbSaturday	7	Суббота.
Ниже перечислены допустимые значения аргумента перваяНеделяГода:

Константа	Значение	Описание
vbUseSystem	0	Используется настройка NLS API.
vbFirstJan1	1	Неделя, которая содержит 1 января (по умолчанию).
vbFirstFourDays	2	Первая неделя, которая содержит по крайней мере четыре дня этого года.
vbFirstFullWeek	3	Первая полная неделя года.
Дополнительные сведения

Форматирование	Выполняемые действия
Числа	Использование стандартных числовых форматов или создание специальных числовых форматов.
Даты и время	Использование стандартных форматов даты и времени или создание специальных форматов даты и времени.
Даты и время в числовом представлении	Использование форматов даты и времени или числовых форматов.
Строки	Создание специальных строковых форматов.
При форматировании чисел без указания аргумента формат функция Format выдает тот же результат, что и функция Str, хотя эта функция учитывает национальную настройку.  Отличие состоит в том, что при преобразовании положительного числа с помощью функции Format пробел в начале строки (на месте знака числа) теряется, а при преобразовании с помощью функции Str останется.


Стандартные числовые форматы (функция Format)

В следующей таблице перечислены стандартные числовые форматы:

Формат	Описание
General Number	Отображает число без разделителей групп разрядов.
Currency	Отображает значение с разделителями групп разрядов (если требуется).  В настройке США отображает две цифры справа от десятичного разделителя.  Обозначение денежной единицы и ее положение относительно числа определяется текущей национальной настройкой.
Fixed	Отображает по крайней мере одну цифру слева и две цифры справа от десятичного разделителя.
Standard	Отображает по крайней мере одну цифру слева и две цифры справа от десятичного разделителя, а также разделители групп разрядов.
Percent	Отображает число, умноженное на 100, со знаком процентов (%), добавленным справа.  Всегда отображает две цифры справа от десятичного разделителя
Scientific	Использует стандартную экспоненциальную нотацию.
Yes/No	Отображает значение "No" (Нет), если число равно 0; в противном случае отображает "Yes" (Да).
True/False	Отображает значение False, если число равно 0; в противном случае отображает True.
On/Off	Отображает значение "Off" (Выкл), если число равно 0; в противном случае отображает "On" (Вкл).


Специальные числовые форматы (функция Format)

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

Символ	Описание
Отсутствует	Отображает число без специального форматирования.
(0)	Прототип цифры.  Выводит цифру или нуль.  Если форматируемое выражение содержит цифру в позиции, соответствующей прототипу "0" в строке формата, то в данной позиции будет выведена эта цифра; в противном случае в данной позиции будет выведен нуль. Если число цифр в целой или дробной части форматируемого числа меньше, чем число прототипов "0" слева или справа от десятичного разделителя в строке формата, соответственно, то в начало или конец числа будут добавлены недостающие нули.  Если количество цифр в дробной части форматируемого числа больше, чем количество прототипов "0" справа от десятичного разделителя в строке формата, то число будет округлено с соответствующей точностью.  Если количество цифр в целой части форматируемого числа больше, чем количество прототипов "0" слева от десятичного разделителя в строке формата, то лишние цифры будут выведены без изменения.
(#)	Прототип цифры.  Выводит цифру или не выводит ничего.  Если форматируемое выражение содержит цифру в позиции, соответствующей символу # в строке формата, то в данной позиции будет выведена цифра; в противном случае данная позиция останется пустой. Отличие данного символа от символа формата "0" состоит в том, что если количество цифр в целой или дробной части форматируемого числа меньше, чем число символов "#" слева или справа от десятичного разделителя в строке формата, соответственно, то недостающие нули в начале или конце числа добавлены не будут.
(.)	Десятичный разделитель.  В некоторых национальных настройках десятичным разделителем служит запятая.  Десятичный разделитель указывает, сколько цифр следует вывести в целой и дробной части форматируемого числа, т.е. слева и справа от десятичного разделителя.  Если строка формата содержит слева от десятичного разделителя только символы "#", то число, меньшее единицы, при выводе будет начинаться с десятичного разделителя.  Если требуется, чтобы дробные числа всегда изображались с начальным нулем перед десятичным разделителем, следует использовать символ формата "0" в качестве первого символа строки числового формата.  Фактический символ, используемый в качестве десятичного разделителя, определяется установленным в системе числовым форматом.  В России в качестве десятичного разделителя используется запятая.
(%)	Процентный формат.  Выражение умножается на 100. Символ процентов (%) выводится в позиции, соответствующей позиции прототипа в строке формата.
(,)	Разделитель групп разрядов.  В некоторых национальных настройках в качестве разделителя групп разрядов используется точка.  Разделитель групп разрядов разделяет позиции тысяч и сотен в числе, целая часть которого состоит из четырех или большего числа цифр.  Стандартное применение разделителя групп разрядов задается в строке формата, в которой пробел окружен символами вывода цифры (0 или #).  Два соседних разделителя групп разрядов или разделитель групп разрядов, стоящие сразу перед десятичным разделителем (даже если символ десятичного разделителя не указан явно), означают, что масштаб числа следует изменить, разделив его указанное число раз на 1000 и округлив по мере надобности.  Такой способ позволяет выводить большие числа.  Например, строка формата "##0,," отображает сто миллионов как 100, а числа, меньшие одного миллиона, как 0.  Два соседних разделителя групп разрядов, находящихся в любой другой позиции, обрабатываются как один разделитель групп разрядов.  Фактический символ, используемый в качестве разделителя групп разрядов, определяется установленным в системе числовым форматом.  В России в качестве разделителя групп разрядов используется пробел.
(:)	Разделитель компонентов времени.  В некоторых национальный настройках в качестве разделителя компонентов времени используется другой символ.  Разделитель компонентов времени используется для разделения компонентов времени (часов, минут и секунд).  Фактический символ, используемый в качестве разделителя компонентов времени, определяется текущей национальной настройкой.  В России в качестве разделителя компонентов времени используется двоеточие.
(/)	Разделитель компонентов даты. В некоторых национальный настройках в качестве разделителя компонентов даты используется другой символ.  Разделитель компонентов даты используется для разделения компонентов даты (дня, месяца и года).  Фактический символ, используемый в качестве разделителя компонентов даты, определяется текущей национальной настройкой.  В России в качестве разделителя компонентов даты используется точка.
(E- E+ e- e+)	Экспоненциальный формат.  Если строка формата содержит хотя бы один прототип цифры (0 или #) справа от символов "E-", "E+", "e-" или "e+", то число выводится в экспоненциальном формате, а между числом и показателем степени помещаются символы "E" или "e".  Число цифр в показателе степени определяется числом символов вывода цифры справа от символа экспоненциального формата.  Для вывода знака минус (-) перед отрицательными значениями показателя степени следует использовать символы "E-" или "e-"; в этом случае знак перед положительными значениями показателя степени не ставится.  Для вывода знака плюс перед положительными значениями показателя степени и знака минус перед отрицательными значениями показателя степени следует использовать символы "E+" или "e+".
- + $ ( )	Вывод указанного символа.  Для вывода любого не перечисленных здесь символов следует поместить перед ним символ обратной косой черты (\) или заключить символ в прямые кавычки (" ").
(\)	Вывод следующего символа из строки формата.  Многие символы в строке формата имеют специальное назначение и не могут быть выведены в явном виде, если перед ними не стоит символ обратной косой черта.  Сам символ "обратная косая черта" при этом не отображается.  Наличие данного символа форматирования эквивалентно заключению следующего за ним в строке формата символа в прямые кавычки.  Для вывода самого символа "обратная косая черта" следует указать его дважды (\\). Примерами символов, которые не могут быть включены в строку форматирования явным образом, являются символы форматирования даты и времени (a, c, d, h, m, n, p, q, s, t, w, y, / и :), символы форматирования чисел (#, 0, %, E, e, запятая и точка) и символы форматирования строк (@, &, <, > и !).
("ABC")	Вывод строки, заключенной в прямые кавычки (" ").  Для представления кавычек в аргументе формат в программе необходимо использовать функцию Chr(34) (34 является кодом символа прямых кавычек (")).


Структура форматов числовых значений (функция Format)

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

Число элементов	Результат
Один	Данный формат применяется ко всем значениям.
Два	Первый элемент применяется к положительным и нулевым значениям, а второй к отрицательным значениям.
Три	Первый элемент применяется к положительным значениям, второй к отрицательным значениям, а третий к нулевым значениям.
Четыре	Первый элемент применяется к положительным значениям, второй к отрицательным значениям, третий к нулевым значениям, а четвертый к значениям Null.
Следующая строка формата содержит два элемента: первый применяется к положительным и нулевым значениям, а второй к отрицательным значениям.

"$#,##0;($#,##0)"

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

"$#,##0;;\Н\у\л\ь"


Примеры специальных числовых форматов

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

Format (формат)	+5	-5	0,5	Null
Пустая строка ("")	5	-5	0,5
0	5	-5	1
0.00	5,00	-5,00	0,50
#,##0	5	-5	1
#,##0.00;;;Нет	5,00	-5,00	0,50	Нет
$#,##0;($#,##0)	$5	($5)	$1
$#,##0.00;($#,##0.00)	$5,00	($5,00)	$0,50
0%	500%	-500%	50%
0.00%	500,00%	-500,00%	50,00%
0.00E+00	5,00E+00	-5,00E+00	5,00E-01
0.00E-00	5,00E00	-5,00E00	5,00E-01


Стандартные форматы даты и времени (функция Format)

В следующей таблице перечислены стандартные форматы даты и времени:

Формат	Описание
General Date	Отображает дату и/или время.  Если число имеет и целую, и дробную часть, то изображаются и дата, и время (например, 04.03.93 17:34); если у числа нет дробной части, то отображается только дата (например, 04.03.93); если у числа нет целой части, то отображается только время (например, 17:34).  Фактическое изображение даты и времени определяется системной настройкой.
Long Date	Отображает дату согласно длинному системному формату даты.
Medium Date	Отображает дату согласно среднему формату даты, установленному для языковой версии главного приложения.
Short Date	Отображает дату согласно краткому системному формату даты.
Long Time	Отображает время согласно длинному системному формату времени: часы, минуты и секунды.
Medium Time	Отображает значение времени в 12-часовом формате: часы, минуты и индикатор "AM/PM".
Short Time	Отображает значение времени в 24-часовом формате (например, 17:45).


Специальные форматы даты и времени (функция Format)

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

Символ	Описание
(:)	Разделитель компонентов времени.  В некоторых национальных настройках применяется другой символ.  Разделитель компонентов времени используется для разделения компонентов времени (часов, минут и секунд).  Фактический символ, используемый в качестве разделителя компонентов времени, определяется текущей национальной настройкой.  В России в качестве разделителя компонентов времени используется двоеточие.
(/)	Разделитель компонентов даты.  В некоторых национальный настройках применяется другой символ.  Разделитель компонентов даты используется для разделения компонентов даты (дня, месяца и года).  Фактический символ, используемый в качестве разделителя компонентов даты, определяется текущей национальной настройкой.  В России в качестве разделителя компонентов даты используется точка.
c	Отображает дату как ddddd и время как ttttt.  Если у числа нет дробной части, то отображается только дата; если у числа нет целой части, то отображается только время.
d	Выводит номер дня, содержащий одну или две цифры (1 – 31).
dd	Выводит номер дня, содержащий две цифры (01 – 31).
ddd	Выводит сокращенное название дня недели (Пн– Вс).
dddd	Выводит полное название дня недели (Понедельник– Воскресенье).
ddddd	Отображает соответствующую числу полную дату (день, месяц и год) согласно краткому системному формату даты.  В Microsoft Windows краткий формат даты по умолчанию имеет вид "dd.mm.yy".
dddddd	Отображает соответствующую числу полную дату (день, месяц и год) согласно длинному системному формату даты.  В Microsoft Windows длинный формат даты по умолчанию имеет вид "d mmmm yyyy 'г.'".
w	Выводит номер дня недели (по умолчанию, от 1 для воскресенья до 7 для субботы).
ww	Выводит номер недели года (1 – 54).
m	Выводит номер месяца, содержащий одну или две цифры (1 – 12).  Если символ m следует сразу после символов h или hh, выводится число минут.
mm	Выводит номер месяца, содержащий две цифры (01 – 12).  Если символ m следует сразу после символов h или hh, выводится число минут.
mmm	Выводит сокращенное название месяца (Янв – Дек).
mmmm	Выводит полное название месяца (Январь – Декабрь).
q	Выводит номер квартала года (1 – 4).
y	Выводит номер дня года (1 – 366).
yy	Выводит номер года, состоящий из двух цифр (00 – 99).
yyyy	Выводит номер года, состоящий из трех или четырех цифр (100 – 9999).
h	Выводит число часов, состоящее из одной или двух цифр (0 – 23).
hh	Выводит число часов, состоящее из двух цифр (00 – 23).
n	Выводит число минут, состоящее из одной или двух цифр (0 – 59).
nn	Выводит число минут, состоящее из двух цифр (00 – 59).
s	Выводит число секунд, состоящее из одной или двух цифр (0 – 59).
ss	Выводит число секунд, состоящее из двух цифр (00 – 59).
t t t t t	Отображает полное время (часы, минуты и секунды) согласно текущему системному формату времени.  В Microsoft Windows формат времени по умолчанию имеет вид "h:mm:ss".
AM/PM	Использует 12-часовую шкалу, добавляя прописные буквы "AM" (до полудня) или "PM" (между полуднем и полуночью).
am/pm	Использует 12-часовую шкалу, добавляя строчные буквы "am" (до полудня) или "pm" (между полуднем и полуночью).
A/P	Использует 12-часовую шкалу, добавляя прописные буквы "A" (до полудня) или "P" (между полуднем и полуночью).
a/p	Использует 12-часовую шкалу, добавляя строчные буквы "a" (до полудня) или "p" (между полуднем и полуночью).
AMPM	Использует 12-часовую шкалу, добавляя текстовую константу, добавляя текстовую константу, заменяющую в текущей системе индикаторы "AM" (до полудня) или "PM" (между полуднем и полуночью).  Регистр изображаемой текстовой строки определяется соответствующими системными настройками.  В Microsoft Windows по умолчанию используется формат "AM/PM".


Примеры специальных форматов даты и времени

Ниже приведены примеры специальных форматов даты и времени и показано, как они изображают дату 7 декабря 1958 года в системе с русской настройкой:

Формат	Отображаемое значение
m/d/yy	12.7.58
d-mmm	7-дек
d-mmmm-yy	7-дек-58
d mmmm	7 Декабрь
mmmm yy	Декабрь 58
hh:mm AM/PM	08:50 PM
h:mm:ss a/p	8:50:35 p
h:mm	20:50
h:mm:ss	20:50:35
m/d/yy h:mm	12.7.58 20:50


Специальные строковые форматы (функция Format)

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

Символ	Описание
@	Прототип символа.  Выводит символ или пробел.  Если форматируемая строка содержит символ в позиции, соответствующей символу (@) в строке формата, то в данной позиции будет выведен этот символ; в противном случае в данной позиции будет выведен пробел.  Строка формата заполняется справа налево, если в ней нет символа (!).
&	Прототип символа.  Выводит символ или не выводит ничего..  Если форматируемая строка содержит символ в позиции, соответствующей символу (&) в строке формата, то в данной позиции будет выведен этот символ; в противном случае данная позиция останется пустой.  Строка формата заполняется справа налево, если в ней нет символа (!).
<	Символ нижнего регистра.  Преобразует все символы к нижнему регистру.
>	Символ верхнего регистра.  Преобразует все символы к нижнему регистру.
!	Заполнение строки формата слева направо.  По умолчанию строка формата заполняется справа налево.


Структура форматов строковых значений (функция Format)

Выражение для формата строковых значений может содержать один или два элемента, разделенные точкой с запятой (;).

Число элементов	Результат
Один	Данный формат применяется ко всем строковым данным.
Два	Первый элемент применяется к строковым данным, а второй к значениям Null и пустым строкам ("").


Функция Hex

Возвращает значение типа String, задающее шестнадцатеричное представление указанного числа.

Синтаксис

Hex(число)

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

Дополнительные сведения

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

число	Возвращаемое значение
Null	Пустое значение.
Empty	Нуль (0).
Любое другое число	До 8 шестнадцатеричных символов.
Для явного представления шестнадцатеричного числа без вызова функции следует поставить перед ним символы &H.  Например, &H10 это десятичное число 16 в шестнадцатеричном представлении.


Функция InStr

Возвращает значение типа Variant (Long), указывающее позицию первого вхождения одной строки внутри другой строки.

Синтаксис

InStr([start, ]string1, string2[, compare])

Синтаксис функции InStr содержит следующие аргументы:

Элемент	Описание
start	Необязательный.  Числовое выражение, задающее позицию, с которой начинается каждый поиск.  Если этот аргумент опущен, поиск начинается с первого символа строки.  Если start имеет значение Null, возникает ошибка.  Указание аргумента start является обязательным, если указан аргумент compare.
string1	Обязательный.  Строковое выражение, в котором выполняется поиск.
string2	Обязательный.  Искомое строковое выражение.
compare	Необязательный.  Указывает способ сравнения строк. Аргумент compare может быть опущен или иметь значение 0, 1 или 2.  Чтобы выполнить двоичное сравнение, следует указать 0 (это значение используется по умолчанию).  Чтобы выполнить посимвольное сравнение без учета регистра, следует указать 1.  Только в Microsoft Access допускается использование значения 2 для выполнения сравнения на основании сведений, содержащихся в базе данных.  Если аргумент compare имеет значение Null, возникает ошибка.  Если аргумент compare опущен, способ сравнения строк определяется значением параметра инструкции Option Compare.
Возвращаемые значения

Условия	Значение функции InStr
string1 является пустой строкой	0
string1 имеет значение Null	Пустое значение
string2 является пустой строкой	start
string2 имеет значение Null	Пустое значение
string2 не найдена	0
string2 найдена в string1	Позиция обнаруженной подстроки
start > string2	0
Дополнительные сведения

Эквивалентной функцией обработки строк по байтам является функция InStrB, которая возвращает позицию байта (а не символа), соответствующую положению одной строки внутри другой строки.


Функция LCase

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

Синтаксис

LCase(строка)

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

Дополнительные сведения

К нижнему регистру преобразуются только прописные буквы; строчные буквы и прочие символы остаются неизмененными.


Функция Left

Возвращает значение типа Variant (String), содержащее указанное число первых символов строки.

Синтаксис

Left(string, length)

Синтаксис функции Left содержит следующие именованные аргументы:

Элемент	Описание
string	Обязательный.  Строковое выражение, из которого извлекаются символы.  Если string имеет значение Null, возвращается значение Null.
length	Обязательный.  Значение типа Variant (Long). Числовое выражение, указывающее число возвращаемых символов.  Если 0, возвращается пустая строка (""). Если значение length больше либо равняется числу символов в строке string, возвращается вся строка.
Дополнительные сведения

Для определения числа символов в строке string следует использовать функцию Len.

Примечание.   Эквивалентной функцией обработки строк по байтам является функция LeftB.  В этом случае length указывает число байт (а не символов), которые следует вернуть.


Функция Len

Возвращает значение типа Long, содержащее число символов в строке или число байт, необходимое для размещения переменной.

Синтаксис

Len(строка | имяПеременной)

Синтаксис функции Len содержит следующие элементы:

Элемент	Описание
строка	Любое допустимое строковое выражение.  Если строка имеет значение Null, возвращается значение Null.
имяПеременной	Любое допустимое имя переменной.  Если имяПеременной имеет значение Null, возвращается значение Null.  Если имяПеременной является значением типа Variant, функция Len обрабатывает его так же, как и значение типа String, и всегда возвращает число содержащихся в нем символов.
Дополнительные сведения

Из двух возможных аргументов должен быть указан один (и только один).  Для определяемых пользователем типов Len возвращает размер, который требуется для записи переменной в файл.

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

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


Инструкция LSet

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

Синтаксис

LSet переменная = строка

LSet имяПеременной1 = имяПеременной2

Синтаксис инструкции LSet содержит следующие элементы:

Элемент	Описание
переменная	Обязательный.  Имя строковой переменной.
строка	Обязательный.  Строковое выражение, которое следует выровнять по левому краю строки переменная.
имяПеременной1	Обязательный.  Имя переменной типа, определенного пользователем, являющейся адресатом копирования.
имяПеременной2	Обязательный.  Имя переменной типа, определенного пользователем, являющейся источником копирования.
Дополнительные сведения

Все оставшиеся символы в строке переменная функция LSet заменяет на пробелы.

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

Предупреждение.   Не рекомендуется использовать функцию LSet для копирования переменной одного типа, определенного пользователем, в переменную другого типа, также определенного пользователем.  Копирование данных одного типа из одной переменной просто копируются в область, отведенную для размещения переменной другого типа, может привести к непредсказуемым результатам.

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


Функции LTrim, Rtrim и Trim

Возвращают значение типа Variant (String), содержащее копию строки, из которой удалены пробелы, находившиеся в начале строки (LTrim), в конце строки (RTrim) или в начале и конце строки (Trim).

Синтаксис

LTrim(строка)

RTrim(строка)

Trim(строка)

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


Функция Mid

Возвращает значение типа Variant (String), содержащее указанное число символов строки.

Синтаксис

Mid(string, start[, length])

Синтаксис функции Mid содержит следующие именованные аргументы:

Элемент	Описание
string	Обязательный.  Строковое выражение, из которого извлекаются символы.  Если string имеет значение Null, возвращается значение Null.
start	Обязательный.  Значение типа Long. Позиция символа в строке string, с которого начинается нужная подстрока.  Если start больше числа символов в строке string, функция Mid возвращает пустую строку ("").
length	Необязательный.  Значение типа Variant (Long).  Число возвращаемых символов.  Если этот аргумент опущен или превышает число символов, расположенных справа от позиции start, то возвращаются все символы от позиции start до конца строки.
Дополнительные сведения

Для определения числа символов в string следует использовать функцию Len.

Примечание.   Эквивалентной функцией обработки строк по байтам является функция MidB.  В этом случае аргументы указывают число байт (а не символов).


Инструкция Mid

Заменяет указанное число символов в переменной типа Variant (String) символами из другой строки.

Синтаксис

Mid(переменная, начало[, длина]) = строка

Синтаксис инструкции Mid содержит следующие элементы:

Элемент	Описание
переменная	Обязательный.  Имя строковой переменной, подлежащей изменению.
начало	Обязательный.  Значение типа Variant (Long).  Позиция символа в переменной, с которого начинается замена.
длина	Необязательный.  Значение типа Variant (Long).  Число символов, подлежащих замене.  Если этот аргумент опущен, используется вся строка.
строка	Обязательный.  Строковое выражение, предназначенное для замены части строки переменная.
Дополнительные сведения

Число замененных символов не может превышать число символов в переменной.

Примечание.   Эквивалентной инструкцией обработки строк по байтам является инструкция MidB.  В этом случае аргумент начало указывает в строке переменная позицию байта, с которого начинается замена, а длина число байт, подлежащих замене.


Функция Oct

Возвращает значение типа Variant (String), содержащее восьмеричное представление указанного числа.

Синтаксис

Oct(число)

Обязательный аргумент число представляет любое допустимое числовое выражение или строковое выражение.

Дополнительные сведения

Если число не является целым числом, оно округляется перед преобразованием до ближайшего целого числа.

число	Возвращаемое значение
Null	Null.
Empty	Нуль (0).
Любое другое число	До 11 восьмеричных символов.
Для явного представления восьмеричного числа без вызова функции следует поставить перед ним символы &O.  Например, &O10 это десятичное число 8 в восьмеричном представлении.


Функция Right

Возвращает значение типа Variant (String), содержащее указанное число последних символов строки.

Синтаксис

Right(string, length)

Синтаксис функции Right содержит следующие именованные аргументы:

Элемент	Описание
string	Обязательный.  Строковое выражение, из которого извлекаются символы.  Если string имеет значение Null, возвращается значение Null.
length	Обязательный.  Значение типа Variant (Long).  Числовое выражение, указывающее число возвращаемых символов.  Если 0, возвращается пустая строка ("").  Если превышает число символов в строке string, возвращается вся строка.
Дополнительные сведения

Для определения числа символов в строке string следует использовать функцию Len.

Примечание.   Эквивалентной функцией обработки строк по байтам является функция RightB.  В этом случае аргумент length указывает число байт (а не символов), которые следует вернуть.


Инструкция RSet

Выравнивает строку по правому краю строковой переменной.

Синтаксис

RSet переменная = строка

Синтаксис инструкции RSet содержит следующие элементы:

Элемент	Описание
переменная	Обязательный.  Имя строковой переменной.
строка	Обязательный.  Строковое выражение, которое следует выровнять по правому краю строки переменная.
Дополнительные сведения

Если длина строки переменная больше, чем строка, инструкция RSet заменяет все оставшиеся символы вплоть до начала строки переменная пробелами.

Примечание.   Не допускается применение инструкции RSet к определяемым пользователем типам.


Функция Space

Возвращает значение типа Variant (String), содержащее указанное число пробелов.

Синтаксис

Space(число)

Обязательный аргумент число указывает нужное число пробелов в строке.

Дополнительные сведения

Функцию Space удобно использовать для форматирования и очистки данных в строках фиксированной длины.


Функция Str

Возвращает значение типа Variant (String), являющееся строковым представлением числа..

Синтаксис

Str(число)

Обязательный аргумент число имеет тип Long и может задаваться любым допустимым числовым выражением.

Дополнительные сведения

При преобразовании числа в строку в начале строки обязательно резервируется позиция для знака числа.  Если число является положительным, возвращенная строка будет содержать пробел на месте знака.

Чтобы представить числовое значение как дату, время, денежное значение или в специальном формате, следует использовать функцию Format.  В отличие от функции Str, функция Format не резервирует позицию для знака положительного числа.

Примечание.   В качестве допустимого десятичного разделителя функция Str воспринимает только точку (.).  При наличии другого десятичного разделителя (например, запятой) для преобразования чисел в строки следует использовать функцию CStr.


Функция StrComp

Возвращает значение типа Variant (Integer), представляющее результат сравнения строк.

Синтаксис

StrComp(string1, string2[, compare])

Синтаксис функции StrComp содержит следующие именованные аргументы:

Элемент	Описание
string1	Обязательный.  Любое допустимое строковое выражение.
string2	Обязательный.  Любое допустимое строковое выражение.
compare	Необязательный.  Указывает способ сравнения строк. Аргумент compare может быть опущен или иметь значение 0, 1 или 2.  Чтобы выполнить двоичное сравнение, следует указать 0 (это значение используется по умолчанию).  Чтобы выполнить посимвольное сравнение без учета регистра, следует указать 1.  Только в Microsoft Access допускается использование значения 2 для выполнения сравнения на основании сведений, содержащихся в базе данных.  Если аргумент compare имеет значение Null, возникает ошибка.  Если аргумент compare опущен, способ сравнения строк определяется значением параметра инструкции Option Compare.
Возвращаемые значения

Условие	Возвращаемое значение
string1 меньше чем string2	-1
string1 равняется string2	0
string1 больше чем string2	1
string1 или string2 имеет значение Null	Null


Функция StrConv

Возвращает значение типа Variant (String), содержащее преобразованную строку.

Синтаксис

StrConv(string, conversion)

Синтаксис функции StrConv содержит следующие именованные аргументы:

Элемент	Описание
string	Обязательный.  Строковое выражение, которое следует преобразовать.
conversion	Обязательный.  Значение типа Integer.  Сумма значений, указывающих тип преобразования, которое следует выполнить.
Значения

Ниже приведены допустимые значения аргумента conversion:

Константа	Значение	Описание
vbUpperCase	1	Преобразование строки к верхнему регистру.
vbLowerCase	2	Преобразование строки к нижнему регистру.
vbProperCase	3	Преобразование первой буквы каждого слова в строке в прописную.
vbWide*	4*	Преобразование однобайтовых символов в двухбайтовые.
VbNarrow*	8*	Преобразование двухбайтовых символов в однобайтовые.
VbKatakana**	16**	Преобразование символов хираганы в символы катаканы.
VbHiragana**	32**	Преобразование символов катаканы в символы хираганы.
VbUnicode	64	Преобразование строки в Unicode с помощью используемой по умолчанию системной кодовой страницы.
VbFromUnicode	128	Преобразование строки из Unicode с помощью используемой по умолчанию системной кодовой страницы.
*	Применимо к дальневосточным национальным настройкам.

**	Применимо только к японскому языку.

Примечание   Эти константы определяются в языке Visual Basic для приложений.  Это означает, что их имена можно использовать в любом месте кода вместо фактических значений.  Большинство из констант могут быть объединены (например vbUpperCase + vbWide).  Исключением являются взаимно противоречащие константы (например vbUnicode + vbFromUnicode).  Использование констант vbWide, vbNarrow, vbKatakana и vbHiragana в несовместимой национальной настройке приводит к ошибкам выполнения.

Ниже перечислены допустимые символы, служащие разделителями слов: Null (Chr$(0)), горизонтальная табуляция (Chr$(9)), перевод строки (Chr$(10)), вертикальная табуляция (Chr$(11)), конец страницы (Chr$(12)), возврат каретки (Chr$(13)), пробел (однобайтовая система) (Chr$(32)).  Код пробела  в двухбайтовых системах (DBCS) зависит от текущей страны.


Функция String

Возвращает значение типа Variant (String), содержащее повторяющуюся строку указанной длины.

Синтаксис

String(number, character)

Синтаксис функции String содержит следующие именованные аргументы:

Элемент	Описание
number	Обязательный.  Значение типа Long. Длина возвращаемой строки.  Если number имеет значение Null, возвращается значение Null.
character	Обязательный.  Значение типа Variant.  Код символа или строковое выражение, первый символ которого используется при создании возвращаемой строки.  Если character имеет значение Null, возвращается значение Null.
Дополнительные сведения

Значения аргумента character, превышающие 255, преобразуются функцией String в допустимые коды символов по следующей формуле:

character Mod 256


Функция UCase

Возвращает значение типа Variant (String), содержащее строку, преобразованную к верхнему регистру.

Синтаксис

UCase(строка)

Обязательный аргумент строка представляет любое допустимое строковое выражение.  Если строка имеет значение Null, возвращается значение Null.

Дополнительные сведения

К верхнему регистру преобразуются только строчные буквы; прописные буквы и прочие символы остаются неизменными.


Классификация ключевых слов

Категория	Описание
Массивы	Создание, описание и использование массивов.
Директивы компилятора	Управление поведением компилятором.
Передача управления	Использование циклов и процедур.
Преобразование	Преобразование чисел и типов данных.
Типы данных	Типы и подтипы данных.
Даты и время	Преобразование и использование выражений для даты и времени.
Каталоги и файлы	Управление файловой системой и работа с файлами.
Ошибки	Перехват и определение кодов ошибок.
Финансовые функции	Выполнение финансовых расчетов.
Ввод и вывод	Ввод информации и ее вывод на экран или в файл.
Математические вычисления	Выполнение тригонометрических и других математических вычислений.
Различные ключевые слова	Запуск приложений и обработка событий.
Операторы	Сравнение выражений и другие операции.
Обработка строк	Обработка строк и данных типа String.
Переменные и константы	Объявление и описание переменных и констант.


Перечень ключевых слов, связанных с массивами

Действие	Ключевые слова
Проверка наличия массива.	IsArray
Создание массива.	Array
Изменение используемой по умолчанию нижней границы индексов массива.	Option Base
Описание и инициализация массива.	Dim, Private, Public, ReDim, Static
Определение границ массива.	LBound, UBound
Повторная инициализация массива.	Erase, ReDim


Перечень ключевых слов, связанных с объектом Collection

Действие	Ключевые слова
Создание объекта типа Collection.	Collection
Добавление объекта в семейство.	Add
Удаление объекта из семейства.	Remove
Ссылка на объект из семейства.	Item


Перечень ключевых слов -- директив компилятора

Действие	Ключевые слова
Определение константы компилятора.	#Const
Компиляция выделенных блоков программы.	#If...Then...#Else


Перечень ключевых слов, связанных с передачей управления в программе

Действие	Ключевые слова
Ветвление.	GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo
Завершение и остановка программы.	DoEvents, End, Exit, Stop
Цикл.	Do...Loop, For...Next, For Each...Next, While...Wend, With
Принятие решения.	Choose, If...Then...Else, Select Case, Switch
Использование процедур.	Call, Function, Property Get, Property Let, Property Set, Sub


Перечень ключевых слов, связанных с преобразованием данных

Действие	Ключевые слова
Кода ANSI в строку.	Chr
Регистра букв.	Format, LCase, UCase
Даты в порядковый номер.	DateSerial, DateValue
В другую систему счисления.	Hex, Oct
Числа в строку.	Format, Str
Одного типа данных в другой.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Порядкового номера в дату.	Day, Month, Weekday, Year
Порядкового номера во время.	Hour, Minute, Second
Строки в код ASCII.	Asc
Строки в число.	Val
Времени в порядковый номер.	TimeSerial, TimeValue


Перечень ключевых слов, связанных с типами данных

Действие	Ключевые слова
Преобразование типов данных.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Описание встроенных типов данных.	Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (по умолчанию)
Проверка типов данных.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject


Перечень ключевых слов, связанных с датами и временем

Действие	Ключевые слова
Определение текущей даты или времени.	Date, Now, Time
Вычисления над датами.	DateAdd, DateDiff, DatePart
Определение даты.	DateSerial, DateValue
Определение времени.	TimeSerial, TimeValue
Установка даты или времени.	Date, Time
Хронометраж процесса.	Timer


Перечень ключевых слов, связанных с каталогами и файлами

Действие	Ключевые слова
Изменение каталога или папки.	ChDir
Изменение диска	ChDrive
Копирование файла.	FileCopy
Создание каталога или папки.	MkDir
Удаление каталога или папки.	RmDir
Переименование файла, каталога или папки.	Name
Определение текущего пути.	CurDir
Определение даты и времени последнего изменения файла.	FileDateTime
Определение атрибутов файла, каталога или метки.	GetAttr
Определение размера файла.	FileLen
Определение имени файла или метки тома.	Dir
Установка атрибутов файла.	SetAttr


Перечень ключевых слов, связанных с ошибками

Действие	Ключевые слова
Генерация ошибок выполнения.	Clear, Error, Raise
Получение сообщений об ошибках.	Error
Получение сведений об ошибках.	Err
Возврат значения Error типа Variant.	CVErr
Перехват ошибок на стадии выполнения.	On Error, Resume
Проверка типов.	IsError


Перечень ключевых слов для финансовых функций

Действие	Ключевые слова
Вычисление снижения стоимости.	DDB, SLN, SYD
Вычисление конечной суммы.	FV
Вычисление процентной ставки.	Rate
Вычисление нормы прибыли.	IRR, MIRR
Вычисление числа периодов.	NPer
Вычисление платежей.	IPmt, Pmt, PPmt
Вычисление начальной суммы.	NPV, PV


Перечень ключевых слов, связанных с вводом и выводом

Действие	Ключевые слова
Открытие или создание файла.	Open
Закрытие файла.	Close, Reset
Управление выводом.	Format, Print, Print #, Spc, Tab, Width #
Копирование файла.	FileCopy
Получение сведений о файле.	EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek
Работа с файлами.	Dir, Kill, Lock, Unlock, Name
Чтение файла.	Get, Input, Input #, Line Input #
Определение размера файла.	FileLen
Определение или установка атрибутов файла.	FileAttr, GetAttr, SetAttr
Изменение положения указателя внутри файла.	Seek
Запись в файл.	Print #, Put, Write #


Перечень ключевых слов для выполнения математических вычислений

Действие	Ключевые слова
Тригонометрические вычисления.	Atn, Cos, Sin, Tan
Общие вычисления.	Exp, Log, Sqr
Генерация случайных чисел.	Randomize, Rnd
Вычисление абсолютного значения.	Abs
Определение знака выражения.	Sgn
Выделение целой части числа.	Fix, Int


Перечень различных служебных ключевых слов

Действие	Ключевые слова
Обработка приостановленных событий.	DoEvents
Запуск других программ.	AppActivate, Shell
Передача нажатий клавиш приложению.	SendKeys
Подача звукового сигнала.	Beep
Параметры среды.	Environ
Получение командной строки.	Command
Macintosh.	MacID, MacScript
Программирование объектов.	CreateObject, GetObject
Цвет.	QBColor, RGB


Перечень ключевых слов для операторов

Действия	Ключевые слова
Арифметические операции.	^, – , *,  /, \, Mod, +, &
Операции сравнения.	=, <>, <, >, <=, >=, Like, Is
Логические операции.	Not, And, Or, Xor, Eqv, Imp


Перечень ключевых слов, связанных с реестром

Действие	Ключевые слова
Удаление параметров программы.	DeleteSetting
Чтение параметров программы.	GetSetting, GetAllSettings
Сохранение параметров программы.	SaveSetting


Перечень ключевых слов, связанных с обработкой строк

Действие	Ключевые слова
Сравнение двух строк.	StrComp
Преобразование строк.	StrConv
Изменение регистра.	Format, Lcase, UCase
Создание строк, содержащих повторяющиеся символы.	Space, String
Определение длины строки.	Len
Форматирование строки.	Format
Выравнивание строки.	Lset, RSet
Обработка строк.	InStr, Left, LTrim, Mid, Right, RTrim, Trim
Выбор типа сравнения строк.	Option Compare
Работа с кодами ASCII и ANSI.	Asc, Chr


Перечень ключевых слов, связанных с переменными и константами

Действие	Ключевые слова
Присвоение значения.	Let
Описание переменных и констант.	Const, Dim, Private, Public, New, Static
Объявление модуля личным.	Option Private Module
Получение сведений о переменной.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType
Ссылка на текущий объект.	Me
Требование явного объявления переменных.	Option Explicit
Задание используемого по умолчанию типа данных.	Defтип


Перехватываемые ошибки

Перехватываемые ошибки возникают при выполнении приложения.  Некоторые из них возникают также в процессе разработки приложения или во время компиляции. Для отладки и задания отклика на возникновение перехватываемых ошибок предназначены инструкция On Error и объект Err. Неиспользованные коды ошибок в диапазоне от 1 до 1000 зарезервированы для будущего применения в Visual Basic.

Код	Сообщение
3	Инструкция Return без GoSub
5	Недопустимый вызов процедуры
6	Переполнение
7	Не хватает памяти
9	Индекс выходит за пределы допустимого диапазона
10	Массив имеет фиксированную длину или временно блокирован
11	Деление на 0
13	Несоответствие типа
14	Не хватает памяти для строки
16	Слишком сложное выражение
17	Невозможно выполнение требуемой операции
18	Произошло прерывание, вызванное пользователем
20	Инструкция Resume не в программе обработки ошибок
28	Не хватает стековой памяти
35	Процедура Sub, Function или Property не определена
47	Слишком много клиентов библиотеки приложения
48	Ошибка при загрузке библиотеки
49	Неверное соглашение о вызовах библиотеки
51	Внутренняя ошибка
52	Неверное имя или номер файла
53	Файл не найден
54	Неверный режим файла
55	Файл уже открыт
57	Ошибка устройства ввода/вывода
58	Файл уже существует
59	Неверная длина записи
61	Переполнение диска
62	Ввод за пределами конца файла
63	Неверный номер записи
67	Слишком много файлов
68	Устройство недоступно
70	Нет разрешения
71	Диск не готов
74	Невозможно переименование с другим именем диска
75	Ошибка доступа к файлу/каталогу
76	Путь не найден
91	Не задана объектная переменная или переменная блока With
92	Цикл For не инициализирован
93	Недопустимая строка шаблона
94	Недопустимое использование Null
97	Невозможен вызов процедуры Friend для объекта, не являющегося экземпляром определяющего класса
298	Системная библиотека DLL не загружается
320	Нельзя использовать имена символьных устройств в именах данных файлов
321	Недопустимый формат файла
322	Невозможно создание требуемого временного файла
325	Недопустимый формат файла ресурсов
327	Не найдено значение данных по имени
328	Недопустимый параметр.  Невозможна запись массивов
335	Невозможен доступ к системному реестру
336	Компонент ActiveX неправильно зарегистрирован
337	Компонент ActiveX не найден
338	Компонент ActiveX выполняется неправильно
360	Объект уже загружен
361	Невозможно загрузить или выгрузить данный объект
363	Указанный элемент ActiveX не найден
364	Объект выгружен
365	Невозможна выгрузка в данном контексте
368	Истек срок действия данного файла. Программе требуется файл более новой версии
371	Данный объект не может использоваться в качестве формы-владельца метода Show
380	Недопустимое значение свойства
381	Недопустимый индекс массива свойств
382	Инструкция Property Set не поддерживается во время выполнения
383	Инструкция Property Set не поддерживается (свойство доступно только для чтения)
385	Требуется индекс массива свойств
387	Инструкция Property Set не разрешена
393	Инструкция Property Get не поддерживается во время выполнения
394	Инструкция Property Get не поддерживается (свойство доступно только для записи)
400	Форма уже отображается; модальное отображение невозможно
402	Сначала необходимо закрыть самую верхнюю модальную форму
419	Нет разрешения на использование объекта
422	Свойство не найдено
423	Не найдено свойство или метод
424	Требуется объект
425	Недопустимое использование объекта
429	Невозможно создание объекта или возвращение ссылки на этот объект компонентом ActiveX
430	Класс не поддерживает программирование объектов
432	Не найдено имя файла или класса при программирования объектов
438	Объект не поддерживает это свойство или метод
440	Ошибка программирования объектов
442	Потеряна связь с библиотекой типов или библиотекой объектов для удаленного доступа
443	Программируемый объект не имеет значения по умолчанию
445	Объект не поддерживает эту команду
446	Объект не поддерживает именованные аргументы
447	Объект не поддерживает текущую национальную настройку
448	Именованный аргумент не найден
449	Аргумент является обязательным или неправильно присвоено значение свойства
450	Недопустимое число аргументов или неправильное присвоение значения свойства
451	Объект не является семейством
452	Недопустимый порядковый номер
453	Указанная функция библиотеки DLL не найдена
454	Программный ресурс не найден
455	Ошибка блокировки программного ресурса
457	Запись уже связана с элементом данного семейства
458	Переменная использует не поддерживаемый в Visual Basic тип
459	Компонент не поддерживает события
460	Недопустимый формат буфера обмена
461	Указанный формат не соответствует формату данных
480	Невозможно создание автоматически обновляемого изображения
481	Недопустимый рисунок
482	Ошибка принтера
483	Драйвер принтера не поддерживает данное свойство
484	Ошибка получения системной информации о принтере. Убедитесь, что принтер установлен правильно
485	Недопустимый тип рисунка
486	Невозможно напечатать изображение формы на принтере данного типа
520	Невозможна очистка буфера обмена
521	Невозможно открыть буфер обмена
735	Невозможно сохранить файл в каталог TEMP
744	Образец поиска не найден
746	Слишком длинная замена
31001	Не хватает памяти
31004	Отсутствует объект
31018	Класс не определен
31027	Невозможно активизировать объект
31032	Невозможно создать внедренный объект
31036	Ошибка сохранения в файл
31037	Ошибка загрузки из файла


Набор символов (128 – 255)

128	•	160	[пробел]	192	А	224	а
129	•	161	Ў	193	Б	225	б
130	•	162	ў	194	В	226	в
131	•	163	Ј	195	Г	227	г
132	•	164	¤	196	Д	228	д
133	•	165	Ґ	197	Е	229	е
134	•	166	¦	198	Ж	230	ж
135	•	167	§	199	З	231	з
136	•	168	Ё	200	И	232	и
137	•	169	©	201	Й	233	й
138	•	170	Є	202	К	234	к
139	•	171	«	203	Л	235	л
140	•	172	¬	204	М	236	м
141	•	173	­	205	Н	237	н
142	•	174	®	206	О	238	о
143	•	175	Ї	207	П	239	п
144	•	176	°	208	Р	240	р
145	‘	177	±	209	С	241	с
146	’	178	І	210	Т	242	т
147	•	179	і	211	У	243	у
148	•	180	ґ	212	Ф	244	ф
149	•	181	µ	213	Х	245	х
150	•	182	¶	214	Ц	246	ц
151	•	183	·	215	Ч	247	ч
152	•	184	ё	216	Ш	248	ш
153	•	185	№	217	Щ	249	щ
154	•	186	є	218	Ъ	250	ъ
155	•	187	»	219	Ы	251	ы
156	•	188	ј	220	Ь	252	ь
157	•	189	Ѕ	221	Э	253	э
158	•	190	ѕ	222	Ю	254	ю
159	•	191	ї	223	Я	255	я
•	Эти символы не поддерживаются Microsoft Windows.