2013-01-21 63 views
0

如果用戶激活圖片按鈕,該按鈕的圖片應該改變。我使用這個代碼。圖片按鈕圖片變化

Dim mainslide As Object 
Set mainslide = ActivePresentation.Slides(2) 

If mainslide.Shapes(11).Name = "green" Then 
    mainslide.Shapes(11).Picture = LoadPicture("pathname") 
    fődia.Shapes(11).Name = "red" 
Else 
    mainslide.Shapes(11).Picture = LoadPicture("pathname2") 
    fődia.Shapes(11).Name = "green" 
End If 

我得到運行時錯誤438,但在Excel中這種方法的工作原理。

回答

0

你的例子中沒有定義fodia,所以很難猜出它應該是什麼。但我不認爲這是問題的根源。這是另一種可行的方法。幾點要注意:

PPT處理ActiveX對象很奇怪。要獲得用於控制對象的屬性,必須使用Shape.OLEFormat.Object.property_name

並且至少在某些版本中,ActiveX形狀不以正常形狀順序顯示;您可以選中幻燈片上的形狀以依次選擇每個形狀,但ActiveX形狀從未被選中。命名形狀是一種解決方法(在形狀重新排序時不會改變,所以它更可靠)。

Sub RedOrGreen() 

Dim mainslide As Slide 
Dim oSh As Shape 
Set mainslide = ActivePresentation.Slides(1) 

Set oSh = FindShapeNamed("green", mainslide) 
If Not oSh Is Nothing Then 
    oSh.OLEFormat.Object.Picture = LoadPicture("c:\temp\red.jpg") 
    oSh.Name = "red" 
    Exit Sub 
End If 

Set oSh = FindShapeNamed("red", mainslide) 
If Not oSh Is Nothing Then 
    oSh.OLEFormat.Object.Picture = LoadPicture("c:\temp\green.jpg") 
    oSh.Name = "green" 
    Exit Sub 
End If 

End Sub 

Function FindShapeNamed(sName As String, oSl As Slide) As Shape 
    Dim oSh As Shape 
    For Each oSh In oSl.Shapes 
     If oSh.Name = sName Then 
      Set FindShapeNamed = oSh 
      Exit Function 
     End If 
    Next 
End Function 
+0

fodia是我忘了翻譯它的主幹道。 :( 感謝您的答案 –