Скачиваний:
1
Добавлен:
27.08.2024
Размер:
755.43 Кб
Скачать

Цель работы: Изучение принципов работы с текстовыми файлами программными средствами 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

Соседние файлы в папке лаб6