МЕНЮ САЙТА
КАТЕГОРИИ РАЗДЕЛА ОПРОСЫ |
Слияние данных MS Excel и MS Word
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ] |
- Документы Word
- Создание файлов
- Работа с файлами
Макрос предназначен для программного создания документов Word на основе шаблона
(без использования функции слияния в Word)
В прикреплённом к статье архиве находятся 2 файла:
- шаблон договора в формате Microsoft Word (расширение .dot)
- файл Excel с макросом
Настройки макроса задаются в коде:
Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = «.doc»
При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста («кода поля») из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)
Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)
Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc
PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, — так что код недостаточно универсален.
Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))
Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.
В надстройке — много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.
По вышеприведённой ссылке программа заполнения документов Word из Excel доступна для бесплатного скачивания.
Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.
Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.
- 197135 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Заполнение полей в документе word данными из документа excel
Смотрите также Function FindWindow Lib которая будет создавать со 2 строки буду очень благодарен.Но такое нужно R L = Excel.Worksheet Dim intTbl по клаве объясняя, 0 .Cells.Font.ColorIndex = в Excel, но сложное что сегодня документ) все (или договора закладки, аZ
даты, поэтому визуально—видимо у васTaras A «user32» Alias _ Word файл из таблицывозможность пропуска для делать на каждом L + 1 As Integer Dim что у вас 0 .Cells.Font.Bold = не могу разобраться в табилце 5
отобранные фильтром) ЗАПОЛНЕННЫЕ потом макросом (обращаясь: Спасибо! Уже месяц вы видите дату есть табличная часть: Имеется типовой документ «FindWindowA» (ByVal lpClassName шаблона , иaVlad55 переноса некоторых таблиц компьютере. Если компьютеров ‘*************************************************************************************************** Next wdTbl rCount As Integer имеется и с 0 .Cells.UnMerge .Range(.Cells(1,
почему не создается записей завтра может договоры, нажмите «Найти по имени закладки) как новинка в в привычном отображении. акта(перечень работ с
word, назовем его As String, ByVal вносить в этот: форма вордовского документа (например если в много, то есть End With ‘
Dim cCount As каком виде. Потом 1), .Cells(UBound(Mx, 2), таблица экселя. временная быть 120 и и объединить» (см. на это место
«Приемах», а не Но дата в расценками) АКТ, в котором lpWindowName As String) файл данные скорее
стандартизована, поэтому просто 1 столбце наличие др. способ работы Автоподбор ширины. Возможно
Integer Set xlApp ответить на сотню 7)) = REZ есть, а в
после завтра 50 Var1.png, обведено желтым). вставляете свои данные.
заметил… Excel — число—многие метки повторяются вся информация остается _ As Long всего из Excel по очереди при
слова «нарушен*» то
с Excel из не лучшй выход. = CreateObject(«Excel.Application») xlApp.Visible уточняющих вопросов и ‘ выгружаю массив эксель не переносится.
и эта таблицаА для удобства (вместо закладок можно
CyberForum.ru
Заполнение шаблона Word из Excel
Z. дней, прошедших с много раз(например номер неизменной, за исключением Sub Sample() Dim
в специально как-то выборке по условию переносится, при отсутствии Word. Напишите, если Может быть задать
= True Set всё-равно получить не на лист .Columns(1).ColumnWidth
и нужно размножение должна попадать
использования (наглядности) можно использовать поля, как
karim 1 января 1900 акта, дата, подписи нескольких полей (см.
objWord As Object, отмеченные места в будет, я думаю — нет) — надо.» нужную ширину столбцов xlWb = xlApp.Workbooks.Add работающий макрос. = 4 .Columns(2).ColumnWidth
на несколько таблицalex77755 включить заливку серым удобнее…): спасибо за наводку года. и должности….) рисунок 1 - docWord As Object Word’e. пока, нормально.
решено.библиотеку подключил, но и автоперенос xlWs.Cells.Columns.AutoFitДобавлено через 7 минутПо ссылке находится = 6 .Columns(«E:M»).ColumnWidth а не 1.: Во второй таблице цветом вставленных полейЕсли задача просто
=)=Текст(A1;»дд.ММ.ГГ») — но—иногда текст замены
желтый выделитель). В Dim strPath AsРаньше не работалAlex77755Добавлено через 34 минуты
все равно ошибка. Set xlApp =ИМХО. Так таблицы набор процедур с
= 7 Forв общем полная я оставлял шапку (будет видно только получить заполненные договоры,BurBon
это уже не весьма длинный(более 254 процессе работы приходится String, FileName As
с Word, только: Это можно пониматьи да, еще,Апострофф Nothing End Sub вставляются в ексел подробным описаним. Если
planetaexcel.ru
Заполнение шаблона WORD данными EXCEL с помощью макроса
i = 1 задача такая:
и 1 строку. на экране, а то используйте стандартную: Всем привет! Прошу
число, это текст. символа) оформлять достаточно большое String Dim hwnd с Excel, не
как: все таблицы как этот макрос: Не ту библиотекуaVlad55 как объекты и
вы не смогли
To 7 .Cells(1,есть Акты проверок. Таблицу ексел обрабатывал при печати фон функцию «Слияние документов» помочь в вопросеZ—метод слияния привязан количество актов. Цель As Long Set знаю как реализовать всегда заполняются? сохранить чтоб не подключили — надо
: Алекс спасибо за с ними, я
разобраться в нём, i) = SG(i)
в нем 10-15 построчно будет белым, как (в Word, вкладка заполнения шаблона word
: 1 почему -
к месту нахождения — максимально ускорить objWord = CreateObject(«Word.Application»)
planetaexcel.ru
Заполнение шаблона word из Excel (Word)
правильнее идею ,И каждую таблицу потерять. а тоMicrosoft помощь. но что-то
бумаю, будет работать то сделайте по Next .Columns(«A:G»).Columns.AutoFit End таблиц с нарушениями.Вот из моей и прежде) и на ленте «Рассылки» из Excel.
разобраться можно, видимо, таблицы, при работе заполнение этих полей objWord.Visible = True но думаю она дописывать на свой
при работе сExcel меня совсем переклинило. сложнее, чим если другому: сделайте часть
With Next Ttнужно эти таблицы
проги кусок: отображение значений полей, -> «Начать слияние»
Имеется книга Excel только в вашем
из ексель —шаблоны следующим образом. ‘~~> Change this
стандартная , на лист? По тому разными макросами остаютсяObject LibraryКроме этой задачи
перенести данные просто работы вручную и
excelworld.ru
перенос данных из excel в шаблон ворд (Макросы/Sub)
‘XL.DisplayAlerts = False копировать в соответствующие200?’200px’:»+(this.scrollHeight+5)+’px’);»>If Список_мероприятий.ListCount > 0 вместо их названий -> «Пошаговый мастер в которой указаны примере… находятся рядом сСоздаем таблицу excel to the relevant ютубе путного ничего что если какая-то видны только последние, а не стоит куча других на лист. Код
выложите сюда в ‘XL.Save ‘XL.DisplayAlerts = листы экселя (реестр Then (см. Var1.png, обведено слияния»). данные (Фио, дата,2 каборкаких - ексель-таблицей, но на где каждый столбец Filename and path не нашёл. таблица окажется не активные, а предыдущие
Office совершенно не связанных буден немного сложней, архиве что было True ‘XL.Quit ‘ нарушений) дополнением вWith .Tables(3) зеленым).gilenok
подписант 1, подписант в свойствах поля,наверное, любом месте компа соответствует определенному полю strPath = ThisWorkbook.PathУ самого возникла нужной и будет где-то прячутся.. с программированием. прыгая но полученные данные и что стало ‘ ‘ NV.Save
последующую пустую строку.For J =Небольшое замечание:: Если договор нужно 2, и т.д.).
надо добавить код/маску…. в акте, а + «» + мысль реализовать идея
удалена, то дляAlex77755aVlad55 туда сюда уже доступней. после обработки. ‘ NV.Select ‘пример таблица а 0 To Список_мероприятий.ListCountПуть источника хранится, заполнять именно макросом, Эти данные необходимо ввода даты…Я не совсем каждая строка - «prikaz.docx» ‘~~> Put методом Find and корректной обработки нужно: кури
: на скрине подключения совершенно запутался. иДобавлено через 38 минутПосли этого вопросы NV.Tables(1).Cell(1, 1).Select Application.DisplayAlerts кодом нарушения 1.1.х — 1 как абсолютный, т.е., то вставляете в подставить в документEducatedFool
понял о чем отдельному акту (см. the acutal file Replace. применять разные методыЧто-то не вкладыватся не видно. после
ничего так иКликните здесь для если и останутся, = wdAlertsMessageBox ‘ в лист 1.1,s = Split(Список_мероприятий.List(J), при перемещении этих нужные места шаблона word (Соглашение).: Оля, если есть здесь идет речь. рисунок 2). Вызываем name here without
Какие еще есть привязки ссылка под слово.. переоткрытия документа ворд не работает. что просмотра всего текста то не много MsgBox «OK», 64, с кодом 2.1.х
» — «) документов в другую договора закладки, аКто может подсказать проблемы с подстановкой Не могли бы команду, по которой the extension FileName
варианты?aVlad55aVlad55 подключение слетает. ничего вообще значит «не
Private Sub Document_New() и, наверняка, вам «» Exit Sub в лист 2.1.
.Cell(.Rows.Count, 1).Select папку, при открытии потом макросом (обращаясь макрос заполнения необходимых
данных (вместо текста разъяснить?можете почитать для генерируется комплект актов = «prikaz.docx» SetСпасибо.
: да, все всегда
: алекс. нащел интересное не понимаю уже. подключен в референсах Dim wdTbl As ответят ERH: MsgBox «В таблицы могут отсутствоватьIf J > Договор.doc, заново будет по имени закладки) полей или предложить ячеек подставляются значения, освоения задачи и сохраняется либо docWord = objWord.Documents.Open(FileName:=strPath,Alex77755 заполняются. в крайнем решение по копированиюAlex77755 эксель»? где он Word.Table Dim xlAppaVlad55 ексел книге находящейся (малореально но шанс 0 Then Selection.InsertRowsBelow
запрошен путь к на это место иное решение для или наоборот),Замена меток в в один документ
ReadOnly:=True) objWord.Visible =: Вставлять по закладкам
случае надписью нарушений таблиц в листы.
: Обрезало почему-то..
должен быть подключен ' As Excel.Application: я дал код,
рядом нет листа без нарушений есть).
1
источнику. вставляете свои данные. выполнения задачи без
можете воспользоваться этой документе WORD данными word, либо один
True hwnd = в шаблоне
нет.
Таблицы из WordНичего в референсах
и как? при
Dim xlWb '
который по идее
BD!», vbCritical, «Ошибка»Если кто может.Cell(J + 3,
Сейчас сохранен путь: (вместо закладок можно слияния? надстройкой для заполнения из EXCEL акт в один
excelworld.ru
Заполнение книги Excel данными из документа Word
FindWindow(vbNullString, FileName &Alex77755
да, первый лист 2010 в Excel подключать не надо стандартных установках офиса As Excel.Workbook Dim должен работать. но End Sub помогите. все что 1).Range.Text = s(0) C:1233…, т.е. если использовать поля, какВ Книге excel документов Word изГость файл. » [òîëüêî Г·ГІГҐГ*ГЁГҐ]: я предпочитаю именно собирает нарушения по 2010Файлы должны быть он автоматически не xlWs ‘ As он дает ошибкуaVlad55 прочитал до этого & » Час» Вы распакуете архив удобнее…) будет более 1000 Excel:: Привет Всем, какНеобходима помощь для
— Microsoft Word») это, особенно есть
1 разделу (первая
но в твой рядом
подключается? Excel.Worksheet Dim intTbl при запуске. почему: Алекс, я к обрабатывает 1 таблицу
.Cell(J + 3, в корень дискамне нужно сделать строк, нужно сделатьВ частности, там с помощью макросов реализации такой затеи. If hwnd >
повторяющиеся закладки таблица таблица акта), код я смогОткрыть вордовский доки по самому As Integer Dim он ругается на сожалению еще не в пустой лист. 2).Select
С:, то пути так но я более 1000 соглашений
есть опция (переключатель), заполнить шаблон Word Чувствую что нужно 0 Then SetForegroundWindowavenger24 второй лист по вставитьАlt+F8 — Document_New макросу. у меня rCount As Integer не оперделенный тип на столько хорошо а у меняSelection.ParagraphFormat.Alignment = wdAlignParagraphLeft переназначать не придется, не понимаю как таким образом. подставлять в шаблон данными из Excel-табличке? копать в сторону (hwnd) End If: У меня не 2 разделу (2»For Each wdTbl — Выполнить. конкретная задача - Dim cCount As в экселе, если знаю VBA чтоб еще и в.Cell(J + 3, т.к. все и это сделать можетеkrosav4ig Word текст ячейкиGuest VBA. Буду благодарен vr_1 = Range(«c2»).Value получалось сделать 2 таблица) и т.д. In ActiveDocument.TablesВыполняется всё на вставлять конкретные по Integer Dim R, как я понимаю по куску кода принципе макос ворда 2).Range.Text = s(1) так увидится. прислать пример: Здравствуйте (16.10.2012) вместо её: А как с описанию алгоритма работы centr_1 = Range(«c3»).Value закладки с одинаковым всего 13-15 разделов.If InStr(LCase(wdTbl.Cell(2, 1).Range.Text), 1 лист. очередности таблицы ворда C, L Set
там все определено? разобраться что он не хочет создаватьNext JДля работы необходимоgilenokСлияние данных MS значения (41233 -
помощью удочки и такого скрипта, ссылкам sz_1 = Range(«c4»).Value именем.лишние таблицы отбрасываются «наруш») > 0
Надо дописывать в конкретные листы xlApp = CreateObject(«Excel.Application») макрос запускаю из делает. документ экселя.End With открыть «C:1233Var1 (слияние)Договор.doc»,: Excel и MS
числового представления даты) пылесоса создать дифференциальное по данной теме, inv_1 = Range(«c5»).ValueДа и сами по наличию слова Then»aVlad55 книги экселя, причем xlApp.Visible = True ворда. офис 2007.
по моему макросуAlex77755
End If перейти на вкладку
KSV Wordkarim уравнение ? образцам и прочей docWord.Range.Text = Replace$(docWord.Range.Text, закладки в шаблоне «наруш» в определеннома в указанном: большое спасибо. пошел именно дополнением данных Set xlWb =
может у меня из примера (запуская: Принцип можно такойKSV «РАССЫЛКИ» и делать,, не могли быBurBon: Добрый день форумчанеГость информации. Есть опыт «vr_1», vr_1) docWord.Range.Text текста не имели.
месте. ругается на «.Cell». курить ваш пример. на том листе. xlApp.Workbooks.Add rCount =
что-то не подключено майн и р4) применить:: нажать кнопку в что нужно… прислать пример: Добрый день!Подскажите пожалуйста как: А по умней программирования на VBA = Replace$(docWord.Range.Text, «centr_1»,Это если нево всяком случае не подскажешь почему? у вас смотрю как можно это 1 cCount = в офисе? в получаю ошибку «User-definedSub СБОРКА_ТАБЛИЦЫ() MyPath
ячейке H1Вариант 2 (сKSV
По моему я передать данные из можно что-нить сказать? для excel, программирования centr_1) docWord.Range.Text =
закладки, а просто
сейчас так стоити остается важный не требует экселя сделать? в обоих
1 L = смыле примеры документов type not defined» = ActiveDocument.Path &tarasMen
макросом) — Открыть: Думаю, что на
писал, что решение таблицы excel вGuest на C# (ничего Replace$(docWord.Range.Text, «sz_1», sz_1) условное слово поставить задача. причем в вопрос копирования данных в референсах. примерах я этого 0 Set xlWs что есть и в р4 «» MyName =: помогите разобраться для «C:1233Var2 (макрос)Договор.xls» и
данном этапе, Вам интересует без слияния. документ Word.: Можно ;-) общего с MS docWord.Range.Text = Replace$(docWord.Range.Text, и потом его примере видно что не в новыйхоть что-то сдвинулось. не смог увидеть,
= xlWb.Worksheets(1) With
что нужно? илис выделением желтым
Dir(MyPath & «*.xls») своей таблицы сделать, нажать кнопку «Формировать». проще воспользоваться стандартнымиTimShaЗадача в чем,Вы иронию поняли office). «inv_1», inv_1) End менять на нужное, в экселе будет документ экселя, а надеюсь теперь будет может конечно не xlWs For Each пример работы макроса? «Sub P4(ByRef ÂðÒàáëèöà If Len(MyName) = чето совсем неЗаполненные договоры будут средствами слияния документов: В таком случае, Есть вордовский документ или просто обиделись?..ViterAlex SubТакой код в то да! больше столбцов которые продолжением существующего. проще разобраться дальше. до конца разобрался wdTbl In ActiveDocument.TablesAlex77755 As Word.Table, Èìÿ 0 Then MsgBox воткну что и сохранены в той — это полностью без вашего участия, (Форма для заполненияЧто бы кто-нибудь: Это называется слиянием. Верхнем колонтитуле меняетavenger24 будут дозаполняться вручнуюи таки встаетнесколько доработок которые в коде. ‘*************************************************************************************************** »»»» этот: что есть и As String)» и «Рядом нет книги как же папке, где решает Вашу задачу требования выполняют фрилансеры «Рыба»), в которую что нибудь понял, Берётся источник данных, шрифт и в
: это я обычно уже после копирования. вопрос об исключении уже вижу нужны:
какие вообще условия блок вставляет как что нужно синим «Ýêñåëü As ексел», vbCritical, «Ошибка»aVlad55 лежит Договор.xls. и дает некоторые в соответствующем разделе. вносятся данные надо понятней объяснить, поля данных поставляются некоторых местах меняет и применяю (дата акта, какой копирования заголовков таблиц.
эксель документ должен работы макроса? файлы объекты ‘ wdTbl.Range.CopyaVlad55 New Excel.Application». после Exit Sub End: Добрый день.Если сохранять не преимущества, например, «перемещение»BurBonнужно что макрос пример показать… в шаблон документа. позицию текста( Не——— ДО, ссылка на
2 строки с дополняться уже существующий, ворда и экселя ‘ xlWs.Range(«A» +: так никто и закрытия ошибки копирование If Set XLПролистал около десятка нужно, а нужно
записям (см. Var1.png,: Спасибо за помощь) формировал новый документЮрий М Генерируются документы. Вкладка
подскажите как этогоа вариантов около акт и т.д.
частично объединенными ячейками. а не создаваться должны лежать в
CStr(rCount)).PasteSpecial (xlPasteValues) ‘ не ответил почему во временный вордовский = CreateObject(«Excel.Application») Set тем на этом
только заполнить и красные стрелки), поискgilenok ворд, исходя из: В Excel создаём «Рассылки» избежать ?я не 10—это то, что
чего нет в где-то видел подобную
новый при каждом одной папке, где-то rCount = rCount не создается экселевская документ происходит, в WB = XL.Application.Workbooks.Open(MyPath форуме и еще показать — закомментируйте нужного договора по
: во вложение обработка шаблона и заполнял таблицу. Нечто вродеTaras A применяю АПИ функции знаю я
таблице ворда) тему но не
запуске, не заносить должно быть точно
+ wdTbl.Rows.Count ‘ книга.
эксель нет.
& MyName) XL.Application.Visible на нескольких, так
(или удалите) строку: любым критериям, фильтры
работает не так
бы необходимые поля Базы Данных (БД).: Разобрался с данной типаshanemac51разброс по листам
могу найти. в эксель шапку прописан путь к
cCount = wdTbl.Columns.Countвыкладываю примеры файлов.ну и остаются = True On и не смог200?’200px’:»+(this.scrollHeight+5)+’px’);»>WD.SaveAs f & r (полезно, например, если как нужно. задачаЗаранее спасибо. Идём в Word. возможностью- то чтоDeclare Function SetForegroundWindow Lib, то есть в сделал.Добавлено через 25 минут таблицы (если не экселевскому файлу или ‘*************************************************************************************************** »»»’ этотAlex77755 вопросы как продолжить Error GoTo ERH найти более менее
gilenok нужно распечатать только стоит выделять неЮрий М Там: Сервис -
надо. Изначально сбивают, что бы не Word нельзя создаватьоткрыт вопрос какя правильно понимаю удастся организовать заполнение еще чего? блок вставляет поячеечно
: Это значит, что
просмотр начального вордовского Set IST = полного решения для: KSV сложность в те договоры, «Заказ-наряд» одну строку для: Можно обойтись без Письма и рассылки с толку списки
зависеть от зоопарка 1 закладку в
работать с конкретным что в твоем
ворда без шапки),обрабатываться должны разные на лист.Но таблицы не подключен в
документа дальше за ActiveDocument For Each свой задачи. Сам
том что таблицы на которые оформил переноса в word
макросов в Excel. — Мастер слияния.
получателей, письма и компов(разные версии windows/ms 2 местах ?
файлом (например E:книга22.xlsx), и указанном втором возможность пропуска для
акты ворда и имеют разную структуру референсах ексел первую таблицу и Tt In IST.Tables
больше «железячник», но могут меняться и Сусанин И.П.) и а любое количество Посмотрите в Word: И никаких макросов. другие названия команд. office) в службах
Придётся создавать 2
а не открывать макросе временные документы переноса некоторых таблиц работы макроса заполнять и получается неЛучше использовать позднее копирование второй (третьей, For Each R
руководство поставило задачу должны переносится полностью т.д.
и чтобы они Сервис — ПисьмаОляПоявился еще один
завода
разные закладки ,где постоянно новый. и не создаются? и
(например если в добавлением один файл красиво. »»»’ Может связывание(если макрос должен четветой) найденной таблицы In Tt.Rows For автоматизировать сведение в
во вложении чутьЕсли Вы не попадали в определенную и рассылки -
: добрый вечер, подскажите вопрос. Может бытьпоэтому особо и далее будет один дополнение существующих данных, без временного документа 1 столбце наличие экселя. проще вставлять каждую работать на разных
в следующие лист Each C In общий реестр данные изменил данную таблицу( разобрались, как этим
таблицу в ворд Слияние. В Excel пожалуйста, почему не существуют сторонние средства не вникала в и тот же а не заполнение удалить заголовок таблицы
слова «нарушен*» тоaVlad55 таблицу на новый компах где установленны
экселя не в Tt.Columns ‘ тут из актов нарушений. тоесть в файл пользоваться — см. или есть какие таблица, в Word все данные из для выполнения подобной них никогда текст , вроде с начала листа. будет затруднительно?
переносится, при отсутствии: «Надо подключить библиотеку
лист? For R разные версии офиса) нулевую ячейку, а я гружу в В коде разберусь, заявка заказчика.docx должна Var1.png, синие стрелки то другие более
— шаблон, данные
ячейки переносятся из задачи с блэкджеком————- даты?Добавлено через 3 минуты
CyberForum.ru
Заполнение данными шаблона Word
Alex77755 — нет), ну
объектов программы Excel: = 1 ToВот верхняя часть продолжением заполнения. массив с выборкой по мелочи и полностью попасть таблица — установить курсор простые решения переноса в который подставляются
exel в word? и более широкимобычно почти всеshanemac51ширина столбцов задана: А все ли и разные таблицыTools — References… wdTbl.Rows.Count L =
макросаAlex77755 по условию next образцу сделать скорее
с первого листа ввода в нужное
определенных строк в
из выбранной строки и числовое значение, функционалом?
отчеты(более 90%) формирую, здравствуйте. Вот попробовал в файле книга22. таблицы всегда заполняются?
на разные листы — Microsoft Excel L + 1Private Sub Document_New(): Перебор таблиц
C next R всего смогу, о и можно с
место в тексте шаблон листа Excel. Вопросы например, 16.10.2012 переноситсяTaras A программно а НТМ—формате
такой вариант , вставляемые данныеИх же надо
как у меня
Object Library. For C = Dim wdTbl As
For Each Tt Set SH = написать самому не заменой как удобно. (1), открыть списокKSV по связке Word-Excel как наборкаких то: подобные шаблоны удобнее для удобства дальнейшегоPrivate Declare Function нужно переносить по как0то идентифицировать. Какую в образце.
Это позволяет проще 1 To wdTbl.Rows(R).Cells.Count Word.Table Dim xlApp In IST.Tables next WB.Worksheets(«БД»)’ выбираю нужный получается. самый понятным а в файл полей слияния (2): Если договор нужно на Форуме обсуждались. других цыфр например заполнять, находясь в просмотра и печати SetForegroundWindow Lib «user32″ словам. таблицу на какойеще раз большое писать код, т.к. .Cells(L, C) = ‘ As Excel.ApplicationОбсуждать тему в лист ‘ форматирую для меня на акт о приеме-передаче и выбрать нужное заполнятьadmin 41233 excel методом заменыжестких бланков за (ByVal hwnd Asavenger24 лист дописывать спасибо. если есть после того, как Replace(Replace(wdTbl.Cell(R, C).Range.Text, Chr(7), Dim xlWb ‘ таком формате просто With SH .Select данный момент оказался электрооборудования.docx должна попасть поле.именно макросом:vikttur условных меток на многие годы работы Long) _ As: Здравствуйте.не нужно. возможность помочь по ставим точку, появляются «»), Chr(13), «») As Excel.Workbook Dim глупо: можно долго .Cells.ClearContents .Cells.NumberFormat = этот код Экспорт таблица со второгоЧтобы распечатать (или, то вставляете вВот тут есть подробно: Ячейка имеет формат некий текст —почти не было Long Private Declare
Буду писать программку,Просто начинать считывать указанным выше вопросам
всплывающие подсказки.
Next C Next xlWs ‘ As и нудно клацить «@» .Cells.Interior.ColorIndex = таблицы из Word
листа и самое поместить в другой нужные места шаблона
CyberForum.ru
про Слияние:
Содержание
- Применение инструментов заполнения
- Способ 1: встроенный объект для ввода данных Excel
- Способ 2: создание пользовательской формы
- Вопросы и ответы
Для облегчения ввода данных в таблицу в Excel можно воспользоваться специальными формами, которые помогут ускорить процесс заполнения табличного диапазона информацией. В Экселе имеется встроенный инструмент позволяющий производить заполнение подобным методом. Также пользователь может создать собственный вариант формы, которая будет максимально адаптирована под его потребности, применив для этого макрос. Давайте рассмотрим различные варианты использования этих полезных инструментов заполнения в Excel.
Применение инструментов заполнения
Форма заполнения представляет собой объект с полями, наименования которых соответствуют названиям колонок столбцов заполняемой таблицы. В эти поля нужно вводить данные и они тут же будут добавляться новой строкой в табличный диапазон. Форма может выступать как в виде отдельного встроенного инструмента Excel, так и располагаться непосредственно на листе в виде его диапазона, если она создана самим пользователем.
Теперь давайте рассмотрим, как пользоваться этими двумя видами инструментов.
Способ 1: встроенный объект для ввода данных Excel
Прежде всего, давайте узнаем, как применять встроенную форму для ввода данных Excel.
- Нужно отметить, что по умолчанию значок, который её запускает, скрыт и его нужно активировать. Для этого переходим во вкладку «Файл», а затем щелкаем по пункту «Параметры».
- В открывшемся окне параметров Эксель перемещаемся в раздел «Панель быстрого доступа». Большую часть окна занимает обширная область настроек. В левой её части находятся инструменты, которые могут быть добавлены на панель быстрого доступа, а в правой – уже присутствующие.
В поле «Выбрать команды из» устанавливаем значение «Команды не на ленте». Далее из списка команд, расположенного в алфавитном порядке, находим и выделяем позицию «Форма…». Затем жмем на кнопку «Добавить».
- После этого нужный нам инструмент отобразится в правой части окна. Жмем на кнопку «OK».
- Теперь данный инструмент располагается в окне Excel на панели быстрого доступа, и мы им можем воспользоваться. Он будет присутствовать при открытии любой книги данным экземпляром Excel.
- Теперь, чтобы инструмент понял, что именно ему нужно заполнять, следует оформить шапку таблицы и записать любое значение в ней. Пусть табличный массив у нас будет состоять из четырех столбцов, которые имеют названия «Наименование товара», «Количество», «Цена» и «Сумма». Вводим данные названия в произвольный горизонтальный диапазон листа.
- Также, чтобы программа поняла, с каким именно диапазонам ей нужно будет работать, следует ввести любое значение в первую строку табличного массива.
- После этого выделяем любую ячейку заготовки таблицы и щелкаем на панели быстрого доступа по значку «Форма…», который мы ранее активировали.
- Итак, открывается окно указанного инструмента. Как видим, данный объект имеет поля, которые соответствуют названиям столбцов нашего табличного массива. При этом первое поле уже заполнено значением, так как мы его ввели вручную на листе.
- Вводим значения, которые считаем нужными и в остальные поля, после чего жмем на кнопку «Добавить».
- После этого, как видим, в первую строку таблицы были автоматически перенесены введенные значения, а в форме произошел переход к следующему блоку полей, который соответствуют второй строке табличного массива.
- Заполняем окно инструмента теми значениями, которые хотим видеть во второй строке табличной области, и снова щелкаем по кнопке «Добавить».
- Как видим, значения второй строчки тоже были добавлены, причем нам даже не пришлось переставлять курсор в самой таблице.
- Таким образом, заполняем табличный массив всеми значениями, которые хотим в неё ввести.
- Кроме того, при желании, можно производить навигацию по ранее введенным значениям с помощью кнопок «Назад» и «Далее» или вертикальной полосы прокрутки.
- При необходимости можно откорректировать любое значение в табличном массиве, изменив его в форме. Чтобы изменения отобразились на листе, после внесения их в соответствующий блок инструмента, жмем на кнопку «Добавить».
- Как видим, изменение сразу произошло и в табличной области.
- Если нам нужно удалить, какую-то строчку, то через кнопки навигации или полосу прокрутки переходим к соответствующему ей блоку полей в форме. После этого щелкаем по кнопке «Удалить» в окошке инструмента.
- Открывается диалоговое окно предупреждения, в котором сообщается, что строка будет удалена. Если вы уверены в своих действиях, то жмите на кнопку «OK».
- Как видим, строчка была извлечена из табличного диапазона. После того, как заполнение и редактирование закончено, можно выходить из окна инструмента, нажав на кнопку «Закрыть».
- После этого для предания табличному массиву более наглядного визуального вида можно произвести форматирование.
Способ 2: создание пользовательской формы
Кроме того, с помощью макроса и ряда других инструментов существует возможность создать собственную пользовательскую форму для заполнения табличной области. Она будет создаваться прямо на листе, и представлять собой её диапазон. С помощью данного инструмента пользователь сам сможет реализовать те возможности, которые считает нужными. По функционалу он практически ни в чем не будет уступать встроенному аналогу Excel, а кое в чем, возможно, превосходить его. Единственный недостаток состоит в том, что для каждого табличного массива придется составлять отдельную форму, а не применять один и тот же шаблон, как это возможно при использовании стандартного варианта.
- Как и в предыдущем способе, прежде всего, нужно составить шапку будущей таблицы на листе. Она будет состоять из пяти ячеек с именами: «№ п/п», «Наименование товара», «Количество», «Цена», «Сумма».
- Далее нужно из нашего табличного массива сделать так называемую «умную» таблицу, с возможностью автоматического добавления строчек при заполнении соседних диапазонов или ячеек данными. Для этого выделяем шапку и, находясь во вкладке «Главная», жмем на кнопку «Форматировать как таблицу» в блоке инструментов «Стили». После этого открывается список доступных вариантов стилей. На функционал выбор одного из них никак не повлияет, поэтому выбираем просто тот вариант, который считаем более подходящим.
- Затем открывается небольшое окошко форматирования таблицы. В нем указан диапазон, который мы ранее выделили, то есть, диапазон шапки. Как правило, в данном поле заполнено все верно. Но нам следует установить галочку около параметра «Таблица с заголовками». После этого жмем на кнопку «OK».
- Итак, наш диапазон отформатирован, как «умная» таблица, свидетельством чему является даже изменение визуального отображения. Как видим, помимо прочего, около каждого названия заголовка столбцов появились значки фильтрации. Их следует отключить. Для этого выделяем любую ячейку «умной» таблицы и переходим во вкладку «Данные». Там на ленте в блоке инструментов «Сортировка и фильтр» щелкаем по значку «Фильтр».
Существует ещё один вариант отключения фильтра. При этом не нужно даже будет переходить на другую вкладку, оставаясь во вкладке «Главная». После выделения ячейки табличной области на ленте в блоке настроек «Редактирование» щелкаем по значку «Сортировка и фильтр». В появившемся списке выбираем позицию «Фильтр».
- Как видим, после этого действия значки фильтрации исчезли из шапки таблицы, как это и требовалось.
- Затем нам следует создать саму форму ввода данных. Она тоже будет представлять собой своего рода табличный массив, состоящий из двух столбцов. Наименования строк данного объекта будут соответствовать именам столбцов основной таблицы. Исключение составляют столбцы «№ п/п» и «Сумма». Они будут отсутствовать. Нумерация первого из них будет происходить при помощи макроса, а расчет значений во втором будет производиться путем применения формулы умножения количества на цену.
Второй столбец объекта ввода данных оставим пока что пустым. Непосредственно в него позже будут вводиться значения для заполнения строк основного табличного диапазона.
- После этого создаем ещё одну небольшую таблицу. Она будет состоять из одного столбца и в ней разместится список товаров, которые мы будем выводить во вторую колонку основной таблицы. Для наглядности ячейку с заголовком данного перечня («Список товаров») можно залить цветом.
- Затем выделяем первую пустую ячейку объекта ввода значений. Переходим во вкладку «Данные». Щелкаем по значку «Проверка данных», который размещен на ленте в блоке инструментов «Работа с данными».
- Запускается окно проверки вводимых данных. Кликаем по полю «Тип данных», в котором по умолчанию установлен параметр «Любое значение».
- Из раскрывшихся вариантов выбираем позицию «Список».
- Как видим, после этого окно проверки вводимых значений несколько изменило свою конфигурацию. Появилось дополнительное поле «Источник». Щелкаем по пиктограмме справа от него левой клавишей мыши.
- Затем окно проверки вводимых значений сворачивается. Выделяем курсором с зажатой левой клавишей мыши перечень данных, которые размещены на листе в дополнительной табличной области «Список товаров». После этого опять жмем на пиктограмму справа от поля, в котором появился адрес выделенного диапазона.
- Происходит возврат к окошку проверки вводимых значений. Как видим, координаты выделенного диапазона в нем уже отображены в поле «Источник». Кликаем по кнопке «OK» внизу окна.
- Теперь справа от выделенной пустой ячейки объекта ввода данных появилась пиктограмма в виде треугольника. При клике на неё открывается выпадающий список, состоящий из названий, которые подтягиваются из табличного массива «Список товаров». Произвольные данные в указанную ячейку теперь внести невозможно, а только можно выбрать из представленного списка нужную позицию. Выбираем пункт в выпадающем списке.
- Как видим, выбранная позиция тут же отобразилась в поле «Наименование товара».
- Далее нам нужно будет присвоить имена тем трем ячейкам формы ввода, куда мы будем вводить данные. Выделяем первую ячейку, где уже установлено в нашем случае наименование «Картофель». Далее переходим в поле наименования диапазонов. Оно расположено в левой части окна Excel на том же уровне, что и строка формул. Вводим туда произвольное название. Это может быть любое наименование на латинице, в котором нет пробелов, но лучше все-таки использовать названия близкие к решаемым данным элементом задачам. Поэтому первую ячейку, в которой содержится название товара, назовем «Name». Пишем данное наименование в поле и жмем на клавишу Enter на клавиатуре.
- Точно таким же образом присваиваем ячейке, в которую будем вводить количество товара, имя «Volum».
- А ячейке с ценой – «Price».
- После этого точно таким же образом даем название всему диапазону из вышеуказанных трех ячеек. Прежде всего, выделим, а потом дадим ему наименование в специальном поле. Пусть это будет имя «Diapason».
- После последнего действия обязательно сохраняем документ, чтобы названия, которые мы присвоили, смог воспринимать макрос, созданный нами в дальнейшем. Для сохранения переходим во вкладку «Файл» и кликаем по пункту «Сохранить как…».
- В открывшемся окне сохранения в поле «Тип файлов» выбираем значение «Книга Excel с поддержкой макросов (.xlsm)». Далее жмем на кнопку «Сохранить».
- Затем вам следует активировать работу макросов в своей версии Excel и включить вкладку «Разработчик», если вы это до сих пор не сделали. Дело в том, что обе эти функции по умолчанию в программе отключены, и их активацию нужно выполнять принудительно в окне параметров Excel.
- После того, как вы сделали это, переходим во вкладку «Разработчик». Кликаем по большому значку «Visual Basic», который расположен на ленте в блоке инструментов «Код».
- Последнее действие приводит к тому, что запускается редактор макросов VBA. В области «Project», которая расположена в верхней левой части окна, выделяем имя того листа, где располагаются наши таблицы. В данном случае это «Лист 1».
- После этого переходим к левой нижней области окна под названием «Properties». Тут расположены настройки выделенного листа. В поле «(Name)» следует заменить кириллическое наименование («Лист1») на название, написанное на латинице. Название можно дать любое, которое вам будет удобнее, главное, чтобы в нем были исключительно символы латиницы или цифры и отсутствовали другие знаки или пробелы. Именно с этим именем будет работать макрос. Пусть в нашем случае данным названием будет «Producty», хотя вы можете выбрать и любое другое, соответствующее условиям, которые были описаны выше.
В поле «Name» тоже можно заменить название на более удобное. Но это не обязательно. При этом допускается использование пробелов, кириллицы и любых других знаков. В отличие от предыдущего параметра, который задает наименование листа для программы, данный параметр присваивает название листу, видимое пользователю на панели ярлыков.
Как видим, после этого автоматически изменится и наименование Листа 1 в области «Project», на то, которое мы только что задали в настройках.
- Затем переходим в центральную область окна. Именно тут нам нужно будет записать сам код макроса. Если поле редактора кода белого цвета в указанной области не отображается, как в нашем случае, то жмем на функциональную клавишу F7 и оно появится.
- Теперь для конкретно нашего примера нужно записать в поле следующий код:
Sub DataEntryForm()
Dim nextRow As Long
nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row
With Producty
If .Range("A2").Value = "" And .Range("B2").Value = "" Then
nextRow = nextRow - 1
End If
Producty.Range("Name").Copy
.Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
.Cells(nextRow, 3).Value = Producty.Range("Volum").Value
.Cells(nextRow, 4).Value = Producty.Range("Price").Value
.Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value
.Range("A2").Formula = "=IF(ISBLANK(B2), """", COUNTA($B$2:B2))"
If nextRow > 2 Then
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A" & nextRow)
Range("A2:A" & nextRow).Select
End If
.Range("Diapason").ClearContents
End With
End Sub
Но этот код не универсальный, то есть, он в неизменном виде подходит только для нашего случая. Если вы хотите его приспособить под свои потребности, то его следует соответственно модифицировать. Чтобы вы смогли сделать это самостоятельно, давайте разберем, из чего данный код состоит, что в нем следует заменить, а что менять не нужно.
Итак, первая строка:
Sub DataEntryForm()
«DataEntryForm» — это название самого макроса. Вы можете оставить его как есть, а можете заменить на любое другое, которое соответствует общим правилам создания наименований макросов (отсутствие пробелов, использование только букв латинского алфавита и т.д.). Изменение наименования ни на что не повлияет.
Везде, где встречается в коде слово «Producty» вы должны его заменить на то наименование, которое ранее присвоили для своего листа в поле «(Name)» области «Properties» редактора макросов. Естественно, это нужно делать только в том случае, если вы назвали лист по-другому.
Теперь рассмотрим такую строку:
nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row
Цифра «2» в данной строчке означает второй столбец листа. Именно в этом столбце находится колонка «Наименование товара». По ней мы будем считать количество рядов. Поэтому, если в вашем случае аналогичный столбец имеет другой порядок по счету, то нужно ввести соответствующее число. Значение «End(xlUp).Offset(1, 0).Row» в любом случае оставляем без изменений.
Далее рассмотрим строку
If .Range("A2").Value = "" And .Range("B2").Value = "" Then
«A2» — это координаты первой ячейки, в которой будет выводиться нумерация строк. «B2» — это координаты первой ячейки, по которой будет производиться вывод данных («Наименование товара»). Если они у вас отличаются, то введите вместо этих координат свои данные.
Переходим к строке
Producty.Range("Name").Copy
В ней параметр «Name» означат имя, которое мы присвоили полю «Наименование товара» в форме ввода.
В строках
.Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
.Cells(nextRow, 3).Value = Producty.Range("Volum").Value
.Cells(nextRow, 4).Value = Producty.Range("Price").Value
.Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value
наименования «Volum» и «Price» означают названия, которые мы присвоили полям «Количество» и «Цена» в той же форме ввода.
В этих же строках, которые мы указали выше, цифры «2», «3», «4», «5» означают номера столбцов на листе Excel, соответствующих колонкам «Наименование товара», «Количество», «Цена» и «Сумма». Поэтому, если в вашем случае таблица сдвинута, то нужно указать соответствующие номера столбцов. Если столбцов больше, то по аналогии нужно добавить её строки в код, если меньше – то убрать лишние.
В строке производится умножение количества товара на его цену:
.Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value
Результат, как видим из синтаксиса записи, будет выводиться в пятый столбец листа Excel.
В этом выражении выполняется автоматическая нумерация строк:
If nextRow > 2 Then
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A" & nextRow)
Range("A2:A" & nextRow).Select
End If
Все значения «A2» означают адрес первой ячейки, где будет производиться нумерация, а координаты «A» — адрес всего столбца с нумерацией. Проверьте, где именно будет выводиться нумерация в вашей таблице и измените данные координаты в коде, если это необходимо.
В строке производится очистка диапазона формы ввода данных после того, как информация из неё была перенесена в таблицу:
.Range("Diapason").ClearContents
Не трудно догадаться, что («Diapason») означает наименование того диапазона, который мы ранее присвоили полям для ввода данных. Если вы дали им другое наименование, то в этой строке должно быть вставлено именно оно.
Дальнейшая часть кода универсальна и во всех случаях будет вноситься без изменений.
После того, как вы записали код макроса в окно редактора, следует нажать на значок сохранения в виде дискеты в левой части окна. Затем можно его закрывать, щелкнув по стандартной кнопке закрытия окон в правом верхнем углу.
- После этого возвращаемся на лист Excel. Теперь нам следует разместить кнопку, которая будет активировать созданный макрос. Для этого переходим во вкладку «Разработчик». В блоке настроек «Элементы управления» на ленте кликаем по кнопке «Вставить». Открывается перечень инструментов. В группе инструментов «Элементы управления формы» выбираем самый первый – «Кнопка».
- Затем с зажатой левой клавишей мыши обводим курсором область, где хотим разместить кнопку запуска макроса, который будет производить перенос данных из формы в таблицу.
- После того, как область обведена, отпускаем клавишу мыши. Затем автоматически запускается окно назначения макроса объекту. Если в вашей книге применяется несколько макросов, то выбираем из списка название того, который мы выше создавали. У нас он называется «DataEntryForm». Но в данном случае макрос один, поэтому просто выбираем его и жмем на кнопку «OK» внизу окна.
- После этого можно переименовать кнопку, как вы захотите, просто выделив её текущее название.
В нашем случае, например, логично будет дать ей имя «Добавить». Переименовываем и кликаем мышкой по любой свободной ячейке листа.
- Итак, наша форма полностью готова. Проверим, как она работает. Вводим в её поля необходимые значения и жмем на кнопку «Добавить».
- Как видим, значения перемещены в таблицу, строке автоматически присвоен номер, сумма посчитана, поля формы очищены.
- Повторно заполняем форму и жмем на кнопку «Добавить».
- Как видим, и вторая строка также добавлена в табличный массив. Это означает, что инструмент работает.
Читайте также:
Как создать макрос в Excel
Как создать кнопку в Excel
В Экселе существует два способа применения формы заполнения данными: встроенная и пользовательская. Применение встроенного варианта требует минимум усилий от пользователя. Его всегда можно запустить, добавив соответствующий значок на панель быстрого доступа. Пользовательскую форму нужно создавать самому, но если вы хорошо разбираетесь в коде VBA, то сможете сделать этот инструмент максимально гибким и подходящим под ваши нужды.
В предыдущих статьях цикла «Автоматизация заполнения документов» я рассказал о том, как сформировать пользовательский интерфейс приложения, организовать проверку вводимых данных и получить число прописью без использования кода VBA. В этой, заключительной статье речь пойдет о волшебстве — переносе всех необходимых значений из рабочей книги Excel в документ Word. Давайте я покажу Вам то, что должно получиться в итоге:
Описание механизма
Для начала в общих чертах опишу, каким именно образом будет происходить перенос данных в документ Word. Прежде всего, нам понадобится шаблон документа Word, содержащий всю разметку, таблицы и ту часть текста, которая будет оставаться неизменной. В этом шаблоне необходимо определить места, в которые будут подставлены значения из рабочей книги Excel, — удобнее всего это сделать с помощью закладок. После этого необходимо упорядочить данные Excel таким образом, чтобы обеспечить соответствие шаблону Word, ну и в последнюю очередь — написать саму процедуру переноса на VBA.
Итак, обо всем по порядку.
Создание шаблона документа Word
Тут все предельно просто — создаем обычный документ, набираем и форматируем текст, в общем, добиваемся того, чтобы получить необходимую форму. В тех местах, куда необходимо будет подставить значения из Excel нужно создать закладки. Это делается следующим образом:
- Для удобства поддержки напечатать в нужном месте название закладки. Я еще и заключил названия в угловые скобки, так что получилось, например, вот так:
<DocumentDate>
для закладки, содержащей дату документа. - Выделить все название закладки (в моем случае вместе с угловыми скобками), перейти на вкладку «Вставка» и нажать кнопку «Закладка»:
Расположение кнопки «Вставить закладку»
- В появившемся диалоговом окне задать для закладки имя (у меня оно совпадает с тем, что написано в угловых скобках) и нажать ОК
Таким образом нужно будет создать все закладки, то есть отметить все места, куда будут вставлены данные из Excel. Получившийся файл нужно сохранить как «Шаблон MS Word» с помощью пункта меню «Файл» -> «Сохранить как…».
Подготовка данных Excel
Я решил для удобства поместить все данные, которые необходимо перенести в документ Word, на отдельном рабочем листе с названием Bookmarks
— закладки. На этом листе два столбца: в первом содержатся названия закладок (в точности так, как они названы в документе Word), а во втором — соответствующие значения, подлежащие переносу.
Часть этих значений получена напрямую из листа ввода данных, а часть — из вспомогательных таблиц, расположенных на листе Support
. В этой статье я не буду разбирать формулы, рассчитывающие нужные значения, если что-то будет непонятно — задавайте вопросы в комментариях.
На этом этапе важно правильно указать все названия закладок — от этого зависит правильность переноса данных.
Процедура переноса
А вот это — самое интересное. Существует два варианта выполнения кода переноса данных:
- Код выполняется в рабочей книге Excel, данные передаются в Word по одному значению за раз и сразу же размещаются в документе.
- Код выполняется в отдельном документе Word, все данные передаются из Excel одним пакетом.
С точки зрения скорости выполнения, особенно при большом количестве закладок, второй вариант выглядит гораздо привлекательнее, однако требует более сложных действий. Именно его я и использовал.
Вот, что необходимо сделать:
- Создать шаблон документа Word с поддержкой макросов. В этом шаблоне будет содержаться выполняемый код на VBA.
Почему нужно создать именно шаблон? Таким образом можно защитить программный код от неумышленного изменения. Дело в том, что каждый раз при открытии шаблона создается новый файл Word, сохранить который поверх существующего шаблона просто так не получится. Сам шаблон при этом остается неизменным.
- В созданный шаблон необходимо поместить программу, написанную на VBA. Для этого необходимо при редактировании шаблона нажать комбинацию клавиш Alt+F11 и ввести в открывшемся окне редактора Visual Basic код программы.
- В рабочей книге Excel написать код, вызывающий процедуру заполнения из только что созданного шаблона Word.
Текст процедуры я приводить в статье не буду — его можно легко посмотреть в файлеFillDocument.dotm
, расположенном в папке Template в архиве с примером.
Как же воспользоваться всем этим для решения именно Вашей задачи?
Понимаю, что на словах это все выглядит очень просто, но что же получается на деле? Я предлагаю Вам просто воспользоваться уже готовым вариантом. Скачайте архив с примером, в рабочей книге Excel нажмите комбинацию клавиш Alt+F11, чтобы открыть редактор Visual Basic и прочитайте все мои комментарии к программе. Для того, чтобы изменить программу под свои нужды Вам понадобится всего лишь изменить значение нескольких констант, они вынесены в самое начало программы. Весь текст программы Вы можете свободно скопировать в свой проект.
Структура архива
В архиве, приложенном к этой статье, содержится несколько файлов.
Основной файл — рабочая книга Excel с названием «Создание подтверждений». В этой рабочей книге 4 рабочих листа, из которых отображаются только два: «Input» — лист ввода данных и «Database» — архив всех введенных документов.
В папке Templates находятся шаблоны документов Word. Один из них — шаблон, содержащий программу заполнения закладок, а второй — форма для заполнения. Вы можете использовать без изменений шаблон с программой, но форму для заполнения, естественно, придется переделать в соответствии с Вашими нуждами.
Как переработать пример «под себя»?
Я рекомендую придерживаться следующей последовательности действий:
- Подготовить шаблон документа Word, который необходимо заполнить. Создать в нем все необходимые закладки и сохранить как «шаблон MS Word».
- Скопировать в папку с подготовленным шаблоном файл
FillDocument.dotm
из архива, приложенного к этой статье. Этот файл отвечает за заполнение закладок шаблона, и в нем ничего менять не нужно. - Подготовить рабочую книгу Excel для ввода данных. Вам решать, будет ли она обладать каким-либо «продвинутым» пользовательским интерфейсом и осуществлять разные хитрые расчеты. Главное, чтобы в ней содержался рабочий лист с таблицей соответствия имени закладки в шаблоне Word и значения, которое нужно подставить.
- Вставить в подготовленную рабочую книгу код программы на VBA из файла-примера. Заменить все константы в соответствии с Вашим проектом.
- Протестировать правильность работы.
- Активно пользоваться!
Вместо заключения
Статья, если честно, получилась какой-то путаной и, наверное, не очень понятной, поэтому я жду Ваших вопросов по поводу работы кода, формул или механизма в целом в комментариях к ней.
Другие статьи из цикла:
- Общие требования к приложению
- Разработка пользовательского интерфейса
- Получение числа прописью.
Скачать файл с архивом приложения
По этой ссылке Вы перейдете на сайт Microsoft SkyDrive, где Вам будет предложено скачать файл Confirm.rar — это и есть архив приложения.