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

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 ' Закрывает файл.

Шаг 52 - Инструкция Randomize

Инициализирует датчик случайных чисел.

Randomize [число]

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

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

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

Dim MyValue

Randomize ' Инициализирует генератор случайных чисел.

MyValue = Int((6 * Rnd) + 1) ' Возвращает случайное число от 1 до 6.

Шаг 53 - Инструкция ReDim

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

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

Параметры 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 перед попыткой изменения размера.

Пример В данном примере инструкция 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 элементов.

Шаг 54 - Инструкция Rem

Используется для добавления в программу дополнительных пояснений.

Rem примечание

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

Замечания При использовании номеров строк или меток строк имеется возможность выполнить с помощью инструкции GoTo или GoSub переход на строку, содержащую инструкцию Rem. Выполнение программы продолжится с первой выполняемой инструкции, следующей за инструкцией Rem. Если за ключевым словом Rem на строке имеются другие инструкции, инструкции должны разделяться двоеточием (:). Как показано в примере синтаксиса, вместо ключевого слова Rem возможно использование апострофа ('). При использовании апострофа двоеточие не требуется.

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

Rem Это первая форма синтаксиса.

Ниже показана вторая форма синтаксиса.

Dim MyStr1, MyStr2

MyStr1 = "Привет": Rem Пояснение отделяется двоеточием.

MyStr2 = "До свидания" ' Можно и без двоеточия.

Шаг 55 - Инструкция Reset

Закрывает все файлы, открытые с помощью инструкции Open.

Reset

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

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

Dim FileNumber

For FileNumber = 1 To 5 ' Выполняет цикл 5 раз.

' Открывает файл для записи. FileNumber включается в имя файла как

' строка и одновременно является числовым счетчиком цикла.

Open "TEST" & FileNumber For Output As #FileNumber

Write #FileNumber, "Всем Привет" ' Записывает данные в файл.

Next FileNumber

Reset ' Закрывает файлы и записывает содержимое

' буферов на диск.

Шаг 56 - Инструкция Resume

Продолжает выполнение программы после завершения подпрограммы обработки ошибок.

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

  • Resume Next - Если ошибка возникла в процедуре, в которой находится обработчик ошибок, то выполнение программы продолжается с инструкции, следующей за той, которая привела к ошибке. Если ошибка возникла в вызванной процедуре, выполнение продолжается с инструкции, непосредственно следующей за той инструкцией в процедуре, содержащей обработчик ошибок (или инструкцию On Error Resume Next), из которой был сделан последний вызов.

  • Resume строка - Выполнение программы продолжается со строки, указанной в обязательном аргументе строка. Аргумент строка должен определять метку строки или номер строки внутри процедуры, содержащей данный обработчик ошибок.

Замечания Если инструкция 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

Шаг 57 - Инструкция RmDir

Удаляет существующий каталог или папку.

RmDir путь

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

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

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

' Предположим, что MYDIR - пустой каталог или папка.

RmDir "MYDIR" ' Удаляет MYDIR.

Шаг 58 - Инструкция RSet

Выравнивает строку по правому краю строковой переменной.

RSet переменная = строка

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

Замечания Если длина строки переменная больше, чем строка, инструкция RSet заменяет все оставшиеся символы вплоть до начала строки переменная пробелами. Не допускается применение инструкции RSet к определяемым пользователем типам.

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

Dim MyString

MyString = "0123456789" ' Инициализирует строку.

Rset MyString = "Right->" ' MyString содержит " Right->".

Шаг 59 - Инструкция SaveSetting

Сохраняет или создает раздел или запись в разделе приложения в реестре Windows.

SaveSetting appname, section, key, setting

Параметры appname : Обязательный. Строковое выражение, содержащее имя приложения или проекта, которому соответствует раздел. Section : Обязательный. Строковое выражение, содержащее имя раздела, в котором сохраняется значение. Key : Обязательный. Строковое выражение, содержащее имя сохраняемой записи. Setting : Обязательный. Выражение, содержащее значение записи, указанной в аргументе key.

Замечания Если значение по какой-либо причине сохранить не удается, возвращается ошибка.

Пример В данном примере сначала с помощью инструкции SaveSetting заполняются элементы реестра Windows (или файла .INI на 16-разрядных платформах Windows) для приложения MyApp, а затем инструкция DeleteSetting вызывается для их удаления.

' Заполнение реестра.

SaveSetting appname := "MyApp", section := "Startup", _

key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' Удаляем из реестра раздел приложения со всем содержимым.

DeleteSetting "MyApp", "Startup"

Шаг 60 - Инструкция Seek

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

Seek [#]номерФайла, позиция

Параметры номерФайла : Обязательный. Любой допустимый номер файла. Позиция : Обязательный. Число в диапазоне 1 – 2,147,483,647 указывающее позицию, начиная с которой будет выполнена следующая операция чтения или записи.

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

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

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