Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 11:28   #1
Karull
Новичок
Джуниор
 
Регистрация: 12.12.2011
Сообщений: 3
По умолчанию Постраничное сохранение документа в Word 2007

Всем здравствуйте!

Есть такая задача: с помощью слияния получается многостраничный документ (счета к оплате), который необходимо постранично сохранить. Нарыл в сети следующий макрос:

Dim src As Document
Dim dst As Document
Dim i As Integer

Set src = ActiveDocument
For i = 1 To src.Sections.Count - 1
src.Sections(i).Range.Copy
Set dst = Documents.Add
dst.Range.Paste
dst.Sections(2).PageSetup.SectionSt art = wdSectionContinuous
dst.SaveAs src.Path & "\" & Left(src.Name, Len(src.Name) - 4) & _
"_" & Format(i, "000")
dst.Close
Next

В первый раз этот макрос сделал все как надо. Через некоторое время попытался воспользоваться им еще раз, в результате получилось не 70 отдельных файлов, а почти 400. В получившихся документах были увеличенные междустрочные интервалы, вследствие чего часть информации перекинулась на следующий лист и понеслось...
В идеале было бы хорошо, чтобы была возможность задать количество страниц, которые должны сохраняться в один документ (на случай, если результатом должны быть доки объемом более 1 страницы).
Также очень хотелось бы, чтобы при сохранении каждый документ получал название, в соответствии с каким-то внешним список Excel (например, использовавшимся для слияния). Чтобы результат был примерно таким:
Счет № <номер из таблицы> Чл.взн. <название фирмы из таблицы>.
Возможно ли как-то доработать представленный выше макрос? Я в этом деле полный профан, к сожалению.

Всем спасибо за внимание!
Karull вне форума Ответить с цитированием
Старый 13.12.2011, 07:06   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Karull Посмотреть сообщение
...необходимо постранично сохранить...
Ваш макрос работает с разделами, а не со страницами.
Цитата:
Сообщение от Karull Посмотреть сообщение
...были увеличенные междустрочные интервалы...
Для сохранения форматирования, надо чтобы "отрезаемые" документы были созданы на основе того же шаблона, а еще лучше - делать "Сохранить как" и удалить лишние страницы. Можно подправить ваш макрос:
Set dst = Documents.Add(Template:=ActiveDocum ent.AttachedTemplate)
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 17.10.2018, 16:04   #3
dim8080
Новичок
Джуниор
 
Регистрация: 15.10.2018
Сообщений: 2
По умолчанию

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

Код:
Sub BreakOnPage()
   ' Used to set criteria for moving through the document by page.
   Application.Browser.Target = wdBrowsePage

   For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")
      
      'Select and copy the text to the clipboard
      ActiveDocument.Bookmarks("\page").Range.Copy

      ' Open new document to paste the content of the clipboard into.
      Documents.Add
      Selection.Paste

      Selection.Find.ClearFormatting
      Selection.Find.Replacement.ClearFormatting
      With Selection.Find
      .Text = "^b"
      .Replacement.Text = ""
      .Forward = True
      .Wrap = wdFindContinue
      .Format = False
      .MatchCase = False
      .MatchWholeWord = False
      .MatchByte = False
      .MatchAllWordForms = False
      .MatchSoundsLike = False
      .MatchWildcards = False
      .MatchFuzzy = False
      End With
      Selection.Find.Execute Replace:=wdReplaceAll


      ' Removes the break that is copied at the end of the page, if any.
      Selection.TypeBackspace
      ChangeFileOpenDirectory "C:\123\"
      DocNum = DocNum + 1
      ActiveDocument.SaveAs
      ActiveDocument.Close

      ' Move the selection to the next page  in the document
      Application.Browser.Next
   Next i
   ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 17.10.2018 в 16:10.
dim8080 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертировать формулы из [2007 Word 2007] в [2003 Word 2003] mswmd Microsoft Office Word 8 10.07.2017 17:06
Печать word-документа new player Общие вопросы Delphi 2 12.12.2011 11:24
Сохранение переменных в файле документа Word a37529 Microsoft Office Word 3 01.06.2011 00:52
Сохранение документа Word-2007 VistaSV30 Microsoft Office Word 7 05.01.2010 08:38
Сохранение документа при печати vovk Microsoft Office Word 2 12.09.2008 10:12