#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 Хорошо, в таком случае отредактируйте свой пост, чтобы отразить текущую версию вашего кода с учетом моего предложения.