- Документы 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 доступна для бесплатного скачивания.
Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.
Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.
- 197090 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Содержание
- How to Create a Word Document From Excel or Google Sheets
- Link From Excel to Word Using Paste Options
- Insert Excel Content as an Object Into Word
- Paste Unformatted Data From Excel to Word
- Create a Word Document From Google Sheets
- How to automate Word from Excel using VBA
- Enable the Word Developer menu
- Record a Word Macro
- Add the code to Excel VBA and amend
- Record macros in Excel (if necessary)
- Repeat the previous steps until macro complete
- Conclusion
- Макрос создания документов Word по данным таблицы Excel
- Комментарии
How to Create a Word Document From Excel or Google Sheets
This tutorial demonstrates how to create a Word document from Excel or Google Sheets.
Link From Excel to Word Using Paste Options
- In the Excel file, select the required data. Then in the Ribbon, select Home > Clipboard > Copy.
- Open Word and create a new document. In the Ribbon, select Home > Clipboard > Paste > Link and Keep Source Formatting.
The selected Excel data is pasted into Word.
Insert Excel Content as an Object Into Word
- With a Word document open, in the Ribbon, select Insert > Text > Object.
- Select the Create from File tab.
Then use the Browse… button to select the Excel file to be inserted into Word as an object.
Finally, click OK to insert the object into the Word document.
The file contents are inserted into Word.
Paste Unformatted Data From Excel to Word
- In Excel, highlight the range of cells you need to copy to Word.
- In the Ribbon, select Home > Clipboard > Copy.
- Switch to an open Word document, or open Word and create a new document.
- In the Ribbon, select Home > Clipboard > Paste >Paste Special.
- Select Unformatted Unicode Text form the Paste option, and then click OK.
The data from Excel is pasted into Word as raw data (not in a table).
Create a Word Document From Google Sheets
You can copy and paste between a Google sheet and Word document the same way as in Excel.
- Select the range of cells in the Google sheet and press CTRL + C to copy the range of cells.
- Open Word and create a new document.
- In the Ribbon, select Home > Clipboard > Paste to paste the range of cells into Word as a table.
Alternatively, select Paste Special and select from the options that are provided.
Источник
How to automate Word from Excel using VBA
This post is the second in a series about controlling other applications from Excel using VBA. In the first part we looked at the basics of how to reference other applications using Early Binding or Late Binding. In this post, we will look at how we can automate Word from Excel even though we don’t know any VBA code for Word… yet. The process we will use for this is as follows:
- Enable the Word Developer menu
- Record a Word macro
- Add the code to Excel VBA and amend
- Record macros in Excel if necessary
- Repeat the previous steps until macro complete
I am not an Excel VBA expert (I’m more of an Excel VBA tinkerer), and I am certainly not a Word VBA expert. The process I am about to show you may not create the most efficient code, but I know this process works, because I have used it myself to automate lots tasks using Microsoft Word.
If you have enabled the Excel Developer menu it is the same process in Word.
In Word: File -> Options -> Customize Ribbon
Then tick the Developer Ribbon option, OK.
Record a Word Macro
The key to the success of this method is taking small sections of code and building up a complex macro bit by bit. Using the Word Macro Recorder is again, similar to the Excel Macro recorder.
Click on: Developer -> Record Macro
For the example in this post, we will create a macro which will open a new Word document, then copy a chart from Excel and paste it into that Word document. We will tackle this one stage at a time. Firstly, lets create the macro to open a new word document.
Click – Developer -> Record Macro. The Record Macro window will open.
Make a note of the “Store macro in” option, as we will need to know where to find the recorded code later. Normal.dotm is fine for now. Click OK – the Macro Recorder is now running.
Open a new Word Document – File -> New -> Blank Document
Stop the Macro from recording – Developer -> Stop Recording
We can now view the code for opening a new Word Document in the Visual Basic Editor. Click: Developer -> Visual Basic.
Find the location of your recorded code in the Visual Basic Editor. In this example: Normal -> Modules -> NewMacros.
Your code should look like the following. It may be slightly different, but not significantly.
Add the code to Excel VBA and amend
Let’s head back to the Excel VBA Editor and use the Early Binding method to control to Microsoft Word. In the Visual Basic Editor click Tools -> References select Microsoft Word x.xx Object Library. Then click OK.
As we are using Early Binding we need to declare the Application as a variable as follows:
Now copy and paste the code from the Word VBA Editor into the Excel VBA Editor.
The Word VBA code started with Documents.Add, all we have to do is add our application variable to the front of that line of code. Now becomes WordApp.Documents.Add . . .
Often, Selecting and Activating Objects is not required in VBA code, so I have not copied those statements into the code below.
A point to note, when an application is opened with VBA, it is normally opened in the background. To make the Word document visible I have added the following code:
Record macros in Excel (if necessary)
If we want to copy Excel content into a Word document, we will need to copy that content using Excel VBA. We can use the Macro Recorder in Excel to obtain the VBA code for copying, then we can use the Word Macro Recorder to obtain the VBA code for pasting.
Macro Recording from Excel – selecting a worksheet and copying chart
Macro Recording from Word – pasting a chart into a document
We can add both Macro recordings into our Excel macro. Remember to add WordApp. at the start of each statement of Word VBA code.
This code is not particularly efficient; it contains a few unnecessary sections code. However… it works!
Repeat the previous steps until macro complete
By repeating the same steps above; recording short actions, then transferring the code into Excel, we can slowly build up much more complex Macros. The key is to keep the actions short, if you do too many actions with the Macro Recorder, code starts to look long and scary.
If you’ve you tried to use the Macro Recorder before you will know that this is not as easy as it seems. And this simple tutorial may make you think it is easy, when it’s not. Sometimes, it can be quite frustrating trying to find out where the issues and errors are. The key to success is recording very short actions, such as those below and copying them into the Visual Basic Editor.
You will soon build up a standard library of code that you can use to control Word for most basic tasks.
In recorded VBA code from Word, the word “Selection” in the code often refers to the document itself. It is possible to make the code a little bit more efficient by declaring the document as a variable. If we were opening a specific document, we could include this at the start, just below the declaration of the application.
Or, if we created a new document we could include the following below the declaration of the application variable.
If we have created the document as a variable we can then reference the specific document. This code:
Would become this code:
Would become this code:
This method is much better, as it doesn’t rely on the Selection of the user being in the right place.
Conclusion
We have seen in this post that it is possible to create complex Macros to automate Word from Excel using VBA. By understanding how to declare variables for the application and documents we can create much more robust macros, even without knowing a lot of VBA code.
Related Posts:
About the author
Hey, I’m Mark, and I run Excel Off The Grid.
My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn’t until I was 35 that my journey really began.
In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).
Do you need help adapting this post to your needs?
I’m guessing the examples in this post don’t exactly match your situation. We all use Excel differently, so it’s impossible to write a post that will meet everybody’s needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.
But, if you’re still struggling you should:
- Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
- Ask the ‘Excel Ninja’ in your office. It’s amazing what things other people know.
- Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it’s clear and concise. List all the things you’ve tried, and provide screenshots, code segments and example workbooks.
- Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.
What next?
Don’t go yet, there is plenty more to learn on Excel Off The Grid. Check out the latest posts:
Источник
Макрос создания документов Word по данным таблицы Excel
Макрос предназначен для программного создания документов 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 доступна для бесплатного скачивания.
Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.
Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.
Комментарии
Спасибо, за макрос, не могли бы подсказать что в нем изменить что бы обрабатывалась только та строка в которой выделенная ячейка?
Спасибо за макрос. Очень помог в работе.
Этот макрос уже не поддерживается.
Используйте новую (расширенную) версию программы, — там все работает без ошибок.
Макрос выдает ошибку (Type mismatch (Error 13)) при обработке ячейки с формулой, подскажите пожалуйста как решить эту проблему?
Здравствуйте. Спасибо вам за этот макрос, который помог мне в работе.
Не могли бы вы еще подсказать как сделать чтоб в шаблон Word прописывались данные из нескольких (разных) строк Excel?
Заранее спасибо.
Подскажите. а можно сделать чтобы макрос обрабатывал только те строки в которых стоит номер договора, а если пусто пропускал?
Ознакомился с программой. Серьезный труд. Снимаю шляпу. Но мне понравился именно этот макрос. С колонтитулами я разобрался — оказалось ничего сложного, да и сам макрос оброс уже кучей доработок. Затянуло, знаете ли ))
Евгений, воспользуйтесь универсальной программой для заполнения документов Word — там реализована подстановка значений в колонтитулы
Добрый день! Макрос очень помог в работе. Доделал его немного под свои нужды: вывод в разные шаблоны документов word при разных значениях в excel. Остался один вопрос — в сам документ word текст вставляется отлично, а вот в колнтитулы — нет 🙁 Подскажите, пожалуйста, как это исправить?
Вова, если нет денег на заказ, есть только 2 варианта:
1) разобраться в этих макросах, и сделать самому (благо, примеров подобных макросов в интернете предостаточно)
2) обратиться за помощью на любой из форумов по Excel (но, опять же, если с вашей стороны никаких наработок нет, вряд ли кто сделает всю работу за вас)
А если в етом макросе сделать так чтоби он заменял дание сначла с строки активной ячейки а потом если одна из ячеек следующей строки = ячейке из предедущей строкии снова вставлял в ворд документ заменяемие поля и снова делел замену, и так до момента когда одна из ячеек не будеть раван ячеике из следуищей, строки тогад макрос по ектому условию не вставляет заменяемие поля а просто сохраняет ворд документ. То есь допустим мне нужно создать документ ворд по одному из людей дание по которому есть в нескольких строках. Пожалста помогите очень нужно, просто нет денег на заказ.
Вова, в этом случае универсальное решение сделать не получится — уж слишком много возможных вариантов расположения данных в Excel, и способов заполнения документов Word.
Оформляйте заказ на сайте — сделаю для вас макрос под ваши требования.
Подскажите пожалуйста, как сделать так, чтобы макрос формировал один документ ворд на основании данных из нескольких строк Excel?
А как реализовать те же возможности, только используя функцию слияния в Word. Чтобы каждый новый раз не формировался новый документ а запись делалась на новой странице?
Теперь доступна новая версия универсальной программы формирования документов по шаблонам.
Программа очень удобна для быстрого создания договоров и приказов, заполнения актов и инструкций, печати писем и соглашений, заполнения путевых листов и извещений, распечатки протоколов и соглашений, подстановки данных в шаблоны заявлений и доверенностей.
Количество файлов-шаблонов (Word, Excel, TXT) неограничено.
Бесплатно скачать и протестировать программу можно по этой ссылке:
http://excelvba.ru/programmes/FillDocuments
Замечательно. Я, долгое время искал нечто подобное. Но к счасливой случайности вышел на Ваш сайт. Установил панели для VBA. И ещё коу-что. Практически разобрался в работе данного макроса. В VBA я, недавно. Но поставил перед собой задачу изучить его. Для этого я, решил составить программу для заполнения бланков аттестатов о среднем образовании и бланков дипломов об окончании ПТУ. До этого они заполнялись вручную. Задачу в Excel, я, программно решил, не безВашего в ней участия, некоторые фрагменты кода. У меня база заполняется посредством форм в виде развёрнутого аттестата. А, вот транспортировка данных в Word с листов — разворот и последняя страница. Как-то чуть-чуть не вяжется с общим видом программы. Нельзя-ли макрос транспортировки «засунуть» под форму? Если можно, то не смогли бы Вы посоветовать мне как это сделать. Делаю эту программу потому, что на Украине все мучаются с авторизованым заполнением бланков об окончании учебных заведений. А, так я бы мог бесплатно, это моё безусловное кредо, предоставить программу желающим. Заранее Вам благодарен. Помогая мне Вы помогаете и до того замордованым классным руководителям школ Украины.
можно ли по каждой записи сформировать 2 документа word?
Источник
В данном разделе мы рассмотрим трюк, с помощью которого можно автоматически создавать текстовые документы Word на основе данных, хранящихся в таблице Excel. Это бывает необходимо, например, для быстрого формирования текстовых отчетов, в которых должны фигурировать табличные данные. Использование этого приема мы рассмотрим на конкретном примере.
Предположим, что у нас есть следующие данные о продажах по регионам (рис. 3.31).
Внимание!
При изучении данного раздела следует обращать внимание на расположение данных на рабочем листе (то есть на координаты задействованных ячеек).
Для автоматического создания отчетов на основании приведенных данных следует в стандартном модуле редактора VBA написать код, приведенный в листинге 3.85.
Рис. 3.31. Данные о продажах
Листинг 3.85. Создание документов Word на основе таблицы Excel
Sub ReportToWord()
Dim intReportCount As Integer ‘ Количество сообщений
Dim strForWho As String ‘ Получатель сообщения
Dim strSum As String ‘ Сумма за товар
Dim strProduct As String ‘ Название товара
Dim strOutFileName As String ‘ Имя файла для сохранения
сообщения
Dim strMessage As String ‘ Текст дополнительного сообщения
Dim rgData As Range ‘ Обрабатываемые ячейки
Dim objWord As Object
Dim i As Integer
‘ Создание объекта Word
Set objWord = CreateObject(«Word.Application»)
‘ Информация с рабочего листа
Set rgData = Range(«A1»)
strMessage = Range(«E6»)
‘ Просмотр записей на листе Лист1
intReportCount = Application.CountA(Range(«A:A»))
For i = 1 To intReportCount
‘ Динамические сообщения в строке состояния
Application.StatusBar = «Создание сообщения » & i
‘ Назначение данных переменным
strForWho = rgData.Cells(i, 1).Value
strProduct = rgData.Cells(i, 2).Value
strSum = Format(rgData.Cells(i, 3).Value, «#,000»)
‘ Имя файла для сохранения отчета
strOutFileName = ThisWorkbook.path & «» & strForWho &
«.doc»
‘ Передача команд в Word
With objWord
.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, «mmmm d, yyyy»)
‘ Получатель сообщения
.TypeParagraph
.TypeText Text:=»Кому: менеджеру » & vbTab &
strForWho
‘ Отправитель
.TypeParagraph
.TypeText Text:=»От:» & vbTab &
Application.UserName
‘ Сообщение
.TypeParagraph
.TypeParagraph
.TypeText strMessage
.TypeParagraph
.TypeParagraph
‘ Название товара
.TypeText Text:=»Продано товара:» & vbTab &
strProduct
.TypeParagraph
‘ Сумма за товар
.TypeText Text:=»На сумму:» & vbTab & _
Format(strSum, «$#,##0»)
End With
‘ Сохранение документа
.ActiveDocument.SaveAs FileName:=strOutFileName
End With
Next i
‘ Удаление объекта Word
objWord.Quit
Set objWord = Nothing
‘ Обновление строки состояния
Application.StatusBar = False
‘ Вывод на экран информационного сообщения
MsgBox intReportCount & » заметки создано и сохранено в папке » _
& ThisWorkbook.path
End Sub
В результате написания кода в окне выбора макросов станет доступным макрос ReportToWord. После его запуска начнется формирование отчетов (информация о состоянии процесса будет отображаться в строке состояния). По окончании процесса на экране отобразится окно с сообщением о том, что документы сформированы и помещены в ту папку, в которой хранится текущая рабочая книга. В рассматриваемом примере будут созданы три документа с именами Магазин 1.doc, Магазин 2.doc и Магазин 3.doc. Содержимое документа Магазин 1. doc показано на рис. 3.32 (другие документы выглядят аналогичным образом).
В рассматриваемом примере Lesha – это имя пользователя, который создал документ. Очевидно, что в результате внесения соответствующих изменений в код макроса форму создаваемого отчета можно корректировать по своему усмотрению.
Рис. 3.32. Документ Word, созданный на основе данных таблицы Excel
khmelae Пользователь Сообщений: 6 |
#1 13.01.2017 03:02:19 Здравствуйте! Есть макрос Excel который создает документ Word по шаблону. Необходимо внести изменения в код макроса таким образом чтобы: Пример прилагаю. Заранее спасибо за помощь:)
Прикрепленные файлы
|
||
khmelae Пользователь Сообщений: 6 |
#2 15.01.2017 02:58:16 Доброго всем времени суток! Но возникли две новые трудности: 2) Как сохранить файл в формате PDF а не DOC Заранее спасибо за помощь:)
Прикрепленные файлы
Изменено: khmelae — 15.01.2017 02:59:58 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#3 15.01.2017 10:55:22
записать в Word сохранение файла в PDF. Будет готовый код.
достаточно его просто не закрывать, я думаю. В этой строке: Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
khmelae Пользователь Сообщений: 6 |
The_Prist
спасибо за Ваш ответ. К сожалению просто удаление «WD.Close False: » не помогает сохраненные файлы не открываются автоматически. я уже попробовал разные варианты C сохранением в PDF тоже не выходит, по Вашему совету сделал запись макроса «сохранение файла DOC в PDF». Попытался по подобию сделать, но ничего не получилось(((
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#5 16.01.2017 10:42:38
Они вообще у Вас создаются? Если каждый файл не закрывать — то он останется открытым, что приведет ровно к тому же эффекту, что закрыть-открыть. Поэтому приведенное мной решение работать должно без проблем, если только у Вас не возникает где-то раньше ошибка кода. Приведите код полностью как Вы там чего изменили. Строка сохранения в PDF у Вас не рабочая — ознакомьтесь со статьей: Как из Excel обратиться к другому приложению Потому что нет у Excel понятия, что такое wdExportFormat. И то ли у Вас опечатка, то ли там знака равно после двоеточия не хватает. Выглядеть в итоге должно как-то так:
только Filename должно так же отдельно формироваться для PDF, чтобы формат был именно .pdf, а не .doc. Т.е. надо создать доп.переменную, такую же как Filename и назначать ей значение. После строки:
записать еще одну:
и для сохранения в PDF использовать её:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||||||
RAN Пользователь Сообщений: 7091 |
#6 16.01.2017 11:00:51
Он открывается, только в скрытом режиме.
|
||||
khmelae Пользователь Сообщений: 6 |
#7 17.01.2017 00:21:46 Добрый вечер! The_Prist .
Изменено: khmelae — 17.01.2017 00:25:51 |
||
khmelae Пользователь Сообщений: 6 |
#8 17.01.2017 01:26:42
Да создаются, я прикрепил вложение можете проверить. По вопросу автоматического открытия / не закрытия сохраненного документа пока решения не нашел The_Prist . Ваш вариант с удалением из кода «WD.Close False:» кажется логичным и правильным, но почему то не работает.
RAN я не совсем понимаю куда можно применить данный метод «WA.Visible = True «
Прикрепленные файлы
Изменено: khmelae — 17.01.2017 01:35:39 |
||||||
Logistic Пользователь Сообщений: 741 |
khmelae
, а что нужно изменить в коде ,что бы можно было формировать один договор ,выделили в таблице ячейку «Прізвище» Дзюба и получили договор по конкретной Фамилии. |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#10 17.01.2017 10:32:17
открываются. И даже по коду видно, что открываются, заполняются и далее СОХРАНЯЮТСЯ КАК. А это значит, что они остаются открытыми. Об этом же говорит строка WD.Close, т.к. если бы они не были открыты — зачем их закрывать?
сразу после строки:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
khmelae Пользователь Сообщений: 6 |
#11 18.01.2017 00:40:11 Ооо то что надо спасибо The_Prist , теперь я понял как применить идею RAN , ему тоже спасибо за помощь. И так позволю себе подвести промежуточные итоги по улучшению данного макроса. Пример подкрепляю к данному сообщению, код макроса с различными вариантами его работы выкладываю ниже.
Logistic я к сожалению не так хорошо разбираюсь в написании макросов чтобы, так просто и легко написать Вам изменение для формирования договора по выделенной ячейки, могу сказать одно что это точно можно реализовать, т.к. я видел похожие решения на др. форумах, но как реализовать конкретно для этого макроса я не подскажу. Попробуйте обратится к Богу Excel The_Prist
Logistic задачи без внесения изменений в данный макрос. Как вариант можно использовать формулу ВПР и дополнительный столбец с отметкой какую строку нужно сформировать как договор, это если надо сформировать только один договор из списка (пример во вложении). Если же Вам необходимо сформировать несколько договоров то можно использовать ВПР + массив. Если не разберетесь пишите
Прикрепленные файлы
Изменено: khmelae — 18.01.2017 00:43:20 |
||||
msdmo Пользователь Сообщений: 4 |
Доброго времени суток. Прикрепленные файлы
|
msdmo Пользователь Сообщений: 4 |
#13 19.05.2017 16:17:45 Сделал.
Ещё ошибки возникают, если объединённая ячейка попадается (( |
||
bizard, сначала делайте код в программе Word.
Когда ставите точку, то появляются члены, которые есть у объекта. Если среди членов нет нужного, значит у объекта нет этого члена. Есть случаи, что не все члены появляются после того, как поставишь точку, но такое редко бывает.
TypeParagraph — является членом объекта Selection. Если вы перейдёте в программу Word, октроете программу VBA, введёте ActiveDocument и поставите точку, то во всплывающей подсказке не будет TypeParagraph. Это означает, что у объекта ActiveDocument нет члена TypeParagraph (могут быть исключения — член не появляется, но есть, но это бывает редко).
Здесь:
Visual Basic | ||
|
вы используете ActiveDocument, а должны использовать oDocument, т.к. вся работа у вас из Excel в программе Word ведётся через две переменные: oWord и oDocument. Других слов ваш код не понимает, в т.ч. не понимает слова ActiveDocument.
Краткое описание
Макрос на основе шаблонов в формате Word и по заданному списку значений в Excel формирует необходимое количество вордовских документов. Количество формируемых файлов неограниченно и зависит только от числа указанных вами параметров в Excel.
Подробное описание
Если по роду деятельности часто приходится формировать какие-либо документы в Word по шаблону (приказы, распоряжения, договора, соглашения, счета и др), то вам может пригодится макрос для автоматизации создания вордовских документов на основе исходных данных в файле Excel.
Макрос удобно и быстро создает необходимые документы, исходя из указанных шаблонов и настроенных параметров.
— Шаблоны задаются в формате Word. Количество одновременно используемых шаблонов неограниченно.
— Настройки (параметры) для подстановки в шаблоны хранятся в файле эксель. Может быть задано неограниченное количество параметров.
Из дополнительных возможностей макроса:
— В настройках листа с данными достаточно указать название шаблона и именно данный шаблон будет применен для формирования документов. Если шаблонов указано несколько, то формирование документов будет происходить по нескольким (указанным) шаблонам.
— В настройках макроса можно указать, по каким строкам формировать документы, а по каким пропускать.
— Для каждого формируемого документа можно указать необходимое имя (название).
— Для более удобной вставки наименований шаблонов в ячейку достаточно два раза кликнуть на соответствующей ячейке в столбце «C» и в открывшейся форме выбрать нужные шаблоны.
В целом, ничего сложного в работе с макросом и шаблонами нет.
Перед запуском макроса обязательно ознакомьтесь с примечаниями в пункте «Важно» на листе «const».
Скачать макрос эксель для создания документов и примеры шаблонов можно по ссылке выше.
Обновление макроса от 09.07.2020
В программу добавлена возможность замены значений в колонтитулах. Колонтитулы учитываются как верхние, так и нижние. При необходимости можете ознакомиться с примерами заполнения шаблонов, которые также присутствуют в архиве.
Ссылка на загрузку архива с программой обновлена. Актуальная версия программы: «CreateWord, v.2.xlsb».
Создание нового документа Word или открытие существующего из кода VBA Excel. Методы Documents.Add и Documents.Open. Сохранение и закрытие документа.
Работа с Word из кода VBA Excel
Часть 2. Создание и открытие документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Новый документ Word создается из кода VBA Excel с помощью метода Documents.Add:
Sub Test1() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True End Sub |
Переменную myDocument можно объявить с типом Object, но тогда не будет ранней привязки к типу Word.Document и подсказок при написании кода (Auto List Members).
Открытие существующего документа
Существующий документ Word открывается из кода VBA Excel с помощью метода Documents.Open:
Sub Test2() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = _ myWord.Documents.Open(«C:Документ1.docx») myWord.Visible = True End Sub |
Замените в этой процедуре строку «C:Документ1.docx» на адрес своего файла.
Подключение к открытому документу
Присвоение переменной ссылки на существующий экземпляр Word.Application осуществляется в VBA Excel с помощью функции GetObject:
Sub Test3() Dim myWord As Object, myDoc As Word.Document On Error GoTo Instr Set myWord = GetObject(, «Word.Application») Set myDoc = myWord.Documents(«Документ1.docx») myDoc.Range.InsertAfter «Добавляем новый текст, подтверждающий подключение к открытому документу.» Exit Sub Instr: MsgBox «Произошла ошибка: « & Err.Description End Sub |
Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Также произойдет ошибка, если не будет найден указанный документ (в примере — «Документ1.docx»).
Сохранение и закрытие документа
Сохранение нового документа
Чтобы сохранить из кода VBA Excel новый документ Word, используйте метод SaveAs2 объекта Document:
myDocument.SaveAs2 («C:Документ2.docx») |
Замените «C:Документ2.docx» на путь к нужному каталогу с именем файла, под которым вы хотите сохранить новый документ.
Сохранение изменений в открытом документа
Сохраняйте изменения в существующем документе с помощью метода Document.Save или параметра SaveChanges метода Document.Close:
‘Сохранение изменений документа myDocument.Save ‘Сохранение изменений документа ‘при закрытии myDocument.Close ‘по умолчанию True myDocument.Close True myDocument.Close wdSaveChanges ‘Закрытие документа без ‘сохранения изменений myDocument.Close False myDocument.Close wdDoNotSaveChanges |
Закрытие любого сохраненного документа
Метод Document.Close закрывает документ, но не приложение. Если работа с приложением закончена, оно закрывается с помощью метода Application.Quit.
Для быстрого получение документа Word из «контрольной колонки Excel + шаблона Word» (путем замены «меток» в шаблоне на значения из контрольной колонки Excel) нужно выполнить ряд подготовительных шагов
- Шаги:
- Анализ итогового документа Word и выделение информации, подлежащей замене
- Расстановка «меток» (получение из «образца Word» «шаблона Word» + что такое «метка»).
- Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
- Выявление причинно-следственных связей (ПСС) для вставок (замен)
- Ценность БД. Структура и наращивание. Поддержание в актуальном состоянии
- Скачать xlsm-файл для тестирования
Для тех, кому видео понятнее, чем текст…
Скачать видео… (без рекламы)
Если не удалось запустить видео, воспользуйтесь этой ссылкой … видео на VK.com
Или этой ссылкой … видео на YouTube
И подробнее…
Анализ итогового документа Word и выделение информации, подлежащей замене
Наверное, в любой организации приходится плодить подобные документы (просто для примера)
- приказ о проведении и контроле работ (мероприятий)
- план проведения и контроля работ (мероприятий)
Как правило, каждый следующий (новый) «приказ» или «план» отличается от предыдущего датами и фамилиями ответственных должностных лиц.
Конечно, бывают и новые мероприятия (выполняются впервые за всю историю организации), но тогда эта задача не для макроса. Макрос способен работать быстро и безошибочно, но по шаблону…
Поэтому после того, как макрос выполнит свою шаблонную работу не тривиальные изменения в документе следует поручать специалисту.
Задача этого шага: выделить цветом (например, желтым) те фамилии и даты, которые должны будут быть изменены.
Или такую информацию, которая меняется не каждый раз, но с определенной периодичностью…
Расстановка «меток» (получение «шаблона Word» из «образца Word» + что такое «метка»).
Сейчас все фамилии и даты (любую информацию), выделенные желтым цветом, следует заменить уникальными метками (по смыслу)…
Рис.1 Расстановка «меток» (получение из «образца Word» «шаблона Word»).
Уникальность меток обязательна ! Уникальность достигается включением таких символов, которые обычно в документе не встречаются. Могу порекомендовать начинать любую метку с «{$», а заканчивать «}» или «$}».
Если метка не будет уникальной, то произойдет замена текста, который Вы не планировали заменять… Сразу успокою: шаблон в этом случае не пострадает… Просто в новом документе появятся бессмысленные предложения, и его придется забраковать.
Но уникальную метку Вы можете ставить (использовать) в документе сколько угодно раз (если, например, название компании встречается в документе 12 раз)!
Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
Раздел
Рис.2 Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
Раздел
Выявление причинно-следственных связей (ПСС) для вставок (замен)
Раздел
Ценность БД. Структура и наращивание. Поддержание в актуальном состоянии
Раздел
Для тестирования
Если Вы не забыли включить макросы, то должны увидеть… возникший в той же папке новый документ…
Рис.3 Результат замены «меток» в документе «мой_НОВЫЙ_ДОКУМЕНТ.docx»
Если на этой странице не нашлось того, что Вы так искали…
Не расстраивайтесь, не все потеряно… Смело щелкайте…
телефон:
+7(919) 572-59-92
+7(987) 848-79-61