微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

制作ComboBox选择控件的形状的可见性/不可见性Powerpoint VBA

如何解决制作ComboBox选择控件的形状的可见性/不可见性Powerpoint VBA

我在幻灯片中有一个简单的ComboBox,其值添加如下:

0 = 2018 Pinot Noir
1 = 2019 Pinot Noir
2 = 2020 Pinot Noir

我现在希望用户选择来控制Powerpoint中的图像(形状)是否可见。因此,我认为对ComboBox1_Change事件使用简单的case语句就足够了。但是,然后我意识到我可能必须将上述值分配幻灯片中图像的名称。这些名称与ComboBox相同

我以前已经这样做过,但是我确定我缺少Powerpoint的对象来实现此目的。到目前为止,代码是:

Option Explicit

Private Sub ComboBox1_GotFocus()
    If ComboBox1.ListCount = 0 Then AddDropDownItems
End Sub

Sub AddDropDownItems()
    ComboBox1.AddItem "2018 Pinot Noir"
    ComboBox1.AddItem "2019 Pinot Noir"
    ComboBox1.AddItem "2020 Pinot Noir"
    ComboBox1.ListRows = 3
    'ComboBox1.Clear
End Sub

Sub ComboBox1_Change()

    Dim imgPinot As Shape
    Dim imgPinot2 As Shape
    Dim imgPinot3 As Shape


    Select Case ComboBox1.Value
        Case 0
            imgPinot.Visible = True
            imgPinot2.Visible = False
            imgPinot3.Visible = False
        Case 1
            imgPinot.Visible = False
            imgPinot2.Visible = True
            imgPinot3.Visible = False
        Case 2
            imgPinot.Visible = False
            imgPinot2.Visible = False
            imgPinot3.Visible = True
    End Select
End Sub

我要控制的另一件事是,一旦用户完成选择,组合框的索引就会重置。

我无法做到这一点有点愚蠢。一定要老了!如果可以的话,请协助。

解决方法

ComboBox1.Value 包含文本(即2018年黑皮诺),而不是列表索引。您还必须参考该演示文稿以获取打开和关闭图像的代码。 imgPinot.Visible仅在图像位于用户窗体上时有效。

Private Sub ComboBox1_GotFocus()
    If ComboBox1.ListCount = 0 Then AddDropDownItems
End Sub

Sub AddDropDownItems()
    ComboBox1.AddItem "2018 Pinot Noir"
    ComboBox1.AddItem "2019 Pinot Noir"
    ComboBox1.AddItem "2020 Pinot Noir"
    ComboBox1.ListRows = 3
End Sub

Private Sub ComboBox1_Change()
    Dim imgPinot As Shape
    Dim imgPinot2 As Shape
    Dim imgPinot3 As Shape

    Select Case ComboBox1.ListIndex
        Case 0
            With ActivePresentation.Slides(1)
                .Shapes("imgPinot").Visible = True
                .Shapes("imgPinot2").Visible = False
                .Shapes("imgPinot3").Visible = False
            End With
        Case 1
            With ActivePresentation.Slides(1)
                .Shapes("imgPinot").Visible = False
                .Shapes("imgPinot2").Visible = True
                .Shapes("imgPinot3").Visible = False
            End With
        Case 2
            With ActivePresentation.Slides(1)
                .Shapes("imgPinot").Visible = False
                .Shapes("imgPinot2").Visible = False
                .Shapes("imgPinot3").Visible = True
            End With
    End Select
End Sub

,

如果您的图像名称与组合框条目匹配,这应该起作用

Option Explicit

Private Sub ComboBox1_GotFocus()
    If ComboBox1.ListCount = 0 Then AddDropDownItems
End Sub

Sub AddDropDownItems()
    ComboBox1.AddItem "2018 Pinot Noir"
    ComboBox1.AddItem "2019 Pinot Noir"
    ComboBox1.AddItem "2020 Pinot Noir"
    ComboBox1.ListRows = 3
End Sub

Sub ComboBox1_Change()
    Dim sel,n As Long,cb As ComboBox,nm
    
    Set cb = Me.ComboBox1
    sel = cb.Value                         'selected item
    'loop over list 
    For n = 1 To cb.ListCount
        nm = cb.List(n - 1)                'list entry
        Me.Shapes(nm).Visible = (nm = sel) 'show only if entry matches selection
    Next n
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。