如何使用 VBA 在 PowerPoint 中創建和插入形狀?

如何使用 VBA 在 PowerPoint 中創建和插入形狀?

幾天前,我想自動化創建一些 PowerPoint 幻燈片的相當平凡的任務。自動化 PowerPoint 時,您通常使用幻燈片和形狀集合。幻燈片是不言自明的,形狀幾乎是所有其他東西,包括文本框、操作按鈕、媒體對象、標籤、圖片、標註、流程圖等等。雖然我將使用 PowerPoint 展示這些技術,但其中一些語法實際上非常適用於 Microsoft Word 和 Excel。

回顧一下,在開始在 PowerPoint 中進行 VBA 宏開發之前,您需要啟用開發選項卡

首先,讓我們開始使用一些幻燈片自動創建演示文稿,如本教程所示:在 VBA 中創建演示文稿

現在我們可以開始使用 Shapes 了。首先,讓我們繼續按 Alt+F11 打開 VBA 編輯器。如果您按照上一個教程進行操作,您的模塊列表中應該有模塊 1(如下所示)

使用 VBA 處理形狀

使用 VBA 添加文本框

我們將首先在演示文稿的第一張幻燈片中添加一個垂直文本框。將以下代碼添加到 Module1,然後繼續並點擊保存按鈕 (Ctrl+s) 並運行您的宏(點擊 F5 或點擊運行子/用戶表單)。

Sub CreateTextBox()
Set MySlide = ActivePresentation.Slides(2)

    With MySlide.Shapes
        .AddTextbox(Orientation:=msoTextOrientationVertical, _
         Left:=90, Top:=200, Width:=80, _
         Height:=200).TextFrame.TextRange.Text _
        = ("This is my vertical text box")

End With

End Sub

請注意,您可以使用 VBA 輕鬆調整文本框的尺寸。在這種情況下,我們將在第二張幻燈片中調整第一個形狀的大小,根據需要隨意修改。

Sub ResizeText()
Set MyShape = ActivePresentation.Slides(2).Shapes(1)

'Add your required dimensions as needed below
   With MyShape
         .Width = 200
         .Height = 35

End With
End Sub

使用 VBA 的文本效果

現在讓我們假設我們想要為演示文稿中的所有幻燈片添加一個文本框,這一次更具視覺吸引力。為此,我們將使用 VBA 創建自定義文本效果,我們可以將其嵌入到演示文稿中的一張或多張幻燈片中。我們將首先循環瀏覽演示幻燈片,然後根據需要添加文本效果。

Sub SetEffects()

Dim i As Integer

For i = 1 To ActivePresentation.Slides.Count
    ActivePresentation.Slides(i) _
    .Shapes.AddTextEffect msoTextEffect12, "Draft for Review", _
    "Segoe UI", 32, msoTrue, msoTrue, 650, 50
Next

End Sub

這是結果;-):

如何使用 VBA 在 PowerPoint 中創建和插入形狀?

請注意,您不妨使用簡單的水印來完成此特定結果。

帶有 VBA 的 PowerPoint 標註

我們的下一個示例將在您的演示文稿中添加標註。在此示例中,我們將在第二張幻燈片中添加標註。

Sub CreateCallout()

ActivePresentation.Slides(2).Shapes.AddCallout(Type:=msoCalloutTwo, Left:=200, Top:=50, _  Width:=300, Height:=100).TextFrame.TextRange.Text = "My Callout"

End Sub

設定形狀的屬性

形狀的許多格式化屬性不是由直接應用於 Shape 或 ShapeRange 物件的屬性所設定的。相反,相關的形狀屬性會分組在輔助物件下,例如 FillFormat 物件(其中包含與形狀填滿相關的所有屬性)或 LinkFormat 物件(其中包含連結的 OLE 物件特有的所有屬性)。若要設定形狀的屬性,必須先傳回表示相關形狀屬性集的對象,然後設定該返回對象的屬性。例如,使用 Fill 屬性傳回 FillFormat 對象,然後設定 FillFormat物件 的 ForeColor屬性 來設定指定形狀的填滿前景色,如下例所示。

VB

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 集合,然後對其套用適當的屬性或方法來執行等效的程式設計操作。以下範例建構一個形狀範圍,其中包含名為「Big Star」和「Little Star」的自選圖形,並對它們應用漸變填充。myDocument

VB

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

以下是有關屬性和方法應用於 ShapeRange 集合時的行為方式的一般準則。

  • 將方法應用於集合相當於將該方法應用於該集合中的每個單獨的 Shape 物件。

  • 設定集合的屬性值相當於設定該範圍內每個單獨形狀的屬性值。

  • 如果集合中的所有形狀都具有相同的屬性值,則傳回常數的集合的屬性將傳回集合中單一形狀的屬性值。如果集合中並非所有形狀都具有相同的屬性值,則它會傳回「混合」常數。

  • 如果集合中的所有形狀都具有相同的屬性值,則傳回簡單資料類型(例如 Long、  Single或 String)的集合屬性將傳回單一形狀的屬性值。

  • 只有當集合中只有一個形狀時,才能傳回或設定某些屬性的值。如果集合中存在多個形狀,則會發生執行階段錯誤。當使用者介面中的等效操作只能使用單一形狀(例如編輯形狀中的文字或編輯自由形狀的點等操作)時,返回或設定屬性通常就是這種情況。

當您設定在 ShapeRange 集合的輔助物件(例如 FillFormat 物件)下分組的形狀的屬性時,前面的準則也適用。如果輔助物件表示可以對使用者介面中的多個選取物件執行的操作,您將能夠從 ShapeRange 集合中傳回該物件並設定其屬性。例如,您可以使用 Fill 屬性傳回 FillFormat對象,該物件表示ShapeRange集合 中所有形狀的填滿  。設定此FillFormat物件的屬性 將為ShapeRange集合 中的所有單一形狀設定相同的屬性  。

循環遍歷 Shapes 或 ShapeRange 集合

即使您無法透過選擇多個形狀然後使用命令來同時對使用者介面中的多個形狀執行操作,您也可以透過循環遍歷 Shapes 集合或包含您想要的 形狀 的  ShapeRange集合以程式設計方式執行等效操作。想要使用並將適當的屬性和方法應用於  集合中的各個Shape物件。以下範例循環遍歷所有形狀,並為每個自選圖形形狀添加文字。並在每個自選圖形上新增文字。myDocument

VB

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集合,並設定集合中可以包含文字的每個形狀中的文字。

VB

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

在形狀範圍內對齊、分佈和分組形狀

使用 「對齊」 和 「分佈」 方法可以相對於彼此或相對於包含它們的文件來定位一組形狀。使用 “分組” 方法或 “重新分組” 方法從一組形狀形成單一分組形狀。


生薑2.7.53.0

生薑2.7.53.0

Ginger 是一款免費的拼字和文法檢查器。

積木

積木

Blocks 是一款供三年級小學生練習檢測和眼力技能的智力遊戲,被教師納入 IT 教學支援計劃。

普雷茲 6.26

普雷茲 6.26

Prezi 是一款免費應用程序,可讓您在線上和離線建立數位簡報。

數學之路

數學之路

Mathway 是一款非常有用的應用程序,可協助您解決所有需要比裝置內建計算器更複雜的工具的數學問題。

Adobe 示範者

Adobe 示範者

Adobe Presenter 是 Adob​​e Systems 發佈的電子學習軟體,可在 Microsoft Windows 平台上作為 Microsoft PowerPoint 外掛程式使用。

巨嘴鳥2.3.0

巨嘴鳥2.3.0

Toucan 是一個教育科技平台。它允許您在瀏覽常見的日常網站時學習新語言。

ENetViet 24.2

ENetViet 24.2

eNetViet 是一款幫助家長與孩子就讀的學校建立聯繫的應用程序,以便他們可以清楚地了解孩子當前的學習情況。

多鄰國

多鄰國

Duolingo - 免費學習語言,或簡稱 Duolingo,是一個教育程序,可讓您學習和練習許多不同的語言。

快速打字

快速打字

RapidTyping 是一款方便易用的鍵盤訓練工具,可協助您提高打字速度並減少拼字錯誤。透過針對許多不同級別組織的課程,RapidTyping 將教您如何打字或提高現有技能。

數學類型7.4.10.53

數學類型7.4.10.53

MathType 是來自開發人員 Design Science (Dessci) 的互動式方程式軟體,它允許您為文字處理、演示、電子學習等創建和註釋數學符號。該編輯器還用於創建 TeX、LaTeX 和 MathML 文件。