


Цель работы: Изучение принципов работы с текстовыми файлами программными средствами Excel.
Индивидуально задание: Вариант 117
Ход работы:
1) Разработка уникального шаблона текстового документа в среде Word. Выполнение слияние с данными из Журнала учета
Рисунок 1 – Данные из журнала учета
Рисунок 2 – Форма письма
Далее выбираем наш файл Excel, журнал учёта (рис. 1) и список получателей (рис.3),
которые будут применяться к нашей форма письма.
2

Рисунок 3 – Список получателей
Рисунок 4 – Шаблон письма
Кроме того, можно указать специальные правила рассылки. В моём письме присутствует условие if-else. Если поле Стоимость имеет значение больше 10000, то в письме приписывается прилагательное к обращению «Любимый Клиент», иначе «Клиент». Примеры писем можно увидеть на рисунке 5 и 6.
Рисунок 5 – Любимый клиент
3

Рисунок 6 – Обычный клиент
Далее, реализуется данных из Excel в несколько документов Word. Для этого на листе Журнал учета создается текст сообщения и кнопка для генерации письма.
Рисунок 7 – Кнопка для генерации писем и текст сообщения
После этого пишется макрос для генерации писем на основании данных из Журнала учета.
Код макроса:
Option Explicit
Sub Генерация_писем()
' Генерация_писем Макрос
Dim WordApp As Object
Dim Data As Range, Message As String
Dim Records As Integer, i As Integer
Dim Company As String, Detal As String, FinPrice As String
Dim SaveAsName As String
On Error GoTo ErrorCode
4
' Создаем объект приложения Word
Set WordApp = VBA.CreateObject("Word.Application") ' Сохраняем информацию с листа
Set Data = Application.ThisWorkbook.Sheets("Журнал учета").Range("A1")
Message = Application.ThisWorkbook.Sheets("Журнал учета").Range("ТекстСообщения")
' Подсчет количества записей на листе Sales
Records = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("Журнал учета").Range("A:A"))
'Цикл по всем записям на листе Sales For i = 1 To Records
'Обновление сообщения в строке состояния
Application.StatusBar = "Обрабатывается запись " & i ' Присвоение текущих значений переменным
Company = Data.Cells(i, 5).Value
Detal = Data.Cells(i, 2).Value
FinPrice = Data.Cells(i, 9).Value
' Создание полного имени файла
SaveAsName = Application.DefaultFilePath & "\" & i & ".docx"
'Направление команд в Word
'Изначально код этого фрагмента был получен
'путем записи макроса в Word и затем отредактирован
'с учетом того, что работаем в VBA Excel
'Поскольку используем позднее связывание
'приходится заменять встроенные константы Word
'типа wdAlignParagraphCenter на их значения
With WordApp
.Documents.Add With .Selection
.Font.Size = 14
.Font.Bold = True
.ParagraphFormat.Alignment = 1
.TypeText Text:="Сообщение для заказчика"
.TypeParagraph
.TypeParagraph
.Font.Size = 12
.ParagraphFormat.Alignment = 0
5
.Font.Bold = False
.TypeText Text:="ДАТА:" & vbTab & Format(Date, "dd/mm/yyyy")
.TypeParagraph
.TypeText Text:="КОМУ:" & vbTab & " Директору " & Company
.TypeParagraph
.TypeText Text:="ОТ КОГО:" & vbTab & Application.UserName
.TypeParagraph
.TypeParagraph
.TypeText Message
.TypeParagraph
.TypeText Text:="Название заказа:" & vbTab & Detal
.TypeParagraph
.TypeText Text:="Стоимость:" & vbTab & vbTab & FinPrice End With
.ActiveDocument.SaveAs Filename:=SaveAsName
End With
Next i
MsgBox "Создано документов Word " & Records & " и сохранено в " & Application.DefaultFilePath
' Сброс сообщения в строке состояния
Application.StatusBar = ""
'Закрываем приложение Word WordApp.Quit
'Удаляем объект
Set WordApp = Nothing
' Открытие папки
VBA.Shell "explorer.exe " & Application.DefaultFilePath, vbNormalFocus Exit Sub
ErrorCode:
MsgBox "Что-то пошло не так..." & vbNewLine & Err.Description ' Проверяем, было ли создан объект WordApp
If Not WordApp Is Nothing Then
'Закрываем приложение Word (его не видно, но оно открыто)
'Для проверки можно сделать его видимым
6

WordApp.Visible = True
MsgBox "Приложение Word действительно запущено"
'У метода Quit Word есть 3 необязательных параметра.
'Задаем один из них: не сохранять изменения.
'Константы Word использовать не можем,
'поэтому значение 0, а не wdDoNotSaveChanges
WordApp.Quit SaveChanges:=0 ' Удаляем объект
Set WordApp = Nothing
End If
End Sub
Далее, выполняется макрос и появляется следующее сообщение от Excel.
Рисунок 8 – Сообщение о создании документов
В сообщении указан путь, где появились письма для отправки. На рис.9 показан пример одного из такого письма.
Рисунок 9 – Пример письма
Все готово, макрос назначается на кнопку в Журнале учета для дальнейшего использования.
7

Затем я начал работу с различными текстовыми файлами и импортом их в Excel.
Импорт каждого файла я делал с записью макросов. В качестве примера я использовал журнал учета, использованный на рисунке 1.
После я начал работу с текстовым файлом формата prn. Особенность данного файла в том, чтобы каждая запись между столбцами была на равном расстоянии друг от друга. Следовательно, во время импортирования таких данных мы выбираем в формате данных 30 «фиксированной ширины» (рис. 10). Сразу после происходит редактирование ширины столбцов.
Рисунок 10 – Указание формата данных для импорта файла prn
Затем я редактирую типы данных в столбцах (рис. 11). Заголовки немного съехали, но можно поправить.
Рисунок 11 – Указание формата данных столбцов
8

Получившаяся таблица после импорта данных показана на рисунке 12. Названия заголовком съехали, но целостность данных таблицы сохранены.
Рисунок 12 – Итог импорта данных
Рисунок 13 – Код макроса для открытия файла PRN
Затем, я начал работу с открытием файла формата txt. Важно то, что разделителем являются знаки табуляции в данном случае.
9

Рисунок 14 – Выбор символов разделителей для данных формата txt
Выполняем указание формата данных столбцов (рис. 14) и завершаем импортирование. Результат данного импорта почти ничем не отличается от предыдущего, но результат также можно посмотреть на рисунке 15.
Рисунок 15 – Итог импорта данных txt
10