Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA For Excel Часть 01.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.16 Mб
Скачать

7.4 Работа с файлами

Файлы, с которыми работает программист VBA можно разделить на три типа:

  • Текстовый файл - предназначен для хранения текстовой информации. Информация в этом файле представлена в виде строк символов.

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

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

Надо сказать, что любой файл состоит из байтов, например, в текстовом файле в байтах хранятся коды символов строк, или служебные символы. Байт содержит в себе целое число в диапазоне 0-255 записанное в двоичной системе. Любой файл в независимости от его типа можно операторами VBA открыть как двоичный файл.

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

Файл имеет свою длину, которая измеряется количеством байт содержащимися в файле.

  • Байт – 8 бит (восемь разрядов для двоичного числа)

  • Килобайт – 1024 байта

  • Мегабайт - 1024 килобайт

  • Гигабайт - 1024 мегабайт

  1. это ближайшее число к 1000 полученное возведением цифры 2 в N степень - 210 = 1024.

Длина файла всегда кратна байту. Файл не может содержать в себе количество бит, не кратных 8. Длина файла в битах никогда не выражается.

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

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

Каждый файл, с которым работает программист VBA, должен быть открыт оператором Open.

Ниже нами показан формат данного оператора.

Open “Имя файла” For РежимОтк [ Access Доступ ] _

as #Номер [Другим] [Len = ДлинаЗписи]

где

Openоператор открывающий файл

“Имя файла” – полное имя файла, или только имя файла, который находится в текущей директории текущего диска

For – служебное слово перед определением режима открывания файла

РежимОтк – одно из служебных слов определяющее режим открывания файла:

  • Input – Открыть текстовый файл для чтения данных

  • Output – Открыть текстовый файл для записи данных

  • Append – Открыть текстовый файл для дозаписи данных

  • Binary - открыть двоичный файл

  • Random - открыть файл произвольного типа данных

Access – служебное слово перед определением доступа к данным двоичного или типизированного файла.

Доступ – служебные слова, определяющие режим доступа к данным:

  • Read – чтение данных

  • Write – запись данных

  • Read Write – чтение и запись данных (режим по умолчанию)

as – служебное слово перед определением номера файла.

# – служебный символ перед номером файла

Номер – номер открываемого файла, файлы нумеруются 1,2,3 и т.д.

Другим – служебное слово, которое определяет тип доступа к данным открытого файла для другого оператора Open или для другой компьютерной программы. Другим - может иметь следующие значения:

  • Shared – к открытому файлу можно свободно обращаться используя другой оператор Open, или используя другую компьютерную программу (данный режим устанавливается по умолчанию)

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

  • Lock Write – запрет на запись файла (для Других этот файл только для чтения). В данный файл невозможно записать данные через другой оператор Open, или через другую компьютерную программу.

  • Lock Read Write - запрет на чтение и запись файла (для Других этот файл недоступен) Данный файл невозможно прочитать другим оператором Open, и невозможно записать в него данные через другой оператор Open, или через другую компьютерную программу.

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

После открытия файла возможно чтение или запись данных в файл.

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

Close #НомерФайла

где

# – служебный символ перед номером файла

НомерФайла – номер закрываемого файла

Функции и процедуры для работы с файлами

Имя функции

Тип

Назначение

EOF(НомерФайла)

Логический

Определяет, достигнут ли конец файла при его последовательном чтении. Функция имеет значение true, если достигнут конец файла, и False в противном случаи.

LOF(НомерФайла)

Длинное целое

Определяет длину файла в байтах.

FileLen(“Имя файла”)

Длинное целое

Определяет длину неоткрытого файла в байтах.

Имя файла” – может содержать в себе полное имя файла, или имя файла находящегося в текущей директории текущего диска.

Loc(НомерФайла)

Длинное целое

Определяет номер последней считанной или записанной записи в файл произвольного типа данных, или номер последнего считанного или записанного байта в двоичном файле.

FreeFile

Короткое целое

Выдает не занятый номер для файла.

Kill “Путь и маска

-

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

FileCopy “Имя Файла”, _

Новое Имя Файла”

-

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

Имя Файла” – имя файла в текущей директории текущего диска, или полное имя файла, с которого делается копия.

Новое Имя Файла”– имя файла для копии в текущей директории текущего диска, или полное имя файла для копии.

GetAttr(“Имя файла”)

Короткое целое

Определяет атрибуты неоткрытого файла.

Имя файла” – может содержать в себе полное имя файла, или имя файла находящегося в текущей директории текущего диска.

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

  • VbNormal или 0 - обычный файл

  • VbReadOnly или 1 –файл только для чтения

  • VbHidden или 2 – скрытый файл

  • VbSystem или 4 – системный файл

  • vbDirectory или 16 – директория

  • vbArchive или 32 – архивный файл

SetAttr “ Имя файла”, _

Attributes

-

Процедура для установки атрибута файла. Attributes номер устанавливаемого атрибута (см. выше GetAttr, там же см. о параметре “Имя файла”)

FileAttr( НомерФайла, _

returntype)

Короткое целое

Определяет способ, которым открыли файл оператором Open. Если returntype = 1 то данная функция возвращает номер режима. Другое значение параметра returntype не допускается устанавливать на современных компьютерах. Номера режимов:

  • 1 – Input

  • 2 – Output

  • 4 – Random

  • 8 – Append

  • 16 – Binary

Операторы для чтения и записи данных в файл

Имя оператора

Назна-чение

Пояснение

Print #НомерФайла _

[, CписокПеременных] [ ; / , ]

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

Позволяет записать список переменных или список выражений в текстовый файл с переводом строки в текстовом файле. Выражения и имена переменных списка отделяются друг от друга запятой, или точкой с запятой. Если оператор Print # заканчивается точкой, или точкой с запятой, то он не переводит строки в текстовом файле. Символ точка с запятой разделяет список числовых переменных в текстовом файле двумя пробелами, а символ запятая десятью пробелами.

Write #НомерФайла _

[, CписокПеременных] [ ; / , ]

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

Позволяет записать список переменных или список выражений в текстовый файл с переводом строки в текстовом файле. Выражения и имена переменных списка отделяются друг от друга запятой или точкой с запятой. Если оператор Write # заканчивается точкой, или точкой с запятой, то он не переводит строки в текстовом файле. Значение строковых переменных выводится в текстовый файл оператором Write # в кавычках. Значения переменных в текстовом файле отделяются друг от друга запятыми. Если вы в одной строке текстового файла содержите значение числовых и строковых переменных необходимо их записывать оператором Write #, а не Print # что бы в последствии избежать ошибок считывания данных оператором Input # .

Input #НомерФайла _

[, CписокПеременных]

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

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

Input( N, НомерФайла )

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

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

Get #НомерФайла, _

[ N ] , ИмяПеременной

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

Позволяет прочитать информацию из N записи файла произвольного типа данных, или из N байта двоичного файла. ИмяПеременой – переменная типа записи для файла произвольного типа данных, или переменная Byte для двоичного файла.

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

Put #НомерФайла, _

[ N ] , ИмяПеременной

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

Позволяет записать информацию в N запись файла произвольного типа данных, или в N байт двоичного файла. ИмяПеременой – переменная типа записи для файла произвольного типа данных, или переменная Byte для двоичного файла.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]