powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA.Word. Постраничное сохранение в отдельный файл.
20 сообщений из 20, страница 1 из 1
VBA.Word. Постраничное сохранение в отдельный файл.
    #39511804
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Мне нужно сохранить каждую страницу файла Word в отдельный файл. И вроде бы все работает, да только форматирование в сохраненных файлах сбивается. Можно ли что-то подправить в макросе, чтобы форматирование осталось?
Заранее спасибо.
Вот макрос.
Код: 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.
Sub SplitIntoPages()
Dim docMultiple As Document
Dim docSingle As Document
Dim rngPage As Range
Dim iCurrentPage As Integer
Dim iPageCount As Integer
Dim strNewFileName As String
Application.ScreenUpdating = False
Set docMultiple = ActiveDocument
Set rngPage = docMultiple.Range
iCurrentPage = 1
iPageCount = docMultiple.Content.ComputeStatistics(wdStatisticPages)
Do Until iCurrentPage > iPageCount
If iCurrentPage = iPageCount Then
rngPage.End = ActiveDocument.Range.End
Else
Selection.GoTo wdGoToPage, wdGoToAbsolute, iCurrentPage + 1
rngPage.End = Selection.Start
End If
rngPage.Copy
Set docSingle = Documents.Add
docSingle.Range.Paste
docSingle.Range.Find.Execute Findtext:="^m", ReplaceWith:=""
strNewFileName = Replace(docMultiple.FullName, ".rtf", "_" & Right$("000" & iCurrentPage, 4) & ".doc")
FileName = Date
docSingle.SaveAs "C:\Windows\Temp\" & FileName & "." & iCurrentPage & ".rtf"
iCurrentPage = iCurrentPage + 1
docSingle.Close
rngPage.Collapse wdCollapseEnd
Loop
Application.ScreenUpdating = True
Set docMultiple = Nothing
Set docSingle = Nothing
Set rngPage = Nothing
End Sub
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39511856
Cursky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergant138,
Попробуйте заменить
Код: vbnet
1.
docSingle.Range.Paste

на
Код: vbnet
1.
docSingle.Range.PasteAndFormat (wdPasteDefault)
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39511992
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, попробовал, но все равно текст съезжает. Перепробовал все параметры PasteAndFormat. Более того если руками копировать и вставлять в тот же самый документ - тоже сбивается форматирование. Может документ такой. Формат rtf.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39512019
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не удалось усилием мысли скачать ваш файл. Дайте уже образец.
Вероятно, проблема со стилями.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39512417
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Прикрепил файл.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39512426
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не заметил, чтобы при копировании сбивалось форматирование, все отформатировано как надо. Весть текст строго на месте, все оформление сохранилось.

Но объекты рисования (линии) - да сбились, не там и не все. Видимо из-за привязки к абзацам, которые в свою очередь находятся в текстовых блоках.

Мне помогло в вашем документе следующее - я перетащил якорь привязки каждой линии к самому первому абзацу (в верхний левый угол листа). Этот абзац (в отличие от почти всех остальных) не находится сам в текстовом блоке, поэтому привязки переносятся нормально.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39512440
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergant138Shocker.Pro,
Прикрепил файл.

http://www.sql.ru/forum/actualfile.aspx?id=20757029] Приложенный файл (Spisok.rtf - 121Kb)

предпочитаю подобные бланки делать таблицами
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39512601
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Для автоматического решения данного вопроса сделал следующее. Одним макросом беру оригинальный файл, выделяю все и удаляю. Пустой файл сохраняю как шаблон. Далее снова вторым макросом оригинальный файл копируется постранично и вставляется в шаблон. При это все форматирование сохраняется, в том числе все линии - то что нужно.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39515732
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
А вот еще странная ситуация. Другой файл, практически такой же, но на нем макрос не отрабатывает. Вернее все проходит без ошибок, но файлы получаются пустыми. В чем тут может быть дело?
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39515768
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergant138практически такой жеЧем же он "такой же"? В новом файле текст расположен в надписях, а в старом - во фреймах (ну или как они там называются). Откройте два файла рядом, выделите контейнер с тектсом - увидите отличие даже в меню
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39515831
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Да, действительно это так, спасибо. А как же теперь править макрос, что теперь выделять и вставлять и какими методами. С такими случаями еще не сталкивался.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39515845
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо экспериментировать. Навскидку - сейчас привязка всех надписей к первому абзацу и он же - разрыв страницы. Возможно, ваш алгоритм не захватывает этот абзац при выделении и потому - не копирует. Надо попробовать, к примеру, взять на один символ раньше и т.п.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39515848
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНадо экспериментировать. Навскидку - сейчас привязка всех надписей к первому абзацу и он же - разрыв страницы. Возможно, ваш алгоритм не захватывает этот абзац при выделении и потому - не копирует. Надо попробовать, к примеру, взять на один символ раньше и т.п.может эта же причина не копировала линии в первом случае и решатся сразу обе проблемы
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39516308
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Понял как выделять . Изменил код. Копирует нормально, но все-таки проблемы есть. То скопируется только первая страница, то все кроме последней.

Код: 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.
       Sub SplitIntoPages()
        Dim docMultiple As Document
        Dim docSingle As Document
        Dim rngPage As Range
        Dim iCurrentPage As Integer
        Dim iPageCount As Integer
        Dim strNewFileName As String
        Application.ScreenUpdating = False
        Set docMultiple = ActiveDocument
        iCurrentPage = 1
        iPageCount = docMultiple.Content.ComputeStatistics(wdStatisticPages)
        Do Until iCurrentPage > iPageCount
        Dim MyRange As Range
Set MyRange = ActiveDocument.Range(0, 0)
Set MyRange = MyRange.GoTo(What:=wdGoToPage, Name:=iCurrentPage)
Set MyRange = MyRange.GoTo(What:=wdGoToBookmark, Name:="\page")
   MyRange.ShapeRange.Select
        Selection.Copy
        iTempDir = Environ("Temp")
        Set docSingle = Documents.Add
        docSingle.Range.Paste
        docSingle.Range.Find.Execute Findtext:="^m", ReplaceWith:=""
        strNewFileName = Replace(docMultiple.FullName, ".rtf", "_" & Right$("000" & iCurrentPage, 4) & ".doc")
        FileName = Date
        docSingle.SaveAs iTempDir & "\" & FileName & "." & iCurrentPage & "_Bank.rtf"
        iCurrentPage = iCurrentPage + 1
        docSingle.Close
        Loop
        Application.ScreenUpdating = True
        Set docMultiple = Nothing
        Set docSingle = Nothing
        Set rngPage = Nothing
        End Sub
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39516340
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergant138То скопируется только первая страница, то все кроме последней.это на одном файле по-разному срабатывает или на разных?
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39516570
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
На одном . Но в основном не создается только последняя страница. То есть не выделяется. Все остальные в норме.

Вот окончательный, но до конца не работающий код.
Код: 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.
Sub SplitIntoPages()
Application.ScreenUpdating = False
Set docMultiple = ActiveDocument
iCurrentPage = 1
iPageCount = docMultiple.Content.ComputeStatistics(wdStatisticPages)
Do Until iCurrentPage > iPageCount
Dim MyRange As Range
Set MyRange = ActiveDocument.Range(0, 0)
Set MyRange = MyRange.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Name:=iCurrentPage)
Set MyRange = MyRange.GoTo(What:=wdGoToBookmark, Name:="\page")
MyRange.ShapeRange.Select
Selection.Copy
iTempDir = Environ("Temp")
Set docSingle = Documents.Add
docSingle.Range.Paste
docSingle.Range.Find.Execute Findtext:="^m", ReplaceWith:=""
strNewFileName = Replace(docMultiple.FullName, ".rtf", "_" & Right$("000" & iCurrentPage, 4) & ".doc")
FileName = Date
docSingle.SaveAs iTempDir & "\" & FileName & "." & iCurrentPage & "_Bank.rtf"
iCurrentPage = iCurrentPage + 1
docSingle.Close
Loop
Application.ScreenUpdating = True
Set docMultiple = Nothing
Set docSingle = Nothing
Set rngPage = Nothing
End Sub


Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39516583
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если с одним и тем же неизменным документом проблема, то она может быть связана с Active .

В вашем коде есть docMultiple, так его и надо использовать вместо ActiveDocument, либо вообще пользоваться ThisDocument
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39516969
sergant138
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Попробовал подставить ActiveDocument, но там все тоже самое.
Вот какой код получился:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub SplitIntoPages()
Application.ScreenUpdating = False
iCurrentPage = 1
iPageCount = ActiveDocument.Content.ComputeStatistics(wdStatisticPages)
Do Until iCurrentPage > iPageCount
Dim MyRange As Range
Set MyRange = ActiveDocument.Range(0, 0)
Set MyRange = MyRange.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Name:=iCurrentPage)
Set MyRange = MyRange.GoTo(What:=wdGoToBookmark, Name:="\page")
MyRange.ShapeRange.Select
Selection.Copy
iTempDir = Environ("Temp")
Set docSingle = Documents.Add
docSingle.Range.Paste
FileName = Date
docSingle.SaveAs iTempDir & "\" & FileName & "." & iCurrentPage & "_Bank.rtf"
iCurrentPage = iCurrentPage + 1
docSingle.Close
Loop
Application.ScreenUpdating = True
Set docSingle = Nothing
Set rngPage = Nothing
End Sub



Также прикрепляю образец файла, там же макрос. Может что-то в моем компьютере.
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39516982
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proиспользовать вместо ActiveDocumentsergant138Попробовал подставить ActiveDocument
...
Рейтинг: 0 / 0
VBA.Word. Постраничное сохранение в отдельный файл.
    #39517108
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По всей видимости, эта строка
Код: vbnet
1.
Set MyRange = MyRange.GoTo(What:=wdGoToBookmark, Name:="\page")

не может выполниться для последней страницы - просто некуда идти. Пожалуй, для последней страницы (iCurrentPage = iPageCount) нужно сделать отдельный If и выделять Range до конца документа
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA.Word. Постраничное сохранение в отдельный файл.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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