Не зная больше (например, значение StrTxt
), я не могу точно сказать , почему вы получаете сообщение об ошибке, но, скорее всего, это неверное имя файла или файл заблокировандругим процессом или проблемой с разрешениями.
Возможно, приведенная ниже процедура подойдет вам лучше.(Мне неясно, какое значение имеют «записи» в вашем коде.)
Разделение документа на отдельные файлы для каждой страницы:
Эта процедура разбивает ActiveDocument
на одну.DOCX
файла на «видимую страницу» (расчетные разрывы страниц, ручные разрывы страниц, разрывы разделов и т. Д.). \
Sub WordDocToPages()
'splits active Word doc by page into separate DOCX files (same folder as active doc)
Dim doc As Document, docPage As Document, rgPage As Range
Dim pgNum As Long, pgCnt As Long, ext As String, fName As String
Set doc = ActiveDocument 'Use current document
Set rgPage = doc.Range 'create range of 1 page
Application.ScreenUpdating = False 'prevent screen updates
pgCnt = doc.Content.Information(wdNumberOfPagesInDocument) 'get page count
Do While pgNum < pgCnt
pgNum = pgNum + 1 'increment page counter
Application.StatusBar = "Saving page " & pgNum & " of " & pgCnt
If pgNum < pgCnt Then
Selection.GoTo wdGoToPage, wdGoToAbsolute, pgNum + 1 'top of next page
rgPage.End = Selection.Start 'end of page=top of next
Else
rgPage.End = doc.Range.End 'end of last page=EOF
End If
rgPage.Copy 'copy page
Set docPage = Documents.Add(Visible:=False) 'create new document
With docPage
With .Range
.Paste 'paste page
.Find.Execute Findtext:="^m", ReplaceWith:="" 'remove manual breaks
.Select
End With
With Selection
.EndKey wdStory 'goto end of doc
.MoveLeft wdCharacter, 1, wdExtend 'remove final CR
If Asc(.Text) = 13 Then .Delete wdCharacter, 1 'remove trailing CR
End With
ext = Mid(doc.FullName, InStrRev(doc.FullName, ".")) 'extract file extension
fName = Replace(doc.FullName, ext, " #" & _
Format(pgNum, String(Len(CStr(pgCnt)), "0")) & ".docx") 'new filename
.SaveAs fName, wdFormatDocumentDefault 'save single-page doc
.Close 'close new document
End With
rgPage.Collapse wdCollapseEnd 'ready for next page
Loop
Application.ScreenUpdating = True 'resume screen updates
Application.StatusBar = "Document was split into " & pgNum & " files."
Set docPage = Nothing: Set rgPage = Nothing: Set doc = Nothing 'cleanup objects
End Sub
Это свободно основано на примере в Полезное совместное использование программного обеспечения.
Новые файлы сохраняются в той же папке, что и ActiveDocument.Path
, к заголовку документа добавляется порядковый номер.Обратите внимание, что существующие выходные файлы перезаписаны , и нет проверки или обработки ошибок.