将Word文档拆分为多个部分并保留文本格式

时间:2017-11-23 15:23:53

标签: vba vbscript word-vba

我的任务

基于分隔符将Word文档拆分为多个部分,同时保留文本格式。

我在哪儿?

我尝试了一个带有一个文档的基本示例但是没有数组并且它有效。

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

我在哪里停留?

我将整个文档放入一个数组并循环遍历它。对不起,我在这一行得到error 424 - Object necessarydocDestination.Range.FormattedText = arrNotes(I)

我也没试过这四种变种:

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)

请您帮忙并指出我如何正确访问阵列的正确方向?

我的代码

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 个答案:

答案 0 :(得分:1)

Range.FormattedText返回一个范围对象。另一方面,Split函数返回一个不包含格式的字符串数组。因此,您的代码应找到您要复制的文档部分,并将该部分FormattedText分配给声明为Range的变量。然后可以将该变量插入另一个文档中。

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

上面的代码实际上有效。您需要做的就是找到一种方法来替换概念中的Split函数,该方法使用一种方法来识别源文档中的范围而不是字符串。