2015-05-29 25 views
0

我试图生成在子弹列表中的一个书签,线下一个书签,使得Word文档开始为动态分配书签的项目符号列表在Word

  • [Bookmark1]

,然后被变换成

  • [Bookmark1]
  • [Bookmark2]

这样我就可以逐行调整列表的格式并在列表中输入文本。 1D数组Level()控制它将要使用哪种类型的项目符号。书签是基于动态分配的一维数组(称为clar())动态创建的,该数组包含来自工作表上不同点的文本。该程序不知道数组在运行前将包含多少行文本。下面的代码将运行,但该程序的输出是

  • [Bookmark1]

会变成(后6次迭代)

  • [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 

回答

1

2个问题:

首先,wrdRange只能通过循环设定的第一时间,也可以后,由于If Count <> 1测试不会改变。检查所有对的引用为If Count <> 1

其次,当您设置newRange = prevRange时,您没有获得新的范围 - 您将得到两个具有相同参考的变量。将行Set newRange = prevRange更改为Set newRange = prevRange.Duplicate

相关问题