在Word中dynamic分配项目符号列表中的书签

我正在试图在项目符号列表中的前一个书签的下一行上生成一个书签,以便Word文档作为开始

  • [Bookmark1]

然后转化为

  • [Bookmark1]
  • [Bookmark2]
  • 等等。

以便我可以逐行调整列表的格式,并在列表中input文本。 一维数组Level()控制哪一种types的项目符号。 书签是基于dynamic分配的一维数组(称为clar())dynamic创build的,该数组包含来自工作表上不同点的文本。 程序不知道数组将包含多less行文本,直到它运行。 下面的代码将运行,但程序的输出是

  • [Bookmark1]

会变成(经过六次迭代)

  • [Boomark6]

所以我只有一个名为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 

2问题:

首先, wrdRange只在循环中第一次被设置,并且由于If Count <> 1testing而不能改变。 检查所有对wrdRange的引用是否If Count <> 1

其次,当你设置newRange = prevRange ,你没有得到一个新的范围 – 你有两个相同的参考variables。 更改行Set newRange = prevRange Set newRange = prevRange.Duplicate