我試圖根據動態分配的數組的長度從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