单词vba范围不使用循环重新定位

时间:2016-02-27 05:12:27

标签: vba word-vba

我正在研究一个宏观。它从excel doc中的某些单元格中提取单元格内容,将其中一部分放在单词doc的末尾,加粗第一部分,然后放入其余的字符串并将其展开。然后它在excel中查找下一个匹配项doc并重复,直到没有匹配。

在第二次循环中,它会继续影响第一遍中添加的内容。带有块的字体也会影响前一行并最终加粗整个事物。我在函数的末尾将对象设置为Nothing,所以我不希望它将循环的第一部分视为范围的一部分。

     Do
         x = AssembleSentence(Last, First, Rank)
         Set Loc = .FindNext(Loc)
     Loop While Not Loc Is Nothing And Loc.Address <> sFirstFind

Function AssembleSentence(Last, First, Rank)
    Dim sText0 As String, sText As String, oText As Object
    Set oText = ActiveDocument.Content
    sText0 = First & " " & Last
    sText = ", " & Rank & " Professor at College of Hard Knocks."

    Set oText = ActiveDocument.Content.Paragraphs.Add
    oText.Range.SetRange Start:=ActiveDocument.Range.End, End:=ActiveDocument.Range.End
    Selection.EndKey Unit:=wdStory

    With oText.Range
        .InsertAfter (sText0)
        With .Font
            .Bold = True
        End With
    End With

    Selection.EndKey Unit:=wdStory

    With Selection
        .Text = sText
        With .Font
            .Bold = False
        End With
    End With

    Selection.EndKey Unit:=wdStory

    Set oText = Nothing

End Function

1 个答案:

答案 0 :(得分:0)

仍然不确定为什么循环不会将范围自行重做到最后,但这会修复它以便它停止影响先前的循环内容。

查看我的oText.range开始/结束属性,它看起来像1034/1035,第一遍的长度为1036,然后是第二遍的1036/1209,长度为1210。这就是问题 - 我不知道为什么在第一次传递结束时将对象设置为空后第二次传递不是1208/1209,但是下面的编辑修复了这个问题。

With oText.Range
    .SetRange Start:=oText.Range.End, End:=oText.Range.End
    .InsertAfter (sText0)
    With .Font
        .Bold = True
    End With
End With