- •Лабораторная работа №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.3 Вывод данных в файл
Пример 8.2 – На рабочем листе Excel в столбце A (начиная с ячейки A1) хранятся номера контрактов, в столбце B – количество поставляемого товара по соответствующему контракту, в столбце C – цена за одно изделие. Требуется вывести в текстовый файл номера и стоимости контрактов, стоимость которых превышает 10 000 ден.ед. В текстовом файле номер и стоимость контракта должны представлять собой одну строку; номер и стоимость должны быть разделены пробелом. На рабочем листе Excel имеется также текстовое поле Imya_faila, где пользователь указывает имя файла для вывода данных. Если файл с указанным именем уже существует, то данные должны добавляться в него.
Sub primer8_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). Если она превышает 10 000, то из номера контракта и его стоимости составляется строка: stroka = CStr (nomer) + " " + CStr(stoimost). Здесь CStr – функция преобразования из числовых данных в строковые, знак + обозначает операцию сцепления строк. В операторе vyvod.WriteLine(stroka) полученная строка выводится в файл, соответствующий объекту vyvod. Здесь WriteLine – операция вывода строки в файл.
По окончании цикла, т.е. после вывода в файл всех необходимых строк, файл закрывается (оператор vyvod.Close).
8.4 Обмен данными между двумя файлами
Пример 8.3 – Имеется некоторый текстовый файл, где в каждой строке находится или некоторое число, или некоторый текст. Требуется вывести все числа из этого файла, превышающие 10, в другой файл. Имя файла с исходными данными должно выбираться пользователем. Имя файла для вывода результатов – D:\User\chisla.txt. Если этот файл уже существует, то его прежнее содержимое должно удаляться.
Sub primer8_3()
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).