1

Тема: Разделение таблицы на отдельные документы

Здравствуйте. Помогите, пожалуйста!
Есть документ MS Office Word 2010, в котором есть таблица (4 столбца, 300 строк), его необходимо разбить на 300 страниц или отдельных документов так, чтобы на каждой странице была отдельная строчка таблицы (вернее отдельная таблица из двух строк, заголовка и собственно данных)

Можно ли это реализовать автоматически?
Заранее спасибо за помощь!

2

Re: Разделение таблицы на отдельные документы

Можно.

Sub RowsToDocuments()
    'Переменная для документа, с которым нужно работать.
    Dim oCopyDoc As Document: Set oCopyDoc = ActiveDocument
    Dim i As Long
    'Вспомогательные переменные для упрощения сохранения файла
    'и открытия исходного документа
    Dim sDocFolder As String, sDocFullName As String, sDocExt As String
    'Переменная для диапазонов, подлежащих удалению
    Dim oRangeToDelete As Range
    Dim oTbl As Table
    sDocFullName = oCopyDoc.FullName 'Полный путь к оригинальному документу
    sDocFolder = Mid(sDocFullName, 1, InStrRev(sDocFullName, "\")) 'Путь к папке
    sDocExt = Mid(oCopyDoc.Name, InStrRev(oCopyDoc.Name, ".")) 'Расширение документа
    
    Set oTbl = oCopyDoc.Tables(1)
    
    For i = 2 To oTbl.Rows.Count
        Set oRangeToDelete = oCopyDoc.Range
        Set oTbl = oCopyDoc.Tables(1)
        'Задаём и удаляем диапазон документа, находящийся ниже сохраняемой строки
        If i <> oTbl.Rows.Count Then
            oRangeToDelete.SetRange oTbl.Rows(i + 1).Range.Start, oTbl.Range.End
            oRangeToDelete.Select
            oRangeToDelete.Rows.Delete
        End If
        If i <> 2 Then
            Set oTbl = oCopyDoc.Tables(1)
            'Задаём и удаляем диапазон документа, находящийся выше сохраняемой строки, но без заголовка таблицы
            oRangeToDelete.SetRange oTbl.Rows(i).Range.Start, oTbl.Rows(1).Range.End
            oRangeToDelete.Select
            oRangeToDelete.Rows.Delete
        End If
        'Сохраняем документ под новым именем
        oCopyDoc.SaveAs2 FileName:=sDocFolder & "Строка " & i - 1 & sDocExt, AddToRecentFiles:=False
        'Закрываем документ
        oCopyDoc.Close SaveChanges:=False
        'Открываем исходный документ
        Set oCopyDoc = Documents.Open(sDocFullName)
        DoEvents 'Чтобы не зависать :)
    Next i

End Sub

Макрос поместить в шаблон Normal, не в рабочий документ!

Лучше день потерять — потом за пять минут долететь!

3

Re: Разделение таблицы на отдельные документы

Добавил в Normal.dotm
Открыл свой документ, в макросах появился Ваш. Нажимаю выполнить и ничего sad
Я что-то пропустил? Проверил, код на месте

4

Re: Разделение таблицы на отдельные документы

В документе одна таблица?

Лучше день потерять — потом за пять минут долететь!

5

Re: Разделение таблицы на отдельные документы

Да, таблица одна, но вокруг нее (сверху, снизу) есть текст
Вынес отдельно таблицу получил Run-Time error 5
в строке
   

sDocExt = Mid(oCopyDoc.Name, InStrRev(oCopyDoc.Name, ".")) 'Расширение документа

6

Re: Разделение таблицы на отдельные документы

Ну ошибка возникла, т.к. документ, по видимому, не был сохранён. Почему не работает, не знаю. У меня работало. Кстати, макрос будет сохранять не только строки из таблицы, но и текст, окружающий таблицу. Об окружающем тексте в первом сообщении не упоминалось, поэтому я не обратил на это внимания

Лучше день потерять — потом за пять минут долететь!

7

Re: Разделение таблицы на отдельные документы

Сохранил документ, выполнил макрос. Опять ошибка sad(

внешняя ссылка

Кажется не мой день sad(

8

Re: Разделение таблицы на отдельные документы

Можете приложить документ? или хотя бы часть таблицы?

Лучше день потерять — потом за пять минут долететь!

9

Re: Разделение таблицы на отдельные документы

Исправил
   oCopyDoc.SaveAs2 FileName:=sDocFolder & "Строка " & i - 1 & sDocExt, AddToRecentFiles:=False

Заменил на
   oCopyDoc.SaveAs FileName:=sDocFolder & "Строка " & i - 1 & sDocExt, AddToRecentFiles:=False

(убрал 2 от SaveAs)

Если только таблица, работает и сохраняет, а вот с текстом вокруг не очень sad((


Могу приложить, если можно лично... Напишите, пожалуйста в асю 216-759-260 или mail Ваш укажите

Спасибо!

10

Re: Разделение таблицы на отдельные документы

Проблема решилась. Как я и предполагал, таблица в документе оказалась не одна. Была невидимая таблица для форматирования, о которой автор забыл.

Лучше день потерять — потом за пять минут долететь!

11

Re: Разделение таблицы на отдельные документы

Спасибо большое! Плюсую в репутацию )