我正在开发一个PowerPoint 2010套牌,向用户展示一系列页面,其中包含一个语句,一个复选框(由标签元素构建,可以更改复选框的大小)和每页上的前进/后退箭头。< / p>
由于这将在具有不同页数的众多项目中使用,因此我使用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
我在网上搜索了任何动态添加事件代码的引用,并找到了一些示例(例如Assign on-click VBA function to a dynamically created button on Excel Userform),但几乎所有都是针对Excel或Access的。我应该指出编码是“不是我的日常工作”,我已经设法得到这么远的阅读“掌握VBA for Office 2003”和网络搜索...所以我将这些示例翻译成PowerPoint的能力已经很短。感谢您提供的任何帮助。
5/29其他信息:
我遇到了.CreateEventProc
方法作为将代码写入VBA的方法。我找到的示例是在this site为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
...但得到一个&#34;编译错误:Sub或Function未定义&#34;在(slides(1))
。任何帮助清理它(如果它实际上是一个合适的解决方案)将不胜感激。
答案 0 :(得分:0)
你必须使用标签吗? (我理解大小的东西,但你可以添加一个更容易的形状。)
基于以下内容的东西: 只有在允许访问安全性中的VBE时才能使用此功能(无法在代码中完成)
Sub makeBox()
Dim strCode As String
With ActivePresentation.Slides(1).Shapes.AddShape(msoShapeRectangle, 10, 10, 20, 20)
.Fill.Visible = False
.Line.Visible = False
With .TextFrame.TextRange.Font
.Name = "Wingdings 2"
.Size = 40
.Color.RGB = vbBlack
End With
.TextFrame.TextRange = "£"
With .ActionSettings(ppMouseClick)
.Action = ppActionRunMacro
.Run = "chex"
End With
End With
strCode = "Sub chex(oshp As Shape)" & vbCrLf & "If oshp.TextFrame.TextRange =" & Chr(34) & "£" & Chr(34) & "Then" _
& vbCrLf & "oshp.TextFrame.TextRange = " & Chr(34) & "R" & Chr(34) & vbCrLf _
& "Else" & vbCrLf & "oshp.TextFrame.TextRange =" & Chr(34) & "£" & Chr(34) & vbCrLf & "End If" & vbCrLf & "End Sub"
With ActivePresentation.VBProject.VBComponents.Add(vbext_ct_StdModule)
.CodeModule.AddFromString (strCode)
End With
End Sub