- •Лабораторная работа №4 Основы программирования на языке vba
- •4.1 Основные этапы работы с программами на vba в Excel
- •4.2 Простейший пример программы на языке vba
- •4.3 Типы данных. Объявление переменных и констант
- •4.3.1 Типы данных
- •4.3.2 Объявление переменных
- •4.3.3 Объявление констант
- •4.3.4 Область видимости переменных
- •4.4 Оператор If
- •4.5Безусловный переход. Оператор GoTo
- •4.6Цикл до. Оператор For
- •4.7 Массивы
- •4.8 Цикл пока. Оператор DoWhile
- •4.8 Подпрограммы
- •4.9 Функции
- •4.10 Область видимости процедур
- •4.11 Варианты заданий
- •Лабораторная работа №5 операции с ячейками и рабочими листами ms excel в программах на vba
- •5.1 Основные способы ссылок на ячейки рабочего листа Excel
- •5.2 Примеры обработки данных в ячейках рабочего листа msExcel
- •5.3 Примеры операций с рабочими листами ms Excel
- •5.4 Варианты заданий
- •Лабораторная работа №6 элементы управления в программах на vba
- •6.1 Размещение элементов управления на рабочем листе Excel
- •6.2 Пример использования элементов управления: кнопки, переключатели, счетчики, флажки, текстовые поля
- •6.3 Пример использования элементов управления: списки
- •6.4 Варианты заданий
- •Лабораторная работа №7 пользовательские формы в программах на vba
- •7.1 Создание пользовательской формы в Excel
- •7.2 Кнопки, текстовые поля, списки
- •7.3 Флажки, счетчики
- •7.4 Список из нескольких колонок
- •7.5 Список с возможностью выбора нескольких элементов
- •7.6 Составление списка в программе
- •7.7 Поля выбора ячеек
- •7.8 Варианты заданий
- •Лабораторная работа №8 программЫ на vba для работы с текстовыми данными
- •8.1 Подготовка среды vba для работы с файлами
- •8.2 Ввод данных из файла
- •8.3 Вывод данных в файл
- •8.4 Обмен данными между двумя файлами
- •8.5 Функции обработки строк
- •8.6 Варианты заданий
- •Литература
- •Содержание
Лабораторная работа №8 программЫ на vba для работы с текстовыми данными
Цель работы – Освоение разработки программ на VBA для работы со строковыми данными и с текстовыми файлами.
8.1 Подготовка среды vba для работы с файлами
Для работы с файлами в VBA (а также для ряда других операций) используется библиотека Microsoft Scripting Runtime. Прежде чем выполнять любую программу, использующую операции с файлами, необходимо подключить эту библиотеку. Для этого необходимо в среде VBA выбрать команду меню Tools - References и установить флажок Microsoft Scripting Runtime.
Основной объект файловой системы VBA, позволяющий выполнять операции с файлами – объект filesystemobject. В начале любой программы, работающей с файлами, его необходимо создать:
Set fso = CreateObject("scripting.filesystemobject")
8.2 Ввод данных из файла
Пример 8.1 – Имеется текстовый файл (например, подготовленный в программе Блокнот), содержащий некоторые числа. В каждой строке файла содержится одно число. Требуется разработать программу для ввода всех чисел из файла в столбец C рабочего листа Excel (начиная с ячейки C1). Кроме того, требуется предусмотреть вывод сообщения об ошибке (и прерывание программы) в случае, если в файле будут введены нечисловые данные. Файл должен выбираться пользователем из стандартного окна открытия файла; если пользователь отказывается от загрузки файла (нажатием клавиши ECS), то программа должна прекращать работу.
Sub primer8_1()
Set fso = CreateObject("scripting.filesystemobject")
ChDrive("D")
ChDir("D:\User")
otkr_file = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If otkr_file = False Then Exit Sub
Set dan = fso.OpenTextFile(otkr_file, ForReading)
i=0
Do While Not dan.AtEndOfStream
stroka = dan.ReadLine
stroka = Trim(stroka)
If Not (IsNumeric(stroka)) Then
MsgBox ("Ошибка в файле")
Exit Sub
End If
x = CSng(stroka)
i = i + 1
Cells(i, 3).Value = x
Loop
dan.Close
End Sub
Здесь оператор Set fso = CreateObject("scripting.filesystemobject") создает объект с именем fso, который будет использоваться для операций с файлами (все имена в этом операторе – зарезервированные).
Оператор ChDrive("D") устанавливает в качестве текущего диск D; оператор ChDir("D:\User") задает текущий путь.
Примечание – Оператор ChDir делает текущим указанный каталог на указанном диске, но не изменяет текущий диск. Поэтому перед оператором ChDir в данном примере указан оператор ChDrive, задающий текущий диск.
Оператор otkr_file = Application.GetOpenFilename("Text Files (*.txt), *.txt") открывает стандартное окно загрузки файла. В нем отображается перечень файлов, содержащихся в текущем каталоге и соответствующих заданному шаблону (в данном случае – файлов с расширением .TXT). Пользователь выбирает один из файлов. Имя выбранного файла присваивается заданной переменной, в данном случае – переменной otkr_file; эта переменная будет строковой (т.е. имеет тип String). Если пользователь отказывается от загрузки файла (например, нажатием клавиши ESC), то переменная otkr_file становится логической (тип Boolean) и принимает значение False.
Примечание – Шаблон файлов требуется указывать именно так, как показано в данном примере, т.е. указывать сначала описание файлов (Text Files (*.txt)), затем – указание расширения (*.txt). Например, если бы потребовалось, чтобы в окне загрузки перечислялись не TXT, а XLS-файлы, то оператор открытия окна загрузки файла имел бы следующий вид: otkr_file = Application.GetOpenFilename ("Excel Files (*.xls), *.xls"). Если бы требовалось перечислить в окне загрузки все файлы, то оператор был бы указан в следующей форме: otkr_file = Application.GetOpenFilename().
Оператор If otkr_file = False Then Exit Sub проверяет, не отказался ли пользователь от загрузки файла. В случае отказа от загрузки работа программы завершается (оператор Exit Sub).
В операторе Set dan = fso.OpenTextFile(otkr_file, ForReading) файл с заданным именем (хранящимся в переменной otkr_file) открывается для чтения (ForReading), т.е. из него можно будет только читать данные. С этим файлом связывается объект dan, который будет использоваться для последующих операций с этим файлом.
В операторе i=0 задается начальное значение переменной i; она будет затем использоваться в качестве номера строки на рабочем листе Excel, и при необходимости она будет увеличиваться.
Оператор Do While Not dan.AtEndOfStream – начало цикла, который будет повторяться, пока не будет достигнут конец файла, связанного с объектом dan. В данном случае это файл, выбранный пользователем и открытый ранее для чтения (см. выше).
В операторе stroka = dan.ReadLine вводится одна строка из заданного файла; эта строка присваивается переменной strokа (здесь ReadLine – операция ввода). В операторе stroka = Trim(stroka) функция Trim удаляет из переменной strokа начальные и концевые пробелы, т.е. пробелы в начале и в конце строки (если они есть).
В операторе If Not (IsNumeric(stroka)) Then … проверяется, является ли переменная stroka числом. Для этого используется функция IsNumeric, принимающая значение True, если ее аргумент – число, и False – если это не число (например, если в переменной stroka содержится буква или пробел). Если оказывается, что stroka – не число, то выводится сообщение об ошибке MsgBox ("Ошибка в файле") и программа завершается (Exit Sub).
Если оказывается, что переменная stroka содержит число, то в операторе x = CSng(stroka) эта переменная преобразуется в переменную типа Single (функция CSng). Затем номер текущей строки на рабочем листе Excel увеличивается на единицу (i = i + 1), и переменная x выводится в очередную ячейку столбца C, т.е. третьего столбца (Cells(i, 3).Value = x).
По окончании цикла, т.е. после достижения конца файла (dan.AtEndOfStream), файл закрывается (оператор dan.Close).