簡體   English   中英

使用 VBA 在 Powerpoint 中動態着色形狀

[英]Dynamically Colored Shapes in Powerpoint using VBA

這是我第一次發帖,

我正在為客戶做一個演示,他們想要一個顏色編碼的歐洲 map。 各個國家應根據一定的風險評分着色為綠色-黃色-紅色。 他們(還有我)認為這很容易實現,方法是將 PPT 以某種方式鏈接到 excel,然后進行一些條件格式化。 看來我們大錯特錯了。

我首先熟悉了 Excel VBA 以嘗試了解 VBA 的工作原理。 我創建了一個由歐洲國家形狀組成的 map,並相應地命名了每個形狀。 然后我使用如下代碼在 excel 中創建了動態着色:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B2") = "opposed" Then
    ActiveSheet.Shapes.Range(Array("Austria")).Select
    Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)
    Else
    If Range("B2") = "undecided" Then
    ActiveSheet.Shapes.Range(Array("Austria")).Select
    Selection.ShapeRange.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent4
    Else
    If Range("B2") = "approving" Then
    ActiveSheet.Shapes.Range(Array("Austria")).Select
    Selection.ShapeRange.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent6
    End If
    End If
    End If
End Sub

我只是將風險評估(“反對”、“未決定”、“批准”)放在一個列中,然后詢問該值是多少,然后相應地更改形狀的顏色。 該代碼有效 - 如果更改任何值,map 會更改。 我很高興。

現在我需要在 Powerpoint 中完成這項工作。 PP VBA 似乎完全不同,我找不到任何關於如何使這項工作的信息。 我嘗試了以下作為概念證明:

Sub coloring()
If ActivePresentation.Slides(1).Shapes("Rect1").TextFrame.TextRange.Text.Value = "RED" Then ActivePresentation.Slides(1).Shapes("Rect2").Fill.ForeColor.RGB = RGB(255, 0, 0)
End Sub

我發現 PP VBA 很難導航,這真的很令人沮喪。 我想怎么做:我想創建一張(隱藏的)幻燈片,其中包含所有信息(在文本框或帶有單元格的表格或類似的東西中),然后創建多張幻燈片來引用內容隱藏幻燈片並根據隱藏幻燈片上的內容顯示顏色編碼的信息。 但我真的不知道從哪里開始以及如何進行這項工作。

歡迎任何想法

由於每個應用程序的 VBA 都密切遵循應用程序自己的 object model,因此如果您習慣於使用不同應用程序的 OM,每個應用程序都會顯得很奇怪,但不是在其中工作。

這是一個工作示例。 您的代碼幾乎就在那里:

Sub coloring()

' Using With/End With can save a lot of typing:
With ActivePresentation.Slides(1)

If .Shapes("Rect1").TextFrame.TextRange.Text = "RED" Then
    ' It's a good idea to make sure the fill is visible
    ' before setting it
    .Shapes("Redt2").Fill.Visible = True
    .Shapes("Rect2").Fill.ForeColor.RGB = RGB(255, 0, 0)
End If

End With

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM