Показывать / скрывать изображения с помощью кнопок переключения Powerpoint VBA

#vba #powerpoint #slideshow #show-hide #togglebutton

#vba #powerpoint #слайд-шоу #показать-скрыть #кнопка переключения

Вопрос:

Я хочу показать скрытые изображения в моей презентации PowerPoint с помощью макроса VB. Я написал код, который вставляет некоторые графики на пустой слайд. Для каждого рисунка я создаю кнопку переключения. Моя идея заключается в том, что когда я нажимаю на кнопку, изображение будет видно, и, если я нажму еще раз, оно исчезнет (все действия в режиме слайд-шоу). Проблема в том, что я не могу назначить эту функцию кнопке переключения в рамках той же процедуры (см. Ниже).

 Sub insertPics()

Dim strFolder As String ' Full path to folder
Dim strName As String
Dim oPres As Presentation
Dim osld As Slide
Dim ocust As CustomLayout
Dim vertPos As Long
Dim plotNumb As Long
Dim plotFig As Shape
Dim toggBut As Shape

'Delete all shapes in the slide
For Each Sld In ActivePresentation.Slides
    TotalShapes = Sld.Shapes.Count
    For i = TotalShapes To 1 Step -1
        Sld.Shapes(i).Delete
    Next
Next

' Folder where pictures are located:
strFolder = "C:UsersMyUserpictures"

Set oPres = ActivePresentation
Set osld = oPres.Slides(oPres.Slides.Count)
Set ocust = osld.CustomLayout

strName = Dir$(strFolder amp; "*.bmp")
vertPos = 100
While strName <> ""

plotNumb = plotNumb   1
vertPos = vertPos   37

Set plotFig = osld.Shapes.AddPicture(strFolder amp; strName, msoFalse, msoTrue, Left:=150, Top:=120, Width:=525, Height:=297)
    With plotFig
        .Line.Visible = True
        .Line.ForeColor.RGB = vbWhite
        If plotNumb = 1 Then
            .Name = "AxisSystem"
            .Visible = True
        Else
            .Name = "Plot" amp; (plotNumb - 1)
            .Visible = False
        End If
        With .PictureFormat
            ColorToChange = RGB(255, 255, 255)
            .TransparentBackground = msoTrue
            .TransparencyColor = ColorToChange
        End With
        .Fill.Visible = msoFalse
    End With

If plotNumb > 1 Then
    Set toggBut = Application.ActiveWindow.View.Slide.Shapes.AddOLEObject(ClassName:="Forms.ToggleButton.1", Link:=True)
            With toggBut.OLEFormat.Object
                .Top = vertPos
                .Left = 750
                .Height = 30
                .Width = 50
                .Caption = "Plot " amp; (plotNumb - 1)
                .BackStyle = 0
                .Name = "TB" amp; (plotNumb - 1)
                With .Font
                    .Size = 10
                End With
            End With
End If

strName = Dir()

Wend

End Sub
  

Я знаю, возможно ли это, щелкнув правой кнопкой мыши по кнопке переключения и выбрав опцию «Просмотр кода». Мне даже удалось это сделать, используя следующий код:

 Private Sub TB1_Click()
If TB1.Value = True Then
    ActivePresentation.Slides(1).Shapes("Plot1").Visible = True
Else
    ActivePresentation.Slides(1).Shapes("Plot1").Visible = False
End If
End Sub


Private Sub TB2_Click()
If TB2.Value = True Then
    ActivePresentation.Slides(1).Shapes("Plot2").Visible = True
Else
    ActivePresentation.Slides(1).Shapes("Plot2").Visible = False
End If
End Sub


Private Sub TB3_Click()
If TB3.Value = True Then
    ActivePresentation.Slides(1).Shapes("Plot3").Visible = True
Else
    ActivePresentation.Slides(1).Shapes("Plot3").Visible = False
End If
End Sub
  

Но для меня этот вариант не интересен, как только мне приходится создавать подпрограмму для каждой кнопки переключения, одну за другой.

Я работаю в Windows, и я использую Powerpoint 2016.

Кто-нибудь может мне помочь?

С уважением,

Мурило

Комментарии:

1. Перекрестная публикация на answers.microsoft.com/en-us/msoffice/forum/all /…

Ответ №1:

Назначьте каждому изображению параметр действия Запуска макроса: ToggleVisibility затем включите что-то подобное в свой проект:

 Sub ToggleVisibility(oSh as Shape)
  oSh.Visible = Not oSh.Visible
End Sub
  

Комментарии:

1. Спасибо за ответ, Стив. Я не знаю, правильно ли я понял ваше предложение. Я пытался использовать ваш код, но это не сработало.

2. @Murilo Вы случайно не на Mac? Есть ошибка, которая не позволяет этому работать так, как это работает в Windows. Здесь есть более подробное объяснение и обходной путь для Mac: определите, какая фигура была нажата pptfaq.com/FAQ00141_Determine_which_shape_was_clicked.htm

3. @ Steve Я использую Windows и PowerPoint 2016.

4. @Murilo Хорошо, в таком случае отредактируйте свой пост, чтобы отразить текущую версию вашего кода с учетом моего предложения.