我正在尝试在项目符号列表中的上一个书签下方的行上生成书签,以便word文档以
开头然后转换为
这样我就可以逐行调整列表的格式,也可以在列表中输入文本。 1D数组Level()控制它将具有哪种类型的项目符号点。书签是基于动态分配的1D数组(称为clar())动态创建的,该数组包含工作表上各点的文本。程序在运行之前不知道数组将包含多少行文本。下面的代码将运行,但程序的输出是
将变为(经过六次迭代)
所以我现在只有一个名为Bookmark6的书签,而不是列表中的六个。我尝试使用上一个书签末尾的范围,但这不会在下一个项目符号点或当前书签之外设置范围。我还尝试使用wbNewLine扩展范围,然后在结束时设置范围,但这是无效的。
Dim Count As Integer
Dim CountM As Integer
Count = 1
Do While Clar(Count) <> ""
CountM = Count - 1
PrevBmarkName = "Clar" & CountM
BmarkName = "Clar" & Count
BmarkText = Clar(Count)
If Count <> 1 Then
Set prevRange = wrdDoc.Bookmarks(PrevBmarkName).Range
Set newRange = prevRange
newRange.SetRange prevRange.End, prevRange.End
ActiveDocument.Bookmarks.Add "BmarkName", newRange
If DesClar(Count + 1) = "" Then 'Stops the program from generating a blank bullet
wrdRange.Text = BmarkText
wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange
Level = Check1(Count) 'Used to adjust the bullet level/type
If Level = 1 Then wrdRange.Style = wrdDoc.Styles("SD Bullets")
If Level = 2 Then wrdRange.Style = wrdDoc.Styles("SD Bullets 2")
Else
wrdRange.Text = BmarkText & vbNewLine
wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange
Level = Check1(Count)
If Level = 1 Then wrdRange.Style = wrdDoc.Styles("SD Bullets")
If Level = 2 Then wrdRange.Style = wrdDoc.Styles("SD Bullets 2")
End If
Else 'Only used on the first iteration because it uses Bookmark1
Set wrdRange = wrdDoc.Bookmarks(BmarkName).Range
wrdRange.Text = BmarkText & vbNewLine
wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange
Level = Check1(Count)
If Level = 1 Then wrdRange.Style = wrdDoc.Styles("SD Bullets")
If Level = 2 Then wrdRange.Style = wrdDoc.Styles("SD Bullets 2")
End If
Count = Count + 1
CountM = CountM + 1
Loop
答案 0 :(得分:1)
2个问题:
首先,wrdRange
仅在第一次通过循环时设置,并且由于If Count <> 1
测试而无法在此之后进行更改。检查wrdRange
对If Count <> 1
的所有引用。
其次,当您设置newRange = prevRange
时,您没有获得新的范围 - 您将获得具有相同引用的两个变量。将行Set newRange = prevRange
更改为Set newRange = prevRange.Duplicate
。