Алексей Гладкий - Excel. Трюки и эффекты
- Название:Excel. Трюки и эффекты
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Гладкий - Excel. Трюки и эффекты краткое содержание
Excel. Трюки и эффекты - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Для открытия файла в VBA существует специальная инструкция Open, формат которой приведен ниже:
Open Имя_файла For Тип_доступа [Access Режим_доступа] [Блокировка] _
As [#]Дескриптор [Len=Длина_записи]
В табл. 1.10 даны описания элементов, используемых в приведенной конструкции.


Ниже приведены примеры инструкций открытия файла D:\MyTextFile.txt для произвольного доступа, для последовательного чтения и записи:
Open «D:\MyTextFile.txt» For Random Access Read Write As 1 Len = 100
Open «D:\MyTextFile.txt» For Input As 2
Open «D:\MyTextFile.txt» For Output As 3
Дескрипторы файлов. Функция FreeFile
В среде программирования VBA открытые файлы идентифицируются номерами – дескрипторами. Дескриптор каждого открытого файла должен быть уникальным. Как было видно из примеров открытия файла, программист может сам назначать дескрипторы открываемым файлам (при этом необходимо учитывать, что допустимый диапазон значений дескриптора – 1-511).
Для небольших и простых программ возможность назначать дескрипторы вручную очень удобна. Однако в больших проектах, в которых ведется работа с многими файлами, бывает достаточно сложно следить за правильностью назначения дескрипторов вручную. Для избавления программиста от необходимости контролировать правильность дескрипторов в VBA введена специальная функция FreeFile, имеющая следующий формат:
FreeFile ([Диапазон])
Данная функция возвращает значение типа Long, которое можно использовать в инструкции Open в качестве дескриптора открываемого файла. Единственным параметром данной функции является необязательный параметр Диапазон, который может иметь значение 1 или 0. Если значение параметра равно 0 (по умолчанию), то функция возвращает дескриптор файла из диапазона 1-255. Если же оно равно 1 – значение из диапазона 256–511. Если свободных дескрипторов в диапазоне нет, то функция возвращает нулевое значение.
Ниже приведен пример использования функции FreeFile:
Dim hFile As Long
hFile = FreeFile ' Получение дескриптора для файла
' Открытие файла
Open «D:\MyTextFile.txt» For Output As hFile
Закрытие файлов
После того как с открытым с помощью инструкции Open файлом выполнены необходимые действия, его нужно закрыть. Операция закрытия (или освобождения) является обязательной для всех объектов операционной системы, а не только для файлов. При закрытии файла освобождается его дескриптор, а другие приложения получают возможность работать с этим файлом, если он был заблокирован при открытии.
В VBA для закрытия файлов предусмотрены две инструкции: Reset и Close. Формат этих инструкций следующий:
Reset
Close [[#]Десктиптор [, [#]Дескриптор]...]
Инструкция Reset закрывает все файлы, открытые ранее с помощью инструкции Open. Инструкция Close закрывает только файлы с указанными дескрипторами, например:
Close 1, #3, hFile
Если при использовании инструкции Close дескрипторы закрываемых файлов не указаны, то она закрывает все открытые ранее файлы.
Чтение из файлов и запись в файлы
В VBA программисту предоставляется множество инструкций для чтения и записи данных при работе с файлами. Эти инструкции разделяются на три группы в соответствии с тем, при каком типе доступа к файлу они используются: последовательном, произвольном или бинарном.
Описание инструкций последовательного доступа, используемых для работы с файлами, приведено в табл. 1.11.


Ниже приведен пример использования данной функции для считывания из файла первых 10 символов:
Sub WriteToFile()
Open «D:\MyTextFile.txt» For Output As 1
' Запись данных в файл
Write #1, «Значение», «Value», 154.32
Print #1, «Слово1», «Слово2», 14.28464
Close 1
End Sub
Далее целесообразно привести пример процедуры, в которой осуществляется чтение записанных данных из файла:
Sub ReadFromFile()
Dim strVal1, strVal2, dblNumber
Dim strString
Open «D:\MyTextFile.txt» For Input As 1
' Чтение данных из файла
Input #1, strVal1, strVal2, dblNumber
Line Input #1, strString
Close 1
End Sub
Кроме приведенных в табл. 1.11 инструкций, в VBA имеется встроенная функция Input, позволяющая считывать из файла заданное количество символов:
Input(Количество_символов, [#]Дескриптор)
Ниже приведен пример использования данной функции для считывания из файла первых 10 символов:
Sub TestInput()
Dim strText As String
Open «D:\MyTextFile.txt» For Input As 1
" Чтение из файла первых 10 символов
strText = input(10, 1)
Close 1
End Sub
При произвольном (Random) доступе файл представляется как совокупность записей, имеющих постоянную длину. Именно запись при данном типе доступа является элементарной единицей информации, которую можно считывать из файла или записывать в файл. Каждая запись имеет свой номер (нумерация начинается с единицы). Для работы с файлами при использовании произвольного доступа в VBA реализованы инструкции Put и Get для записи и чтения информации:
Put [#]Дескриптор, [Номер_записи], Переменная
Get [#]Дескриптор, [Номер_записи], Переменная
При выполнении инструкции Put значение переменной Переменная помещается в файл на место записи с номером Номерзаписи. Если номер записи не указывается, то данные помещаются в текущую запись файла.
Инструкция Get позволяет считать значение записи с номером Номерзаписи в переменную Переменная. Если номер записи не указан, то считывается текущая запись файла.
Рассмотрим пример, в котором две структуры сначала записываются в файл с помощью инструкции Put, а потом считываются из того же файла, но в обратном порядке:
Type Record
intVal As Integer
strName As String * 100
End Type
Sub TestRandomAccess()
Dim rec1 As Record, rec2 As Record
' Заполнение rec1 и rec2 значениями ...
Open «D:\MyRandomAccessFile.txt» For Random Access Read Write _
As 1 Len = Len(rec1)
' Запись данных в файл
Put 1, , rec1
Put 1, , rec2
' Теперь считывание данных из файла
Get 1, 2, rec2
Get 1, 1, rec1
Close 1
End Sub
Бинарный (Binary) доступ к файлу по своей сути идентичен произвольному доступу с тем лишь различием, что запись в файле имеет длину 1 байт. При бинарном доступе к файлу используются те же инструкции Put и Get, что и при произвольном доступе. Также при бинарном доступе для чтения определенного количества байт может быть использована функция Input, о которой было рассказано выше.
Читать дальшеИнтервал:
Закладка: