
Цель работы: Изучение принципов работы с текстовыми файлами программными средствами Excel.
Индивидуально задание: Вариант 117
Ход работы:
1) Разработка уникального шаблона текстового документа в среде Word. Выполнение слияние с данными из Журнала учета
Рисунок 1 – Данные из журнала учета
Рисунок 2 – Форма письма
Далее выбираем наш файл Excel, журнал учёта (рис. 1) и список получателей (рис.3),
которые будут применяться к нашей форма письма.
Рисунок 3 – Список получателей
Рисунок 4 – Шаблон письма
Кроме того, можно указать специальные правила рассылки. В моём письме присутствует условие if-else. Если поле Стоимость имеет значение больше 10000, то в письме приписывается прилагательное к обращению «Любимый Клиент», иначе «Клиент». Примеры писем можно увидеть на рисунке 5 и 6.
Рисунок 5 – Любимый клиент
Рисунок 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
' Создаем объект приложения 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
.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 (его не видно, но оно открыто)
' Для проверки можно сделать его видимым
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 – Пример письма
Все готово, макрос назначается на кнопку в Журнале учета для дальнейшего использования.
Затем я начал работу с различными текстовыми файлами и импортом их в Excel.
Импорт каждого файла я делал с записью макросов. В качестве примера я использовал журнал учета, использованный на рисунке 1.
После я начал работу с текстовым файлом формата prn. Особенность данного файла в том, чтобы каждая запись между столбцами была на равном расстоянии друг от друга. Следовательно, во время импортирования таких данных мы выбираем в формате данных 30 «фиксированной ширины» (рис. 10). Сразу после происходит редактирование ширины столбцов.
Рисунок 10 – Указание формата данных для импорта файла prn
Затем я редактирую типы данных в столбцах (рис. 11). Заголовки немного съехали, но можно поправить.
Рисунок 11 – Указание формата данных столбцов
Получившаяся таблица после импорта данных показана на рисунке 12. Названия заголовком съехали, но целостность данных таблицы сохранены.
Рисунок 12 – Итог импорта данных
Рисунок 13 – Код макроса для открытия файла PRN
Затем, я начал работу с открытием файла формата txt. Важно то, что разделителем являются знаки табуляции в данном случае.
Рисунок 14 – Выбор символов разделителей для данных формата txt
Выполняем указание формата данных столбцов (рис. 14) и завершаем импортирование. Результат данного импорта почти ничем не отличается от предыдущего, но результат также можно посмотреть на рисунке 15.
Рисунок 15 – Итог импорта данных txt
Рисунок 16 – Код макроса для открытия файла txt
Последним я импортировал файл формата cvs. Особенность данного файла в том, что разделителем является запятая, реже точка с запятой.
Выбираем формат данных «с разделителями» (рис. 17) и указываем символ-разделителем запятую и знак табуляции (рис. 18).
Рисунок 17 – Выбор формата данных файла cvs
в
Рисунок 18 – Выбор символов-разделителей для данных формата cvs
Рисунок 19 – Итог импорта данных cvs
Рисунок 20 – Код макроса импорта данных cvs
Вывод:
В результате проведенной работы, я научился использовать различные данные в некоторых средах. Так, я научился экспортировать данные из Excel в Word, получая автоматические письма для печати. Также, я научился импортировать данные из текстовых файлов разных форматов (prn, txt, CVS), в Excel. Импорт данных в Excel важная функция, так как имеется огромное количество устройств, которые физически не могут экспортировать данные напрямую в Excel, а могут сохранить их в текстовом формате. Excel позволяет легко импортировать данные, и сразу их редактировать, и использовать. Во время проведения работы я столкнулся с проблемой неправильного распределения данных по столбцам при открытии файлов, так как неправильно был записан файл изначально из-за чего приходилось вручную редактировать файл так, чтобы он подходил под условия задачи.
Список использованных ресурсов:
1) https://pro.guap.ru/get-task/1634e9b492a7ca55e00669ede5b87ee4