【问题标题】:Adding contents in specific point of the text using vba使用 vba 在文本的特定点添加内容
【发布时间】:2015-10-14 21:37:50
【问题描述】:

我有一个文档模板 .docx,我必须对其进行编辑,在特定点添加字符串。如下所示:

测试模式:这里必须添加一些文本,它可以占用更多行,应该在每一行上缩进。
涉及的项目:这里有一些必须添加文本...
输入和模拟参数:这里必须添加一些文本 ...

直到 Kow 我一直在使用以下代码

Sub FillingParagraphs()
    Dim SubPara As Paragraph
    Dim SubLevel As String
    SubLevel = "3.1.1.1"
    'Filling each subparagraph
    For k = 1 To 3
        For Each SubPara In ActiveDocument.Paragraphs
            j = j + 1
            If SubPara.Range.ListFormat.ListString = SubLevel Then
                Selection.Start = ActiveDocument.Content.ListString
            ActiveDocument.Paragraphs(j + 2).Range.Words(5) = "Text to be added" & Chr(10)
            MsgBox j
            End If
        Next
        'Update the string with the next subparagraph
            SubLevel = "3.1.1." & CStr(k + 1)
        j = 0
    Next
End Sub

虽然它有效,但我需要指定开始写作计算单词和段落的确切点:

ActiveDocument.Paragraphs(j + 2).Range.Words(5)

这种方式不太聪明,所以我想修改我的代码,如下所示:

Selection.Start = ActiveDocument.Content.END_SUBSTRING_1
Selection.TypeParagraph
Selection.TypeText (" Text to be added")

有什么想法吗?

【问题讨论】:

    标签: vba selection ms-word


    【解决方案1】:

    也许你需要这样的东西:

    Sub InsertText(findWhat As String, insertAfter As String)
        With ActiveDocument.Range.Find
            .ClearFormatting
            .Text = findWhat
            .Replacement.ClearFormatting
            .Replacement.Text = findWhat & " " & insertAfter
            .MatchWholeWord = True
            .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindStop
        End With
    End Sub
    
    Sub test()
        InsertText "some text to find", "some text to be added"
    End Sub
    

    【讨论】:

    • 这是一个很好的起点,因为“我需要在每个 findWhat 上插入不同的文本”。我的意思是,我应该有类似的东西,findWhat: first_Insert, findWhat: second_Insert 等等。无论如何,这非常有帮助,非常感谢!
    【解决方案2】:

    我尝试更改以下过程,其中我为要搜索的函数指定了一个范围:

    Sub InsertText(findWhat As String, insertAfter As String, MyRange As Range)
        With ActiveDocument.MyRange.Find
            .ClearFormatting
            .Text = findWhat
            .Replacement.ClearFormatting
            .Replacement.Text = findWhat & " " & insertAfter
            .MatchWholeWord = True
            .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindStop
        End With
    End Sub
    

    所以在代码的另一部分我定义了一个范围并使用默认值设置它,然后根据我的需要重置我的范围:

    Level1 = "3.1.1.1"
    Level2 = "3.1.1.2"
    

    '用默认值定义 MyRange

    Dim MyRange As Range
    Dim StartRange As Integer
    Dim EndRange As Integer
    Set MyRange = ActiveDocument.Range(0, 0)
    

    '重新定义我的范围

    For Each RngPara In ActiveDocument.Paragraphs
            i = i + 1
            If RngPara.Range.ListFormat.ListString = Level1 Then
            StartRange = i
            ElseIf RngPara.Range.ListFormat.ListString = Level2 Then
            EndRange = i
            End If
    
            MyRange.SetRange     Start:=MyRange.Start,End:=ActiveDocument.Paragraphs(3).Range.End
    Next 
    InsertText "Scope of test:", Scopo(j), MyRange
    

    无论如何它都不起作用!这有什么问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 2014-06-07
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多