Visio) (Master.DropMany 方法
在主圖形中建立一或多個新的 Shape 物件。 它會傳回它所產生之 Shape 物件識別碼的陣列。
語法
expression。
DropMany
( _ObjectsToInstance()_
, _xyArray()_
, _IDArray()_
)
表達 代表 Master 物件的變數。
參數
名稱 | 必要/選用 | 資料類型 | 描述 |
---|---|---|---|
ObjectsToInstance () | 必要 | Variant | 陣列,會識別要產生圖形的主圖形或其他物件。 |
xyArray () | 必要 | 雙精確度 | 交替的 x 及 y 值的陣列,這些值會指定新圖形的位置。 |
IDArray () | 必要 | 整數 | 輸出參數。 會傳回所建立圖形之識別碼的陣列。 |
傳回值
整數
註解
使用 DropMany 方法就像使用 Page、Master 或 Shape 物件的 Drop 方法,但 DropMany 方法可以用來一次建立很多新的 Shape 物件,而不是每個方法呼叫建立一個物件。 DropMany 方法會在頁面、主圖形或它所套用的群組圖形 (下列討論中將此圖形稱為「目標物件」) 中建立新的 Shape 物件。
透過傳遞 Master 物件或主圖形的索引或主圖形的名稱給 DropMany 方法,便能識別要放下哪一個主圖形。 當您傳遞物件時,DropMany 並不會限制只從文件的文件樣板將主圖形放到它要放置的目標上。 該物件可以是取自另一個文件或另一個物件類型的主圖形。
傳遞整數 (主圖形索引) 或字串 (主圖形名稱) 給 DropMany 比傳遞物件還快,但是整數或字串只會識別文件的文件樣板中要放下主圖形之位置上的主圖形。 因此,您的程式可能會先將在此討論的主圖形放到文件樣板中 (如果該樣板中還沒有主圖形的話)。
ObjectsToInstance () 應該是 n>= 1 變體的一維陣列。 其項目會識別您要從中建立新 Shape 物件的物件。 專案通常是指Microsoft Visio 應用程式 Master 物件。 它也可能參考 Visio 應用程式 Shape 物件、 Selection 物件,或甚至是來自另一個應用程式的物件。 應用程式並不會在意 ObjectsToInstance () 專案的下限和上限數位界限。 分別呼叫這些 vlb 和 vub 。
如果 ObjectsToInstance (i) 是 OLE 對象的參考,該物件會在 Microsoft Visual Basic for Applications 中提供 IDataObject 介面 (、選取範圍、圖形、主圖形、參考或 OLE 物件) 的參考,則會實例化它所參考的物件。 這基本上相當於呼叫 Drop (ObjectsToInstance (i) ,x,y) 。
如果 ObjectsToInstance (i) 是整數 j ,則會建立以 1 為基礎之索引為 j 之目標物件檔之文件樣板中的 Master 物件實例。 不會觸發新圖形 [事件] 區段中的 EventDrop 單元格。 如果您想要觸發 EventDrop 單元格,請改用 Drop 方法。
如果 ObjectsToInstance (i) 是字串的 (或字串 ) 的參照,則會在目標對象檔的文件樣板中建立名稱為 s 的 Master 物件實例;s 可以等於 Master 物件的 UniqueID 或 Name 屬性。 不會觸發新圖形 [事件] 區段中的 EventDrop 單元格。 如果您想要觸發 EventDrop 單元格,請改用 Drop 方法。
針對 vlb<i<= vub ,如果 ObjectsToInstance (i) 是空的, (Nothing 或在 Microsoft Visual Basic) 中未初始化,則輸入 i 會導致 ObjectsToInstance (j) 再次實例,其中 j 是最大值 <i ,因此 ObjectsToInstance (j) 不是空的。 如果您想要對相同項目產生 n 個實例,只需要提供 ObjectsToInstance(vlb)。
xyArray () 參數應該是 2 m 的一維陣列,具有下限 xylb 和上限 xyub,其中 m>= n。 陣列中的值會告知 DropMany 方法要將它產生的 Shape 物件放置在什麼位置。 ObjectsToInstance ( vlb + ( i - 1) ) 卸除於 ( xy [ ( i - 1) 2 + xylb ], xy [ (i - 1) 2 + xylb + 1]) 為 1 <= i<= n。
請注意, 允許 m>n 。 針對 n<i<= m ,實例的 i 'th thing 與實例的第 n 個專案相同。 因此,若要讓 m>= 1 實例成為相同的專案,您可以傳遞 ObjectsToInstance () 陣列,其中包含一個專案和 一個 m 專案 xyArray () 陣列。
如果實例化的實體是一個主圖形,新 Shape 物件的針會定位在指定的 xy 上。 否則,會將 Shape 物件的中心定位在指定的 xy 上。
DropMany 方法傳回的值是 xyArray 中 DropMany 方法成功處理的 xy 項目數 () 。 如果所有專案都已成功處理, 則會 傳回 m。 如果在發生錯誤之前已成功處理某些專案,則不會刪除產生的 Shape 物件,這會引發例外狀況,但仍會傳回正值。
假設所有 mxy 專案都已正確處理,DropMany 方法所產生的新 Shape 物件數目通常等於 m。 例如,在極少數情況下 (,如果 Selection 物件) 實例,則可能會產生超過 m的 Shape 物件。 呼叫端可以比較執行DropMany方法之前和之後目標物件中的圖形數目,來判斷產生的Shape物件數目。 呼叫端可以判斷新的 Shape 對像是目標物件之 Shapes 集合中索引最高的物件。
如果 DropMany 方法傳回零 (0 ) ,IDArray () 會傳回 null (Nothing) 。 否則,它會傳回從 0 到 m - 1 的一維 m 整數陣列。 IDArray () 是 DropMany 方法所配置的 out 參數,擁有權會傳遞給呼叫 DropMany 方法的 程式。 呼叫端最後應該會在傳回的數位上執行 SafeArrayDestroy 程式。 (Microsoft Visual Basic 和 Visual Basic for Applications 會為您處理此 )
如果 IDArray () 傳回非 null (不是 Nothing) ,則 IDArray ( i - 1) , 1 <= i<= intReturned , 會傳回 i 'th xyArray () 專案所產生的 Shape 物件標識符,前提是 i 'th xyArray () 專案只產生一個 Shape 物件。 如果 i 'th xyArray () 項目產生多個 Shape 物件,則專案中會傳回 -1。 所有專案 i 、 intReturned<= i<m 、傳回 -1。
注意事項
從 Microsoft Visio 2000 開始,您可以使用本機和通用名稱來參照 Visio 圖形、主圖形、檔、頁面、數據列、附加元件、單元格、超連結、樣式、字型、主圖形快捷方式、UI 物件和圖層。 例如,當使用者為圖形命名時,用戶會指定本機名稱。 從 Microsoft Office Visio 2003 開始,ShapeSheet 電子表格只會在單元格公式和值中顯示通用名稱。 (在舊版中,使用者介面中看不到通用名稱。)
身為開發人員,如果您不希望每次將方案本土化時就要變更名稱,可以在程式中使用通用名稱。 使用本機名稱來識別圖形時,使用 DropMany 方法可放下一個以上的圖形。 若使用通用名稱來識別圖形,請使用 DropManyU 方法放下一個以上的圖形。
範例
下列範例顯示如何使用 DropMany 方法。 它會將巨集的 Document 物件的文件樣板中每個主圖形的一個實例放在巨集的 Document 物件的第 1 頁上。 執行此巨集之前,請確定文件樣板中至少有一個主圖形。
Public Sub DropMany_Example()
On Error GoTo HandleError
Dim vsoMasters As Visio.Masters
Dim intMasterCount As Integer
Set vsoMasters = ThisDocument.Masters
intMasterCount = vsoMasters.Count
ReDim varObjectsToInstance(1 To intMasterCount) As Variant
ReDim adblXYArray(1 To intMasterCount * 2) As Double
Dim intCounter As Integer
For intCounter = 1 To intMasterCount
'Pass name of object to drop to DropMany.
varObjectsToInstance(intCounter) = vsoMasters.Item(intCounter).Name
'Set x components of where to drop to 2,4,6,2,4,6,2,4,6,...
adblXYArray (intCounter * 2 - 1) = (((intCounter - 1) Mod 3) + 1) * 2
'Set y components to 2,2,2,4,4,4,6,6,6,...
adblXYArray (intCounter * 2) = Int((intCounter + 2) / 3) * 2
Next intCounter
Dim aintIDArray() As Integer
Dim intProcessed As Integer
intProcessed = ThisDocument.Pages(1).DropMany(varObjectsToInstance, _
adblXYArray, aintIDArray)
Debug.Print intProcessed
For intCounter = LBound(aintIDArray) To UBound(aintIDArray)
Debug.Print intCounter; aintIDArray(intCounter)
Next intCounter
Exit Sub
HandleError:
MsgBox "Error"
Exit Sub
End Sub
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。