Я разрабатываю колоду PowerPoint 2010, которая представляет пользователю серию страниц, содержащих один оператор, один флажок (созданный из элемента метки, позволяющий изменять размер флажка) и стрелки вперед / назад на каждой странице.
Поскольку это будет использоваться во многих проектах с различным количеством страниц, я динамически создаю «колоду» с помощью PowerPoint VBA для динамического построения страниц из электронной таблицы Excel, содержащей список отдельных утверждений.
Мне удалось написать код VBA, чтобы открыть файл Excel, прочитать операторы в массиве в PowerPoint и построить соответствующее количество страниц со всеми элементами на странице. На данный момент все работает нормально. У меня возникают трудности с назначением действия щелчка для флажка.
Вот код, который вызывается процедурой построения страницы для вставки флажка (очевидно, что до этого есть дополнительный код для доступа к файлу Excel, создания страниц и добавления текстовых полей «утверждения» ... все это работает) :
Sub AddSelectBox(Index As Integer, pptBuildingSlide As Slide)
'Add Checkbox
With pptBuildingSlide.Shapes.AddOLEObject(Left:=342, Top:=294, Width:=42, Height:=42, ClassName:="Forms.Label.1")
.Name = "label" & Index
.OLEFormat.Object.Font.Name = "Wingdings 2"
.OLEFormat.Object.Font.Charset = "2"
.OLEFormat.Object.Caption = "£"
.OLEFormat.Object.Font.Size = 40
End With
'Add Checkbox Click Code
'(CODE FOR ADDING CLICK EVENT TO EACH BOX GOES HERE)
End Sub
Флажок на каждой странице имеет незаметное имя, привязанное к номеру страницы (например, Label1, Label2 и т. Д.). Мне нужно добавить следующий код к каждому флажку на каждой странице, чтобы переключить флажок, чтобы позже в программе я мог видеть, какие из них были проверены, путем чтения атрибутов «заголовок». (Для шрифта установлено значение «Wingdings 2», чтобы отображалось пустое поле и флажок при нажатии)
Private Sub Label1_Click()
If Label1.Caption = "£" Then
Label1.Caption = "R"
Else
Label1.Caption = "£"
End If
End Sub
Я поискал в Интернете какие-либо ссылки для динамического добавления кода события и нашел ряд примеров (например, Назначить функцию VBA при нажатии динамически создаваемой кнопке в Excel Userform), но почти все они предназначены для Excel или Access. Я должен отметить, что кодирование - «не моя повседневная работа», и мне удалось так далеко зайти, прочитав «Освоение VBA для Office 2003» и поиск в Интернете… так что моя способность переводить эти примеры в PowerPoint оказалась недостаточной. Спасибо за любую помощь, которую вы можете предложить.
5/29 Дополнительная информация:
Я наткнулся на метод .CreateEventProc
как на способ написания кода на VBA. Пример, который я нашел, был написан для Excel на этом сайте. Я дошел до этого (код окна сообщения будет заменен кодом щелчка, но я просто использовал его для тестирования, чтобы избежать других ошибок) ...
Sub CreateEventProcedure()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim LineNum As Long
Const DQUOTE = """" ' one " character
Set VBProj = ActivePresentation.VBProject
Set VBComp = VBProj.VBComponents(Slides(1))
Set CodeMod = VBComp.CodeModule
With CodeMod
LineNum = .CreateEventProc("Click", "Label1")
LineNum = LineNum + 1
.InsertLines LineNum, " MsgBox " & DQUOTE & "Hello World" & DQUOTE
End With
End Sub
... но получите сообщение «Ошибка компиляции: подпрограмма или функция не определена» на (slides(1))
. Любая помощь в его очистке (если это на самом деле подходящее решение) будет оценена.
OnAction
. Вы должны добавить макрос в колоду во время разработки и установить строкуOnAction
на что-то вроде.OnAction="NameOfDeck!NameOfMacro"
. - person ChipsLetten   schedule 27.05.2015Label1_Click( )
вручную в метку на каждой странице после того, как они созданы VBA, но не могу понять, как заставить VBA добавлять код программно на лету. Стоит ли использовать методOnAction
, который вы описываете, для этого подхода? - person agoltz   schedule 27.05.2015