Share via


使用圖形 (繪圖物件)

圖形,或是繪圖物件,可用三種不同的物件來代表:Shapes 集合、ShapeRange 集合和 Shape 物件。 一般而言,使用 Shapes 集合可建立圖案,並在指定工作表內循環顯示;您可以用 Shape 物件修改單一圖案的格式;而用 ShapeRange 集合,可像在使用者介面上使用多個選定圖案那樣,同時修改多個圖案。

設定圖案的屬性

有許多圖案的格式屬性,並非是直接套用 Shape 物件或 ShapeRange 物件的屬性來設定的。 而是彼此相關的圖案屬性會構成次要物件下的群組,例如 FillFormat 物件 (其中包含圖案之填滿格式的所有相關屬性),或是 LinkFormat 物件 (其中包含所連結 OLE 物件的所有特定屬性)。 如果要設定圖案的屬性,必須先傳回代表一組相關圖案屬性的物件,然後設定所傳回物件的屬性。 例如,如果要設定指定圖案的前景填滿色彩,請先用 Fill 屬性傳回 FillFormat 物件,然後再設定 FillFormat 物件的 ForeColor 屬性,如下列範例所示。

Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

同時對多個圖案套用屬性或方法

在使用者介面上,您可以同時對多個選定圖案執行某些作業;例如,您可以選取數個圖案,然後同時設定它們的填滿格式。 但有些作業只能對單個選定圖案執行;例如,您一次只能編輯一個圖案中的文字。

在 Visual Basic 中,有兩種方式可對一組圖案同時套用屬性和方法。 這兩種方式能讓您對某範圍的圖案,執行在單個圖案上所能執行的任何作業,不論該作業是否可在使用者介面上執行。

  • 如果您可在使用者介面上對多個選定圖案執行該作業,那麼在 Visual Basic 中,即可透過建構包含要使用之圖案的 ShapeRange 集合,直接對 ShapeRange 集合套用適當的屬性和方法,來執行相同的作業。

  • 如果無法在使用者介面上對多個選定圖案同時執行該作業,那麼在 Visual Basic 中,仍可透過下列方法來執行該作業:在包含要使用之圖案的 Shapes 集合或 ShapeRange 集合中迴圈,然後對集合中的個別 Shape 物件套用適當的屬性和方法。

許多適用於 Shape 物件和 ShapeRange 集合的屬性和方法,在套用至特定型態的圖案時會失敗。 例如,將 TextFrame 屬性套用至無法包含文字的圖案時,該屬性就會失敗。 如果無法確定 ShapeRange 集合中的每個圖案都能套用特定的屬性或方法,就不要對 ShapeRange 集合套用該屬性或方法。 如果要對某一圖案集合套用這些屬性或方法的其中之一,就必須針對集合使用迴圈,並在套用屬性或方法之前,確定該圖案是合適的圖案類型。

對 ShapeRange 集合套用屬性或方法

如果您可以在使用者介面上針對多個選取的圖案同時執行某項作業,就能夠以程式設計方式執行相同的作業,方法是藉由建構 ShapeRange 集合,並套用適當的屬性或方法。 在下列範例中,會在 myDocument 上建構包含名為 "Big Star" 和 "Little Star" 的快取圖案範圍,然後對這兩個圖形套用漸層填滿。

Set myDocument = ActivePresentation.Slides(1) 
Set myRange = myDocument.Shapes _ 
    .Range(Array("Big Star", "Little Star")) 
myRange.Fill.PresetGradient msoGradientHorizontal, _ 
    1, msoGradientBrass

下列是對 ShapeRange 集合套用屬性和方法的一般準則。

  • 對集合套用方法,就等於對該集合內的每個單獨 Shape 物件套用同一種方法。

  • 設定該集合的某一屬性值,等於設定該集合內每個單獨圖案的同一屬性值。

  • 集合中傳回常數的屬性,在集合內所有圖形的該屬性都為同一值時,會傳回集合中個別圖形的屬性值。 當集合物件內所有圖形的該屬性的值不全相等時,將傳回「混合」常數。

  • 集合物件中傳回簡單資料類型 (如 LongSingleString) 的屬性,在集合內所有圖案的該屬性都為同一值時,即傳回個別圖案的屬性值。

  • 只有在集合中僅包含一個圖案時,才能傳回或設定某些屬性的值。 如果該集合中有多個圖案,傳回或設定這類屬性將導致執行階段錯誤。 一般而言,在使用者介面上的等同作業只能對單一圖案進行時 (例如編輯圖案中的文字,或編輯手繪多邊形端點),傳回或設定這類屬性就會發生這種情況。

當設定那些組織在 ShapeRange 集合之次要物件 (如 FillFormat 物件) 中的圖案屬性時,上述準則同樣適用。 如果該次要物件所代表的作業能在使用者介面上對多個選取物件同時進行,那麼就能從 ShapeRange 集合傳回該物件,並設定其屬性。 例如,可用 Fill 屬性傳回代表 ShapeRange 集合物件中所有圖案的填滿格式的 FillFormat 物件。 設定此 FillFormat 物件的屬性,即設定 ShapeRange 集合物件中所有單獨圖案的同一屬性。

在 Shapes 或 ShapeRange 集合中迴圈

即使無法在使用者介面上選取多個圖案,然後使用指令對這些圖案同時執行某項作業,也能夠以程式設計方式來完成相同的動作,方法是在包含要處理之圖案的 Shapes 集合或 ShapeRange 集合中使用迴圈,對集合中的各個 Shape 物件套用適當的屬性和方法。 以下範例會循環檢查 myDocument 上的所有圖形,並將文字新增到屬於快取圖案的每個圖形。

Set myDocument = ActivePresentation.Slides(1) 
For Each sh In myDocument.Shapes 
    If sh.Type = msoAutoShape Then 
        sh.TextFrame.TextRange.InsertAfter " (version 1)" 
    End If 
Next

下列範例會建構 ShapeRange 集合,其中包含使用中視窗內的所有已選取圖案,然後為集合中可包含文字的每個圖案設定文字。

For Each sh in ActiveWindow.Selection.ShapeRange
    If sh.HasTextFrame Then
        sh.TextFrame.TextRange = "Initially selected"
    End If
Next

在圖案範圍中對齊、分散和群組圖案

使用 Align 方法和 Distribute 方法,即可依照圖案彼此間的相對位置或與包含這些圖案之文件的相對位置,來決定一組圖案的位置。 使用 Group 方法或 Regroup 方法,即可將一組圖案組合成單一群組圖案。

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應