Split Word document into multiple parts and keep the text format

江枫思渺然 提交于 2019-12-13 03:47:33

问题


My Task

Split a Word document into multiple parts based on a delimiter while preserving the text format.

Where I am?

I tried a basic example with one document but without an array and it worked.

Option Explicit

Public Sub CopyWithFormat()
    Dim docDestination As Word.Document
    Dim docSource      As Word.Document

    Set docDestination = ActiveDocument
    Set docSource      = Documents.Add

    docSource.Range.FormattedText = docDestination.Range.FormattedText
    docSource.SaveAs "C:\Temp\" & "test.docx"
    docSource.Close True             
End Sub

Where do I stuck?

I put the whole document into an array and loop through it. Right not I get an error 424 - Object necessary on this line: docDestination.Range.FormattedText = arrNotes(I).

I also tried these four variants without luck:

docDestination.Range.FormattedText = arrNotes(I).Range.FormattedText
docDestination.Range.FormattedText = arrNotes(I).FormattedText
docDestination.Range.FormattedText = arrNotes.Range.FormattedText(I)
docDestination.Range.FormattedText = arrNotes.FormattedText(I)

Could you please help and point me into the right direction on how to access the array properly?

My Code

Option Explicit

Sub SplitDocument(delim As String, strFilename As String)
    Dim docSource      As Word.Document
    Dim docDestination As Word.Document
    Dim I              As Long
    Dim X              As Long
    Dim Response       As Integer
    Dim arrNotes

    Set docSource = ActiveDocument
    arrNotes      = Split(docSource.Range, delim)

    For I = LBound(arrNotes) To UBound(arrNotes)
        If Trim(arrNotes(I)) <> "" Then
            X = X + 1
            Set docDestination = Documents.Add
            docDestination.Range.FormattedText = arrNotes(I) 'throws error 424
            docDestination.SaveAs ThisDocument.Path & "\" & strFilename & Format(X, "0000")
            docDestination.Close True
        End If
    Next I
End Sub

Sub test()
    'delimiter & filename
    SplitDocument "###", "Articles "
End Sub

回答1:


Range.FormattedText returns a range object. The Split function, on the other hand, returns an array of strings which don't include formatting. Therefore your code should find the portion of the document you wish to copy and assign that part's FormattedText to a variable declared as Range. That variable could then be inserted into another document.

Private Sub CopyRange()

    Dim Src As Range, Dest As Range
    Dim Arr As Range

    Set Src = Selection.Range
    Set Arr = Src.FormattedText

    Set Dest = ActiveDocument.Range(1, 1)
    Dest.FormattedText = Arr
End Sub

The above code actually works. All you would need to do is to find a way to replace the Split function in your concept with a method that identifies ranges in the source document instead of strings.



来源:https://stackoverflow.com/questions/47458799/split-word-document-into-multiple-parts-and-keep-the-text-format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!