Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КИТ часть_1 (Лаб практикум) / VBA_лаб_практикум.doc
Скачиваний:
256
Добавлен:
15.06.2014
Размер:
3.06 Mб
Скачать

6.3 Вывод данных в файл

Пример 6.2 – На рабочем листе Excel в столбце A (начиная с ячейки A1) хранятся номера контрактов, в столбце B – количество поставляемого товара по соответствующему контракту, в столбце C – цена за одно изделие. Требуется вывести в текстовый файл номера и стоимости контрактов, стоимость которых превышает 10000 ден.ед. В текстовом файле номер и стоимость контракта должны представлять собой одну строку; номер и стоимость должны быть разделены пробелом. На рабочем листе Excel имеется также текстовое поле Imya_faila, где пользователь указывает имя файла для вывода данных. Если файл с указанным именем уже существует, то данные должны добавляться в него.

Sub primer6_2()

Set fso = CreateObject("scripting.filesystemobject")

rez_file = Imya_faila.Value

Set vyvod = fso.OpenTextFile(rez_file, ForAppending, True)

Set d = Cells(1, 1).CurrentRegion

m = d.Rows.Count

For i = 1 To m

stoimost = d.Cells(i, 2).Value * d.Cells(i, 3).Value

If stoimost > 10000 Then

nomer = d.Cells(i, 1).Value

stroka = CStr (nomer) + " " + CStr(dohod)

vyvod.WriteLine (stroka)

End If

Next i

vyvod.Close

End Sub

Здесь, как и в предыдущем примере, оператор Set fso = CreateObject("scripting.filesystemobject") создает объект с именем fso, который будет использоваться для операций с файлами (все имена в этом операторе - зарезервированные).

В операторе rez_file = Imya_faila.Value переменной rez_file присваивается значение текстового поля Imya_faila, где пользователем должно быть указано имя файла для вывода данных.

В операторе Set vyvod = fso.OpenTextFile(rez_file, ForAppending, True) файл с заданным именем (хранящимся в переменной rez_file) открывается для добавления данных (ForAppending). Значение True указывает, что в случае, если указанный файл не существует, он будет создан (и также открыт для добавления данных). С открываемым файлом связывается объект vyvod.

Затем определяется заполненная данными область рабочего листа, начиная с ячейки Cells(1,1) (т.е. с A1); этой области будет соответствовать объект d. Определяется количество строк (m = d.Rows.Count).

Для каждой строки вычисляется стоимость указанного в ней контракта (переменная stoimost). Если она превышает 10000, то из номера контракта и его стоимости составляется строка: stroka = CStr (nomer) + " " + CStr(stoimost). Здесь CStr – функция преобразования из числовых данных в строковые, знак + обозначает операцию сцепления строк. В операторе vyvod.WriteLine(stroka) полученная строка выводится в файл, соответствующий объекту vyvod. Здесь WriteLine – операция вывода строки в файл.

По окончании цикла, т.е. после вывода в файл всех необходимых строк, файл закрывается (оператор vyvod.Close).

6.4 Обмен данными между двумя файлами

Пример 6.3 – Имеется некоторый текстовый файл, где в каждой строке находится или некоторое число, или некоторый текст. Требуется вывести все числа из этого файла, превышающие 10, в другой файл. Имя файла с исходными данными должно выбираться пользователем. Имя файла для вывода результатов - D:\User\chisla.txt. Если этот файл уже существует, то его прежнее содержимое должно удаляться.

Sub iz_faila_v_fail()

Set fso = CreateObject("scripting.filesystemobject")

ChDrive "D"

ChDir "D:\User"

otkr_file = Application.GetOpenFilename("Text Files (*.txt), *.txt")

rez_file = "D:\User\chisla.txt"

Set ishod = fso.OpenTextFile(otkr_file, ForReading)

Set rezult = fso.OpenTextFile(rez_file, ForWriting, True)

Do While Not ishod.AtEndOfStream

stroka = ishod.ReadLine

If IsNumeric(stroka) Then

x = CSng(stroka)

If x > 10 Then rezult.WriteLine (x)

End If

Loop

ishod.Close

rezult.Close

End Sub

Большинство операций, используемых в этой программе, рассмотрено ранее.

В операторе Set rezult = fso.OpenTextFile(rez_file, ForWriting, True) файл с заданным именем (хранящимся в переменной rez_file) открывается для записи данных с потерей прежних данных (ForWriting). Значение True указывает, что в случае, если указанный файл не существует, он будет создан. Если бы требовалось добавлять данные в этот файл (с сохранением прежних данных), то вместо ForWriting было бы указано ForAppending. С открываемым файлом связывается объект rezult.

Следует обратить внимание, что в конце работы программы необходимо закрыть все использовавшиеся в ней файлы (в данном примере – два файла, с которыми были связаны объекты ishod и result).