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 ではこの方法が機能します。

4

1 に答える 1

0

あなたの例では fodia が定義されていないため、それがどうあるべきかを推測するのは困難です。しかし、それが問題の原因ではないと思います。これが機能する別のアプローチです。注意すべき点がいくつかあります。

PPT の ActiveX オブジェクトの処理は奇妙です。コントロール オブジェクトで使い慣れたプロパティにアクセスするには、Shape.OLEFormat.Object.property_name を使用する必要があります。

また、少なくとも一部のバージョンでは、ActiveX 図形が通常の図形の順序で表示されません。スライド上の図形をタブで移動して順番に選択できますが、ActiveX 図形は選択されません。形状に名前を付けることは 1 つの回避策です (形状が並べ替えられても変更されないため、少し信頼性が高くなります)。

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
于 2013-01-21T17:19:29.280 に答える