Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 1-13 3ий сем (Задания) / КИТ_лр13_VBA_файлы.doc
Скачиваний:
27
Добавлен:
15.06.2014
Размер:
61.44 Кб
Скачать

4

Лабораторная работа №13 по курсу “Компьютерные информационные технологии” разработка программ на языке vba с использованием текстовых файлов

1 Настройка программы для работы с файлами

Для работы с файлами в VBA (а также для ряда других операций) используется библиотека Microsoft Scripting Runtime. Прежде чем выполнять любую программу, использующую операции с файлами, необходимо подключить эту библиотеку. Для этого необходимо в среде VBA выбрать команду меню Tools - References и установить флажок Microsoft Scripting Runtime.

Основной объект файловой системы VBA, позволяющий выполнять операции с файлами - объект filesystemobject. В начале любой программы, работающей с файлами, его необходимо создать:

Set fso = CreateObject("scripting.filesystemobject")

2 Ввод данных из файла

Пусть имеется текстовый файл (например, подготовленный в программе Блокнот), содержащий некоторые числа. В каждой строке файла содержится одно число. Требуется разработать программу для ввода всех чисел из файла, превышающих 100, в столбец C рабочего листа Excel (начиная с ячейки C1). Кроме того, требуется предусмотреть вывод сообщения об ошибке (и прерывание программы) в случае, если в файле будут введены нечисловые данные. Файл должен выбираться пользователем из стандартного окна открытия файла; если пользователь отказывается от загрузки файла (нажатием клавиши ECS), то программа должна прекращать работу.

Приведем программу для решения этой задачи.

Sub iz_faila()

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 = RTrim(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; эта переменная будет строковой. Если пользователь отказывается от загрузки файла (например, нажатием клавиши ESC), то переменная otkr_file становится логической и принимает значение 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 = RTrim(stroka) функция RTrim удаляет из переменной 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).