
- •Федеральное агентство по образованию
- •Введение в vba
- •Объектно-ориентированное программирование
- •Основные понятия
- •Алфавит и словарь языка
- •Переменные
- •Константы
- •Строковые переменные
- •Массивы
- •Пользовательские типы данных
- •Операции vba
- •Объектная модель Excel
- •Свойства и методы объектов
- •Отображение объектной модели Excel
- •Иерархия объектной модели
- •Ссылка на объекты в коде vba
- •Работа с объектами
- •Задание свойств объекта
- •Использование методов объекта
- •Переменные-объекты
- •Коллекции
- •Метод Add
- •Свойство Count
- •Свойства и методы основных объектов Excel
- •Объект Application
- •Объект Worksheet
- •Объект Range
- •Просмотр объектов
- •Использование справочной системы
- •Использование функциональной клавиши f1
- •Использование помощника
- •Вывод сообщений и ввод и данных
- •Функция MsgBox
- •Функция InputBox
- •Метод InputBox
- •Объединение текстовых строк
- •Концепция событий Excel
- •Типы событий Excel
- •События объекта Workbook
- •События объекта Worksheet
- •События объекта Application
- •События объекта UserForm
- •События, не связанные с конкретными объектами
- •Метод OnKey
- •Событие OnTime
- •Формы пользователя
- •Свойства, методы и события экранных форм
- •Некоторые свойства форм
- •Некоторые методы форм
- •Некоторые события форм
- •Элементы управления
- •Элемент управления Label (Надпись)
- •Окно свойств формы
- •Элемент управления CommandButton (Кнопка)
- •Элемент управления TextBox (Текстовое поле)
- •Элемент управления ComboBox
- •Элемент управления ListBox (список)
- •Элемент управления CheckBox (Флажок)
- •Элемент управления ToggleButton (Выключатель)
- •Элемент управления OptionButton (Переключатель)
- •Элемент управления Image (Рисунок)
- •Элемент управления ScrollBar (полоса прокрутки)
- •Элемент управления SpinButton (Счётчик)
- •Элемент управления RefEdit (Поле со свёртыванием)
- •Элементы управления на рабочем листе
- •Инструкции vba
- •Оператор присваивания
- •Инструкция Set
- •Инструкция For… Next
- •Инструкция While…Wend
- •Инструкция Do... Loop
- •Инструкция For Each…Next
- •Инструкции перехода
- •Инструкция условного перехода If…Then…Else
- •Инструкция Select…Case
- •Инструкция безусловного перехода GoTo
- •Инструкции перехода к обработчику ошибок On Error
- •Инструкции прерывания выполнения блока Exit
- •Инструкция передачи управления выполнением процедуры подпрограмме внутри процедуры GoSub… Return
- •Инструкция передачи управления выполнением процедуры на одну из нескольких строк кода On…GoSub и On…GoTo
- •Функции vba
- •Встроенные функции
- •Математические функции
- •Функции преобразования данных
- •Функции даты и времени
- •Строковые функции
- •Примеры использования функций vba
- •Удаление ненужных символов
- •Определение длины строки
- •Сравнение и поиск строк
- •Функция StrComp
- •Функция InStr
- •Выделение части строки
- •Функция Left
- •Функция Right
- •Функция Mid
- •Форматирование значений данных
- •Функции, определённые пользователем
- •Пример функции
- •Файлы vba
- •Типы файлов в vba
- •Открытие и закрытие файла
- •Ввод данных в файл последовательного доступа
- •Вывод данных из файла последовательного доступа
- •Работа с файлом произвольного доступа
- •Создание процедуры
- •Выполнение процедуры
- •Сохранение процедуры
- •Запись последовательности действий пользователя
- •Просмотр кода макроса
- •Отладка программ
- •Тестирование и отладка как этап разработки приложений
- •Отладка
- •Режим останова
- •Использование окна Immediate
- •Просмотр значений в окне Immediate
- •Пошаговое выполнение программ
- •Исправление ошибок
- •Библиографический список
- •Оглавление
Вывод данных из файла последовательного доступа
Input #
Считывает данные из открытого файла последовательного доступа и присваивает их переменным. Данные, считываемые с помощью инструкции Input #, обычно записываются в файл с помощью инструкции Write #.
Формат инструкции:
Input # НомерФайла, СписокПеременных
Номерфайла – любой допустимый файловый номер
СписокПеременных – список разделённых запятыми переменных, которым следует присвоить значения, считанные из файла
Line Input #
Считывает одну строку из открытого файла последовательного доступа и присваивает ее переменной типа String. Данные, считываемые с помощью инструкции Line input #, как правило, записываются в файл с помощью инструкции Print #.
Формат инструкции:
Line Input #НомерФайла, ИмяПеременной
Синтаксис инструкции Line Input # содержит следующие элементы:
НомерФайла – номер файла
ИмяПеременной – имя переменной типа Variant или String
Функция Input
Возвращает значение типа String, содержащее символы из файла, открытого в режиме Input или Binary. Функция input считывает данные, записываемые в файл с помощью инструкции Print # или Put.
Формат инструкции:
Input (Число, [#] НомерФайла)
Число задает число возвращаемых символов. Если аргумент Число равен 1, то производится посимвольное считывание данных.
Функция EOF
Функция возвращает значение True при достижении конца файла.
Формат инструкции:
EOF (НомерФайла)
При последовательном считывании информации из файла часто используется следующий цикл:
Do While Not EOF(l) Loop или While Not EOF (I) Wend.
Пример
Ниже приведены две процедуры: ЗаписьПоследоватФайла и ЧтениеПоследоватФайла,– в которых создаётся, а затем читается файл Ведомость, размещаемый в папке E:\VBA_INTERNET. При чтении файла, созданного процедурой ЗаписьПоследоватФайла, отличие действия инструкций Input и Line Input в процедуре ЧтениеПоследоватФайла проявятся при чтении записи, созданной инструкцией Write #1, "Алексеев С.С.", 206709, "Информатика", "Отлично". Инструкция Line Input #1, Ввод считает ее целиком в переменную Ввод, в то время, как инструкция Input #1, Ввод считывает записи последовательно, и для чтения всей строки должен выполниться четыре раза.
Sub ЗаписьПоследоватФайла()
Open "e:\VBA_INTERNET\Ведомость" For Output As #1
Print #1, "Алексеев С.С.", 206709
Print #1, "Информатика"
Write #1, "Отлично"
Write #1, "Алексеев С.С.", 206709, "Информатика", "Отлично"
Close #1
End Sub
Sub ЧтениеПоследоватФайла()
Dim Ввод
Open "e:\VBA_INTERNET\Ведомость" For Input As #1
Input #1, Ввод: MsgBox Ввод
Input #1, Ввод: MsgBox Ввод
Input #1, Ввод: MsgBox Ввод
Line Input #1, Ввод: MsgBox Ввод
Close #1
End Sub
Ниже приведены диалоговые окна, выводимые инструкцией MsgBox.
Работа с файлом произвольного доступа
Приведем инструкции ввода/вывода информации при работе с файлом произвольного доступа, а также инструкции определения длины файла и текущей позиции указателя в файле.
Put
Записывает содержимое переменной в файл произвольного доступа.
Формат инструкции:
Put [#] НомерФайла, [НомерЗаписи] , ИмяПеременной
НомерФайла – номер файла
НомерЗаписи – номер записи (режим Random) или номер байта (режим Binary), с которого следует начать запись. Если аргумент НомерЗаписи опущен, то записывается на то место, где был установлен указатель после выполнения последней инструкции Get или Put, либо куда он переведен с помощью функции Seek
ИмяПеременной – имя переменной, содержащей данные, которые следует записать в файл
Get
Читает данные из открытого файла произвольного доступа в переменную.
Формат инструкции:
Get [#] НомерФайла, [НомерЗаписи] , ИмяПеременной
НомерФайла – номер файла
НомерЗаписи – номер записи (для файлов в режиме Random) или номер байта (для файлов в режиме Binary), с которого следует начать чтение
Имяпеременной – имя переменной, в которую следует поместить считанные данные
Seek
Функция возвращает значение типа Long, определяющее текущее положение указателя чтения/записи внутри файла, открытого с помощью инструкции Open.
Формат функции:
Seek (НомерФайла)
LOF
Функция возвращает значение типа Long, представляющее размер файла в байтах, открытого с помощью инструкции Оpen . Для определения размера закрытого файла следует использовать функции FileLen.
Формат функции:
LOF (НомерФайла)
FileLen
Функция возвращает значение типа Long, содержащее размер файла в байтах.
Формат функции:
FileLen (Путь )
Как видно из приведенного в предыдущем разделе примера для считывания информации при помощи инструкции Input #, файл последовательного доступа иногда удобно задавать как последовательность записей, причем каждая из записей формируется из группы полей. В файле последовательного доступа существует только одна внутренняя структура, образованная разделителями: запятыми или специальными символами, обозначающими переход на новую строку.
В противоположность файлам последовательного доступа, в файлах произвольного доступа запись является встроенным элементом. Файл произвольного доступа – это файл, упорядоченный по номерам записей, что позволяет быстро переместиться на любую запись, минуя предыдущие.
При создании файла произвольного доступа указывается максимальная длина каждой записи. Само собой разумеется, что в любую запись можно вводить данные, занимающие не всё место, выделенное для записи, но нельзя ввести данные, требующие больше места, чем допустимая длина записи. Лишняя информация будет просто усекаться.
Отметим, что при открытии файла произвольного доступа, в отличие от файла последовательного доступа, не надо специально указывать, открывается он для ввода или вывода информации. Ввод и вывод информации определяют команды Put и Get.
Приведем пример работы с файлом произвольного доступа Ведомость. Файл создается с помощью процедуры ЗаписьВФайлПД, которая последовательно считывает данные из первого и второго столбца рабочего листа и затем вводит их в файл. В этой процедуре число вводимых записей фиксировано и равно 3. Процедура СчитываниеИзФайлаПД производит обратное действие – считывает данные из файла и вводит их в ячейки третьего и четвертого столбца рабочего листа.
При работе с файлом произвольного доступа можно определить число записей, не пересчитывая их. Число записей равно отношению размера файла к длине одной записи. Длина записи устанавливается при создании файла произвольного доступа и определяется типом переменной, при помощи которой файл был создан. Размер открытого файла определяется функцией LOF, а еще не открытого – функцией FileLen. В рассматриваемом случае число записей в файле равно LOF(l) / Len(Студент).
Структура записи Студент определяется на модульном уровне, т.е. перед первой процедурой модуля.
Type Студент
Фамилия As String * 20
Оценка As String * 5
End Type
Sub ЗаписьВФайлПД()
Dim Студент As Студент
Dim i As Integer
Open "Список" For Random As #1 Len = Len(Студент)
For i = 2 To 4
With Студент
.Фамилия = Cells(i, 1).Value
.Оценка = Cells(i, 2).Value
End With
Put #1, i, Студент
Next i
Close #1
End Sub
Sub СчитываниеИзФайлаПД()
Dim Студент As Студент
Dim i As Integer
Dim n As Integer
Open "Список" For Random As #1 Len = Len(Студент)
n = LOF(1) / Len(Студент) + 1
For i = 2 To n
Get #1, i, Студент
With Студент
Cells(i, 3).Value = .Фамилия
Cells(i, 4).Value = .Оценка
End With
Next i
Close #1
End Sub
Ниже приведены таблицы Excel до и после выполнения процедуры СчитываниеИзФайлаПД.