
- •Часть 1.
- •1.1 Введение
- •1.2 Правила оформления конструкций языка vba в общем виде
- •1.3 Идеология визуальных языков
- •1.4 Основные понятия визуальных языков
- •1.5 Дополнительные понятия языка vba
- •2 Переменные и константы
- •2.1 Структура модуля
- •2.2 Объявление переменных и констант
- •Имя_Модуля1.Имя_Поля
- •2.2.2 Неявное и явное объявление переменных ( Оператор Option Explicit )
- •2.3 Неименованные константы
- •2.4 Оператор присваивания
- •2.4.1 Арифметические выражения
- •2.4.2 Строковые выражения
- •2.4.3 Логические выражения
- •Сравнение строковых переменных в логических выражениях
- •2.4.4 Выражения Data
- •2.4.5 Выражения Variant
- •2.4.6 Смешанные выражения
- •2.5 Функции определения типа переменной
- •2.6 Функция форматного преобразования переменной в строковый формат
- •3 Подпрограммы ( процедуры и функции )
- •3.1 Описание подпрограмм
- •3.2 Входные параметры подпрограммы
- •3.3 Вызов подпрограмм
- •3.3.1 Изменение вида входного параметра при вызове подпрограммы
- •3.4 Описание событийной процедуры объекта
- •3.5 Рекурсивные подпрограммы (процедуры и функции)
- •4 Операторы vba
- •4.1 Условный оператор If
- •4.2 Оператор выбора Case
- •4.3 Операторы цикла
- •4.3.1 Циклы for Оператор цикла For .. Next
- •Оператор цикла For Each .. Next
- •Досрочный выход из циклов For
- •4.3.2 Оператор цикла While .. Wend
- •4.3.3 Циклы do Оператор цикла Do While .. Loop
- •Оператор цикла Do .. Loop Until
- •Другие циклы do
- •Досрочный выход из циклов do
- •4.4 Оператор еnd (досрочное завершение программы)
- •4.5 Оператор Exit (досрочный выход из подпрограмм и циклов)
- •4.6 Оператор перехода goto
- •4.7 Оператор On Error (обнаружения ошибок)
- •4.8 Оператор With (обращения к полям структурированных типов, а так же к методам и к потомкам объектов)
- •4.9 Оператор Set (установка и снятие указателя )
- •4.10 Оператор New (создание экземпляров)
- •4.11 Оператор DoEvents (Прерывание работы подпрограммы)
- •4.12 Оператор Shell (Запуск исполняемых файлов)
- •4.13 Оператор AppActivate (Активизация окна другой программы)
- •4.14 Оператор SendKeys (Эмуляция нажатия на клавиши)
- •4.15 Вложенность структур операторов
- •5 Структурированные типы vba
- •5.1 Введение
- •5.2 Массивы
- •5.2.1 Статический массив
- •5.2.2 Динамический массив
- •5.2.3 Объявление массива через функцию Array
- •5.2.4 Функции определения размерности массива
- •5.2.5 Опрос, ввод и вывод в цикле ячеек массива
- •5.2.6 Массивы массивов
- •5.2.7 Поиск максимума и минимума в массиве
- •5.2.8 Сортировка массива
- •5.2.9 Оператор высвобождения памяти занятой динамическим массивом и обнуления ячеек статического массива (Erase)
- •5.3 Записи ( и массивы записей)
- •5.3.1 Запись с константными полями
- •5.4 Семейства (Коллекции)
- •5.5 Объекты
- •5.5.1 Введение
- •5.5.2 Объект Application
- •5.5.3 Объекты ActiveWorkbook, ThisWorkbook, Workbooks (связь с книгой Excel)
- •5.5.4 Объекты ActiveSheet, Worksheets (связь с листом книги Excel)
- •5.5.5 Объекты Rows, Columns ,Range, Cells, Selection, ActiveCell (связь со строками, столбцами и ячейками листа Excel)
- •5.5.6 Элементы управления
- •Элемент управления CommandButton (Кнопка)
- •Элементы управления CheckBox, OptionButton (Флажок, Переключатель)
- •Элемент управления TextBox (текстовый редактор)
- •Элементы управления ListBox, ComboBox (Список ,Поле со списком)
- •Элементы управления ScrollBar ,SpinButton (Полоса прокрутки ,Счетчик)
- •Элемент управления Imаge (Рисунок)
- •5.6 Объект Форма
- •6 Диалоги
- •7 Работа с файловой системой
- •7.1 Введение
- •7.1.3 Работа с файловой системой через программу Мой компьютер (My Computer)
- •7.2 Функция dir ( Просмотр содержимого директории и определение наличия файла на диске)
- •7.3 Работа с дисковым пространством
- •7.3.1 Дополнительные функции для работы с дисковым пространством
- •7.4 Работа с файлами
- •7.4.1 Работа с текстовым файлом
- •7.4.2 Работа с двоичным файлом
- •7.4.3 Работа с файлом произвольного типа данных
- •7.5 Просмотр содержимого ярлыка
- •7.6 Функция Environ (Определение местонахождения служебных директорий Windows)
- •Оглавление
- •2 Переменные и константы 9
- •3 Подпрограммы ( процедуры и функции ) 34
- •4 Операторы vba 47
- •5 Структурированные типы vba 70
- •5.3 Записи ( и массивы записей) 83
- •5.4 Семейства (Коллекции) 85
- •5.5 Объекты 87
- •6 Диалоги 119
- •7 Работа с файловой системой 122
- •Часть 1
7.4 Работа с файлами
Файлы, с которыми работает программист VBA можно разделить на три типа:
Текстовый файл - предназначен для хранения текстовой информации. Информация в этом файле представлена в виде строк символов.
Двоичный файл, не структурированный файл, информация в котором представлена в виде набора байтов.
Файл произвольного типа данных, структурированный файл, обычно файл записей. Информация в этом файле представлена в виде записей, точнее, в виде групп байтов.
Надо сказать, что любой файл состоит из байтов, например, в текстовом файле в байтах хранятся коды символов строк, или служебные символы. Байт содержит в себе целое число в диапазоне 0-255 записанное в двоичной системе. Любой файл в независимости от его типа можно операторами VBA открыть как двоичный файл.
Надо еще отметить, что файлы книги Excel и файлы надстроек Excel обрабатываются методами соответствующих объектов, а не теми способами, которые мы указали в данной главе этой книги.
Файл имеет свою длину, которая измеряется количеством байт содержащимися в файле.
Байт – 8 бит (восемь разрядов для двоичного числа)
Килобайт – 1024 байта
Мегабайт - 1024 килобайт
Гигабайт - 1024 мегабайт
это ближайшее число к 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(“Имя файла”) |
Короткое целое |
Определяет атрибуты неоткрытого файла. “Имя файла” – может содержать в себе полное имя файла, или имя файла находящегося в текущей директории текущего диска. Значение функции может быть сравнено с числом или с константой определяющей атрибут файла:
|
SetAttr “ Имя файла”, _ Attributes |
- |
Процедура для установки атрибута файла. Attributes – номер устанавливаемого атрибута (см. выше GetAttr, там же см. о параметре “Имя файла”) |
FileAttr( НомерФайла, _ returntype) |
Короткое целое |
Определяет способ, которым открыли файл оператором Open. Если returntype = 1 то данная функция возвращает номер режима. Другое значение параметра returntype не допускается устанавливать на современных компьютерах. Номера режимов:
|
Операторы для чтения и записи данных в файл |
|||
Имя оператора |
Назна-чение |
Пояснение |
|
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 информация записывается в текущую запись или в текущий байт файла. И текущим становится байт (или запись), расположенный за байтом, в котором обновлялись данные. |