Ошибка 5941 VBA Word 2016 - сохранить файл, получить имя из таблицы - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь разбить мой текстовый документ по страницам и сохранить разбиения как новые файлы с именами из ячеек в разных таблицах, которые одинаковы на каждой странице.Ошибка, с которой я сталкиваюсь:

Ошибка времени выполнения '5941':

Запрашиваемый элемент коллекции не существует.

Мой код на данный момент:

Sub splitter()
'
'
Dim Counter As Long, Source As Document, Target As Document
Set Source = ActiveDocument
Selection.HomeKey Unit:=wdStory
Pages = Source.BuiltInDocumentProperties(wdPropertyPages)
Counter = 0
While Counter < Pages
Counter = Counter + 1
DocName = "" _
    & Left(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text))
Source.Bookmarks("\Page").Range.Cut
Set Target = Documents.Add
Target.Range.Paste
Target.SaveAs FileName:=DocName
Target.Close
Wend
End Sub

Ошибка, указанная в заголовке, возникает в следующих строках кода:

DocName = "" _
    & Left(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text))

Я не уверен, какустранить эту ошибку

Второй вопрос: где я могу установить каталог, в котором документы сохраняются в этом коде?

1 Ответ

0 голосов
/ 21 мая 2018

По крайней мере, частично проблема в том, что вы получаете символы конца ячейки для каждой ячейки.Попробуйте:

DocName = "" _
    & Split(Source.Tables(3).Cell(1 ,2).Range.Text, vbCr)(0) _
    & Split(Source.Tables(5).Cell(1, 2).Range.Text, vbCr)(0) _
    & Split(Source.Tables(6).Cell(1, 2).Range.Text, vbCr)(0)

Вы также не указываете расширение файла, формат и т. Д. Как часть SaveAs.

Вас также может заинтересовать Разделить объединенный вывод наОтдельные документы в потоке Советы и рекомендации по Mailmerge по адресу: http://www.msofficeforums.com/mail-merge/21803-mailmerge-tips-tricks.html, который, помимо прочего, показывает, как предоставить требуемые параметры SaveAs.

...