我试图根据动态分配的数组的长度从Excel动态地将书签添加到Word文件中。然后,我想将每个书签上的文本更改为数组中相应的值。使用VBA动态创建书签
我这样做的原因,而不是仅仅使用静态书签是程序不知道数组将多久或将包含什么数据,直到它运行。我的思考过程是首次迭代将使用一个“锚点”书签,然后根据需要在原始/前一个书签之后添加书签。
我在下面使用prevRange.End,但它的缺点,因为这不是一个范围,但我觉得它会得到我的观点,我正在试图做什么。
我会使用Bookmarks.InsertAfter,除了我试图在Word中创建一个项目符号列表,并与格式化混乱,并颠倒了列表的顺序。
我宁愿找到一种方法来动态地做到这一点,而不是做一个有大量书签的蛮力方法,然后删除那些我不需要的方法。
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
一个'Bookmark'对象有一个'End'财产 - 有你使用这种用于插入点的尝试,而不是' Range.End'? – ChipsLetten