Page.DropManyU 方法 (Visio)

在頁面、主圖形或群組中建立一或多個新的 Shape 物件。 它會傳回它所產生之 Shape 物件識別碼的陣列。

語法

expressionDropManyU( _ObjectsToInstance()_ , _xyArray()_ , _IDArray()_ )

表達 代表 Page 物件的變數。

參數

名稱 必要/選用 資料類型 描述
ObjectsToInstance () 必要 Variant 會識別要產生圖形的主圖形或其他物件 (根據其通用名稱)。
xyArray () 必要 雙精確度 交替的 xy 值的陣列,這些值會指定新圖形的位置。
IDArray () 必要 整數 輸出參數。 會傳回所建立圖形之識別碼的陣列。

傳回值

整數

註解

使用 DropManyU 方法就像使用 PageMasterShape 物件的 Drop 方法,但 DropManyU 方法可以用來一次建立很多新的 Shape 物件,而不是每個方法呼叫建立一個物件。 DropManyU 方法會在頁面、主圖形或它所套用的群組圖形 (下列討論中將此圖形稱為「目標物件」) 中建立新的 Shape 物件。

透過傳遞 Master 物件或主圖形的索引或主圖形的名稱給 DropManyU 方法,便能識別要放下哪一個主圖形。 當您傳遞物件時,DropManyU 並不會限制只從文件的文件樣板將主圖形放到它要放置的目標上。 該物件可以是取自另一個文件或另一個物件類型的主圖形。

傳遞整數 (主圖形索引) 或字串 (主圖形名稱) 給 DropManyU 比傳遞物件還快,但是整數或字串只會識別文件的文件樣板中要放下主圖形之位置上的主圖形。 因此,您的程式可能會先將在此討論的主圖形放到文件樣板中 (如果該樣板中還沒有主圖形的話)。

ObjectsToInstance () 應該是n> = 1 個變體的一維陣列。 其專案會識別您要從中建立新 Shape 物件的物件。 專案通常是指 Microsoft Visio 應用程式 Master 物件。 它也可能參考 Visio 應用程式 Shape 物件、 Selection 物件,或甚至是來自另一個應用程式的物件。 應用程式並不會在意 ObjectsToInstance () 專案的下限和上限陣列界限。 分別呼叫這些 vlbvub

  • 如果ObjectsToInstance (i) 是整數j ,則會建立以 1 為基礎之索引為j之目標目的檔之檔樣板中的Master物件實例。 不會觸發新圖形 [事件] 區段中的 EventDrop 儲存格。 如果您想要觸發 EventDrop 儲存格,請改用 Drop 方法。

  • 如果ObjectsToInstance (i) 是字串 (或字串) 參考,則會在目標目的檔的檔樣板中建立名稱為sMaster物件實例;s可以等於Master物件的UniqueIDNameU屬性。 不會觸發新圖形 [事件] 區段中的 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。 陣列中的值會告知 DropManyU 方法要將它產生的 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 上。

DropManyU方法傳回的Integer值是DropManyU方法成功處理之xyArray中的xy專案數目。 如果所有專案都已成功處理, 則會 傳回 m。 如果在發生錯誤之前已成功處理某些專案,則不會刪除產生的 Shape 物件,而且這會引發例外狀況,但仍會傳回正整數。

假設所有mxy專案都已正確處理,DropManyU方法所產生的新Shape物件數目通常等於m。 例如,在極少數情況下 (,如果 Selection 物件) 實例,則可能會產生超過 m的 Shape 物件。 呼叫端可以比較執行DropManyU方法之前和之後目標物件中的圖形數目,來判斷產生的Shape物件數目。 呼叫端可以判斷新的 Shape 物件是目標物件之 Shapes 集合中索引最高的物件。

如果 DropManyU 方法傳回零 (0) , IDArray () 會傳回 null (Nothing) 。 否則,它會傳回從 0 到m - 1 的一維 m整數陣列。 IDArray () 是由 DropManyU 方法配置的 out 參數,擁有權會傳遞給呼叫 DropManyU 方法的程式。 呼叫端最後應該會在傳回的陣列上執行 SafeArrayDestroy 程式。 (Microsoft Visual Basic 和 Microsoft 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。 所有專案iintReturned< = i<m 、傳回 -1。

注意事項

從 Microsoft Visio 2000 開始,您可以使用本機和通用名稱來參照 Visio 圖形、主圖形、檔、頁面、列、附加元件、儲存格、超連結、樣式、字型、主圖形快捷方式、UI 物件和圖層。 例如,當使用者為圖形命名時,使用者會指定本機名稱。 從 Microsoft Office Visio 2003 開始,ShapeSheet 試算表只會在儲存格公式和值中顯示通用名稱。 (在舊版中,使用者介面中看不到通用名稱。)

身為開發人員,如果您不希望每次將方案本土化時就要變更名稱,可以在程式中使用通用名稱。 使用本機名稱來識別圖形時,使用 DropMany 方法可放下一個以上的圖形。 若使用通用名稱來識別圖形,請使用 DropManyU 方法放下一個以上的圖形。

範例

下列範例顯示如何使用 DropManyU 方法。 它會將巨集的 Document 物件的文件樣板中每個主圖形的一個實例放在巨集的 Document 物件的第 1 頁上。 執行此巨集之前,請確定文件樣板中至少有一個主圖形。

 
Public Sub DropManyU_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 universal name of object to drop to DropManyU. 
 varObjectsToInstance(intCounter) = vsoMasters.ItemU(intCounter).NameU 
 
 '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).DropManyU(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 支援與意見反應