2013-03-01 85 views
0

我attemping通過在Microsoft Word 2007中宏來訪問模板的BuildingBlockEntries集合的成員因爲它是一個集合的時候沒有設置錯誤,我首先想到的一個For Each循環會是最好的方式,以這樣的:對象變量或帶塊變量訪問BuildingBlockEntries集合的成員

For Each bBlock In NormalTemplate.BuildingBlockEntries 
     MessageBox.Show (bBlock.Name) 
    Next bBlock 

然而這種嘗試通過錯誤:Object doesn't support property or method。 所以,我想此方法,該方法建議here

Templates.LoadBuildingBlocks 
Dim iBB As Integer 
iBB = NormalTemplate.BuildingBlockEntries.Count() 
Dim bb As Word.BuildingBlock 
Dim i As Integer 
Dim objCounter As Object 

If iBB > 0 Then 

    For i = 1 To iBB 
    objCounter = i 
    bb = NormalTemplate.BuildingBlockEntries.Item(objCounter) 
    MessageBox.Show (bb.Name) 
    Next 

End If 

然而,這導致在標題所示的錯誤:Object variable or With Block variable not set

我已經嘗試過只是使用整數變量作爲索引,i具體而言,但現在有效。我怎樣才能達到預期的效果?我的嘗試有什麼問題?

謝謝你的幫助。

回答

1

有了您的第二個問題的答案是,你需要使用Set,作爲bb是一個對象:

Set bb = NormalTemplate.BuildingBlockEntries.Item(objCounter) 

有關設置的詳細信息看一看這個SO question

對於您的For/Next循環,尚不清楚您是如何聲明bBlock的。我想這應該是這樣的:

Dim bBlock as BuildingBlock 

或許For行應引用BuildingBlocks而不是BuildingBlockEntries

For Each bBlock In NormalTemplate.BuildingBlocks 

我不知道是肯定的,雖然,因爲我只是在看什麼彈出在Intellisense。

+0

如果我爲bb使用'Set'關鍵字,它暴露了objCounter還需要'Set'調用,當我調用時仍然會導致類型不匹配錯誤:Set bb = NormalTemplate.BuildingBlockEntries.Item( objCounter)' 可能是因爲'BuildingBlockEntries.Item()'正在尋找一個整數作爲參數。但是,如果我刪除了'objCounter = i '並將調用的參數更改爲: 'Set bb = NormalTemplate.BuildingBlockEntries.Item(objCounter)'我得到了期望的效果。謝謝(你的)信息。仍然不清楚如何使用基本構建模塊來獲取模板,但這是一個不同的問題。 – Christian 2013-03-01 18:58:06