2017-01-24 104 views
1

我對所有這些都有點新鮮感讓自己在項目中頭腦發熱,並想知道我是否能得到一點指導。Powerpoint 2016 VBA圖片

我會爲你設置場景。我有一個力量點,它有3層圖片,他們都是卡片。底層是我的地方持有隨機卡和價值。第二層是Ace的一層,最後一層是卡背。 我有20套這3張圖片,我設置了一個很好的小旋轉過渡,所以你點擊卡背的觸發器旋轉,他們的王牌每次都會出現,因爲它在佔位符之前。

這個想法是我有1個宏,這是我的重置,它會使用ZOrder msoSendToBack將它們全部推回到後面。

第二個宏,然後隨機將3個ace向前3次,以便它們與該層內聯,然後需要首先顯示。現在我面臨的問題是VBA代碼。

Sub Reset() 
    ActiveWindow.Selection.SlideRange.Shapes("Picture29").Select 
    ActiveWindow.Selection.ShapeRange.ZOrder msoSendToBack 
End Sub 

這是我通過一般查找找到的代碼。

我會感謝任何指導或建議,我意識到我可能會這樣做更難的方法。我只是一名軟件工程專業的學生,​​對此我很陌生。但是使用C#或Java更強大。但誠實地說,任何事情都會變得更加明智。

回答

0

首先,避免選擇任何東西,除非它是完全不可避免的。 這將有同樣的效果:

Sub Reset() 
    With ActiveWindow.Selection.SlideRange.Shapes("Picture29") 
     .ZOrder msoSendToBack 
    End With 
End Sub 

既然你要處理一個以上的形狀,我傾向於使用標籤。 例如,選擇的形狀,然後運行該:

子背層() 隨着ActiveWindow.Selection.ShapeRange(1) .Tags.Add 「層」, 「返回」 結束隨着 結束子

爲每個後層項目執行此操作,然後同樣確定其他圖層形狀。然後在使用中,[aircode alert!]

Sub Reset() 
    Dim oSh as Shape 
    For Each oSh in ActiveWindow.Selection.SlideRange(1) 
     If oSh.Tags("Layer") = "Back" Then 
     oSh.Zorder msoSendToBack 
     End If 
     ' Add further IF tests to identify other layers 
     ' and deal with them appropriately 
    Next 
End Sub