使用VBAdynamic创build书签

我试图dynamic地添加书签到一个Word文件从Excel基于dynamic分配的数组的长度。 然后,我想要将每个书签上的文本更改为数组中相应的值。

我这样做的原因,而不是仅仅使用静态书签是程序不知道数组将会是多久或什么数据将被包括,直到它运行。 我的思考过程是有一个“锚”书签,第一次迭代将使用,然后根据需要添加书签后的原始/前一个。

我在下面使用prevRange.End,但它的缺点,因为这不是一个范围,但我觉得这将得到我的观点,我正在试图做什么。

我会使用Bookmarks.InsertAfter,除了我想在Word中创build一个项目符号列表,这与格式混乱,并颠倒了列表的顺序。

我宁愿find一种方法来dynamic地做到这一点,而不是做一个有大量书签的蛮力方法,然后删除那些我不需要的方法。

wrdRange,prevRange和wrdDoc在程序中的其他地方定义。

Dim Count As Integer Dim CountM As Integer Count = 1 Do While Clar(Count) <> "" 'Clar() is a dynamically allocated 1D array containing text CountM = Count - 1 PrevBmarkName = "Clar" & CountM BmarkName = "Clar" & Count 'Only bookmark in Word document to start with is Clar1 BmarkText = Clar(Count) If Count <> 1 Then Set prevRange = wrdDoc.Bookmarks(PrevBmarkName).Range wrdDoc.Bookmarks.Add Name:="BmarkName", Range:=prevRange.End 'Faults here because prevRange.end isn't a range Set wrdRange = wrdDoc.Bookmarks(BmarkName).Range If Clar(Count + 1) = "" Then 'Used for the end of the list so there isn't a floating bullet point wrdRange.Text = BmarkText wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange Else wrdRange.Text = BmarkText & vbNewLine wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange End If Else 'Functions normally through the first iteration, replaces Clar1 with clar(1) text Set wrdRange = wrdDoc.Bookmarks(BmarkName).Range wrdRange.Text = BmarkText & vbNewLine wrdDoc.Bookmarks.Add Name:=BmarkName, Range:=wrdRange End If Count = Count + 1 CountM = CountM + 1 Loop 

您应该能够使用SetRange方法如下所示:

  Set prevRange = wrdDoc.Bookmarks(PrevBmarkName).Range Set newRange = prevRange 'Have to set the range to something initially newRange.SetRange prevRange.End, prevRange.End ActiveDocument.Bookmarks.Add "BmarkName", newRange