powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь. Макрос для сохранения слияния.
12 сообщений из 12, страница 1 из 1
Нужна помощь. Макрос для сохранения слияния.
    #37696768
giantil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

MS office 2010. Делаю слияние для автоматизации создания документов (договор, смета, акт, накладная), куда подставляются данные из excel. Т.е. сейчас есть 4 файла ворд, связанные с бд в экселе, куда вносятся все данные по заказчику.

Слияние работает как надо, но хочу сделать макрос который будет сохранять результирующие файлы в нужном месте с нужными названиями.

Сейчас добился того, чтобы макрос сохранял текущую запись слияния (так и задумано) по адресу
C:\test\002-14\Договор_002-14.doc
где
C:\test - каталог где лежит шаблон договора, подключённый к бд в экселе
002-14 - номер договора, читается для текущей записи слияния из экселя (поле "contract")
т.е. макрос создаёт папку куда будет помещать все документы по данному договору.:
C:\test\002-12\ДОГОВОР_002-12.doc
C:\test\002-12\СМЕТА_002-12.doc
C:\test\002-12\НАКЛАДНАЯ_002-12.doc
C:\test\002-12\АКТ_002-12.doc

Повторюсь, мне нужно сохранять только одну текущую запись слияния за запуск макроса.

Что хотелось бы улучшить (в порядке значимости):
1. Чтобы макрос был общий для всех документов. Сейчас текст "Договор_" просто прописаны в коде. Тут я думаю можно заменить эту часть на закладку, которая будет для всех файлов одинаково называться, но ссылаться на нужный текст. Как это прописать в коде - не знаю.
2. Чтоб документ шаблон был 1, а не 4 как сейчас. Т.е. все содержалось бы в 1м вордовском файле, разделённом скажем разрывами разделов, но сохранялось бы в 4 разные результирующие файла. Чтоб не запускать 4 шаблона и не нажимать 4 раза "да" для подключения к источнику данных. Тогда закладки, предложенные мной в п.1. не проканают, т.к. файл у нас 1 и одну и туже закладку в два места не воткнёшь.
Наткнулся на эту тему , где "постранично режут" документ на разные файлы, но немного не мой случай, однако вселяет надежду, что это возможно.

привожу свой текущий код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Sub m_1()
Dim fs
Dim Fol_name As String
Dim File_name As String
Dim oMergedDoc As Document
Fol_name = "C:\test\" & ActiveDocument.MailMerge.DataSource.DataFields("contract")
File_name = "C:\test\" & ActiveDocument.MailMerge.DataSource.DataFields("contract") & "\Договор_" & _
        ActiveDocument.MailMerge.DataSource.DataFields("contract") & ".doc"
   If ActiveDocument.MailMerge.MainDocumentType <> wdNotAMergeDocument Then
    Set oMergedDoc = ActiveDocument
  Else
    MsgBox "Активный документ должен быть создан слиянием.", vbExclamation, "Сохранение документов после слияния"
    Exit Sub
  End If

'Проверка на наличие уже такой папки
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.folderexists(Fol_name) = False Then
        'Создание папки
            fs.createfolder (Fol_name)
    End If
'Проверка на наличие в нашей папке уже такого файла
    If fs.fileexists(File_name) Then
        MsgBox "Файл с таким именем уже есть в этой папке. Файл не будет сохранён, т.к. он заменит собой уже существующий файл", vbCritical
        Exit Sub
    End If
    
'Сохранение файла
    
    With oMergedDoc.MailMerge
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      .Execute False
      With Documents(1)
        .SaveAs FileName:=File_name
        .Close False
      End With
    End With
    
End Sub



и ещё второстепенные пожелания...
3. Поколдовать с экселевским файлом, чтоб из него запускался файл шаблона с активной последней записью слияния.
4. Поколдовать с экселевским файлом, чтоб создать форму для заполнения.
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696816
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем сохранять готовые документы в виде файлов? Да еще и по всем договорам, контрагентам... Если вы и отслеживаете изменения - так делайте отдельные записи в базе, с изменениями... а сформировать любой из документов из базы вы можете в любой момент на основе ссылки на имеющийся файл-шаблон (шаблонов/образцов, в любом случае, будет намного меньше, чем договоров - вы же не делаете отдельную форму для каждого договора?)
И "разбивать" внутри вордовского файла ничего не надо - просто формируйте соответствующий документ (накладную, смету...)
Пример - 9630015
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696856
giantil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,
интересный пример, спасибо.

увы, в моём случае сохранение всех файлов по всем договорам неизбежно т.к.
1) файлы Накладная и Смета в любом случае требуют ручного редактирования
2) так уж заведено в компании, что документация по каждому заказу должна быть в папке этого проекта (заказа) с прочими файлами и доступ по локальной сети возможен только к этим результирующим документам. Шаблоны документов для слияния и источник документов доступен только зам. дир-ра.

Заказчики у нас не повторяются и для каждого заказа мы в любом случае создаём папку проекта с рабочими файлами. Слияние делается не для того, чтобы было бд со всеми данными, а чтобы 4 раза не вбивать\копипастить данные по заказчику, дату и номер договора во все документы.
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696866
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так разговор об этом и идёт, вообще-то...
Сами программные средства делаются "как принято" - то есть таблицы, база, шаблоны...
А нагенерить документы можно в любой момент - и они смогут лежать там, где надо... Вполоть до кнопочки "сгенерировать все документы".
Вы просто поймите - то, что "Накладная" и "Смета" требуют "ручного редактирования" - так это же не редактирования формы документа , а именно данных в базе . Вот эти данные и редактируйте. И решайте вопрос, как юзеры смогут редактировать ОДНИ И ТЕ ЖЕ ДАННЫЕ, на основе которых и будут строиться выходные формы.
А раз документация должна храниться по проектам - так хранИте, кто вам запрещает? Иногда жмакайте БОЛЬШУЮ КНОПКУ "сгенерить выходные документы" - и усё

Или вы не можете построить информсистему сами, а "начальство" не способно понимать, что живёт уже не во времена DOS?
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696890
giantil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM, проще всего наверно было бы ответить на последнее "или" да.

но попробую немного иначе))
у меня не стоит задачи создать бд, которая бы стала панацеей.
Мне нужно только , чтобы не приходилось заносить одни и те же данные несколько раз к ряду. Для этого слияния более чем достаточно. Макрос нужен, чтоб не париться с ручным вводом имён документов и путей сохранения. Т.е. мне нужен конкретный (далеко не универсальный, местами ограниченный и, возможно, даже ущербный) инструмент для решения конкретной задачи.

Что касается ручного редактирования Сметы и Накладной, то речь идёт о редактировании (заполнении) данных, не относящихся к источнику данных (файлу экселя, бд - звучит слишком громко). Т.е. будут редактироваться уже "слитые" (merged звучит лучше) файлы.

Я тоже сейчас могу капсом написать, что ПРЕКРАСНО вас понимаю, и согласен с вашим подходом, но я не в той ситуации чтобы навязывать информационную политику))

мог бы сейчас подробно описать сейчас процедуры бизнес-процесса по документообороту с заказчиками (собственно я скорее процессник, и вовсе не ITшник), но это будет жутким оффтопом.

Просто мне не хочется останавливаться на достигнутом, и довести до ума то, что есть - и этого будет более чем достаточно.
Если вдруг наступит тот светлый день, когда начальство захочет потратить немного денег на разработку корпоративной ИС, то этим буду заниматься не я =))

Ещё раз повторюсь, что концептуально я с вами согласен, но, увы, не мой случай.
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696899
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, хорошо, я вник

Теперь только один вопрос - что вы желаете в итоге?
Понимаете, в чём дело - одно, если действия исполняете вы, с правами на доступ ко всей инфе - и другое - пользователи, открывшие готовый документ... Вы - со стороны сервера, и пользователи - на клиентах, и не знающие, откуда вообще инфа взялась...

Я, конечно, попробую вдумчиво разобраться с вашим куском кода - но это не поможет, ИМХО, понять весь ваш процесс движения документа. Или давайте обсудим это приватно, мои данные в профиле есть... Даже в эти выходные я буду доступен каждый день после 15-00 мск...
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696921
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может пригодится:
Макрос создания документов Word по данным таблицы Excel (без использования функции слияния)
http://excelvba.ru/code/CreateWordDocuments
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696954
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
giantil,

автор1. Чтобы макрос был общий для всех документов. Сейчас текст "Договор_" просто прописаны в коде. Тут я думаю можно заменить эту часть на закладку, которая будет для всех файлов одинаково называться, но ссылаться на нужный текст. Как это прописать в коде - не знаю.
откуда запускается макрос

что значит --Сейчас текст "Договор_" прописано в коде

автор2. Чтоб документ шаблон был 1, а не 4 как сейчас. Т.е. все содержалось бы в 1м вордовском файле, разделённом скажем разрывами разделов, но сохранялось бы в 4 разные результирующие файла. Чтоб не запускать 4 шаблона и не нажимать 4 раза "да" для подключения к источнику данных. Тогда закладки, предложенные мной в п.1. не проканают, т.к. файл у нас 1 и одну и туже закладку в два места не воткнёшь.


любое количество вставок некого поля в документ(не мое, но и у меня есть аналог--попроще)
http://excelvba.ru/code/CreateWordDocuments

хотя можно инфу по 1 строке скачать в рабочую область и на нее настроить закладки, вряд ли инфы много

авторкак вы вставляете табличную часть

одинакова ли она в разных шаблонах, хотя в некоторых ее и нет
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37696957
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
giantil,
авторC:\test\002-12\ДОГОВОР_002-12.doc
C:\test\002-12\СМЕТА_002-12.doc
C:\test\002-12\НАКЛАДНАЯ_002-12.doc
C:\test\002-12\АКТ_002-12.doc


еще вопрос--чем отличаются шаблоны

если не сложно--выложите хотя бы с условной инфой и многострочной табличной частью
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37697130
giantil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автороткуда запускается макрос

сейчас он в модуле шаблона normal.dot, запускаю пока через меню макросов, позже м.б. кнопочку сделаю.
авторчто значит --Сейчас текст "Договор_" прописано в коде

значит, что эта часть названия файла просто прописана в коде (в переменной File_name)

автор http://excelvba.ru/code/CreateWordDocuments
вроде стоящая вещь, но для моих нужд её адаптация, боюсь, займёт больше времени и сил, чем доработка того, что есть до чего-то приемлемого.

Вообще скажите, а чем плохо слияние, что его так не любят? может быть я чего-то не знаю...

авторхотя можно инфу по 1 строке скачать в рабочую область и на нее настроить закладки, вряд ли инфы много
авторкак вы вставляете табличную часть

одинакова ли она в разных шаблонах, хотя в некоторых ее и нет

не совсем уловил мысль... таблица в экселе заполняется вручную, через слияние данные переносятся в ворд

автореще вопрос-чем отличаются шаблоны
всем, просто они вытаскивают из экселя одни и те же данные: название фирмы, фио, номер и дату договора и т.д.

авторесли не сложно--выложите хотя бы с условной инфой и многострочной табличной частью
может быть немного позже... вечером или завтра
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37697140
giantil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
идею с закладками реализовал (п.1)

теперь в каждом документе шаблоне слова в заголовке (ДОГОВОР, СМЕТА, АКТ, НАКЛАДНАЯ) у меня обозначены как закладка doctype, которая используется в переменной File_name

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Sub m_1()
Dim fs
Dim Fol_name As String
Dim File_name As String
Dim oMergedDoc As Document
Const Outgoing As String = "doctype"
  If ActiveDocument.MailMerge.MainDocumentType <> wdNotAMergeDocument Then
    Set oMergedDoc = ActiveDocument
  Else
    MsgBox "Активный документ должен быть создан слиянием.", vbExclamation, "Сохранение документов после слияния"
    Exit Sub
  End If
  If Not oMergedDoc.Bookmarks.Exists(Outgoing) Then
    MsgBox "В документе нет закладки с именем " & Outgoing & ", которая используется в качестве имени файла." & vbNewLine & _
          "Создайте закладку с таким именем и запустите макрос ещё раз", vbExclamation, "Сохранение документов после слияния"
    Exit Sub
  End If

Fol_name = "C:\test\" & ActiveDocument.MailMerge.DataSource.DataFields("contract")
File_name = "C:\test\" & ActiveDocument.MailMerge.DataSource.DataFields("contract") & "\" & _
         oMergedDoc.Bookmarks(Outgoing).Range.Text & "_" & ActiveDocument.MailMerge.DataSource.DataFields("contract") & ".doc"

'Проверка на наличие уже такой папки
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.folderexists(Fol_name) = False Then
        'Создание папки
            fs.createfolder (Fol_name)
    End If
'Проверка на наличие в нашей папке уже такого файла
    If fs.fileexists(File_name) Then
        MsgBox "Файл с таким именем уже есть в этой папке. Файл не будет сохранён, т.к. он заменит собой уже существующий файл", vbCritical
        Exit Sub
    End If
    
'Сохранение файла
    
    With oMergedDoc.MailMerge
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      .Execute False
      With Documents(1)
        .SaveAs FileName:=File_name
        .Close False
      End With
    End With
    
End Sub
...
Рейтинг: 0 / 0
Нужна помощь. Макрос для сохранения слияния.
    #37701702
giantil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, то что описал выше работает и работает хорошо.

но хочется сделать лучше =)

Нужна ваша помощь!

Сейчас описанный выше код используется для слияния и сохранения файлов под необходимыми именами. Для имени файла используется одно из значений полей слияния - DataSource.DataFields("contract") - номер договора, и закладка doctype (тип документа: Договор ,Акт, Накладная) которая выделяет кусок текста в документе которое используется для названия файла сохранения. Есть 3 исходных документа слияния (те самые Договор ,Акт, Накладная) подключенных к экселю, каждый из них макрос сохраняет как и куда надо.

Задача следующая: объединить эти три документа в 1 (чтоб запускать 1 документ и один раз запускать макрос, а не три). Но при этом чтоб они сохранялись раздельно под теми же именами. Т.е. закладка уже не прокатит.

Удобное решение сохранения одного документа в несколько приведено тут , но
во-первых, разделение разделами не желательно, т.к. разделы мне нужны для того чтоб менять форматирование колонтитулов
во-вторых, я не могу придумать как интегрировать мой код и код по ссылке, что имена были какие мне надо.

Ситуация у меня всегда стандартная (по количеству листов в документе и т.д.) отличаются лишь данные слияния... может быть как это это сделать без цикла for ... next, а просто резать "общий "документ на три нужные части и сохранять под заданными именами с одной лишь "переменной" DataSource.DataFields("contract")

В общем помогите пожалуйста довести до ума.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь. Макрос для сохранения слияния.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]