我正在研究一个宏观。它从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
答案 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