2015-05-28 90 views
3

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

一個'Bookmark'對象有一個'End'財產 - 有你使用這種用於插入點的嘗試,而不是' Range.End'? – ChipsLetten

回答

1

您應該能夠使用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 
+0

@Alex昨天晚上我打開袋子之前,我看到了你的評論,但今天早上它沒了。你把所有東西都分類了嗎? – CuberChase

+0

是的,但是我不得不重新考慮如何創建列表。我必須創建列表,然後按相反的順序進行格式設置,因爲書籤還包含上一行的最後一個字符。 '設置newRange = prevRange newRange.SetRange prevRange.End,prevRange.End wrdDoc.Bookmarks.Add 「BmarkName」,newRange newRange.Text = vbNewLine&BmarkText wrdDoc.Bookmarks.Add名稱:= BmarkName,範圍:= newRange'然後在別處格式化 – Alex