从Excel创建Powerpoint并插入文本框失败

时间:2013-08-29 07:34:56

标签: excel vba powerpoint

我正在尝试从Excel(VBA)创建一个powerpoint(带有模板),并为每张幻灯片添加一个文本框。

我要添加文本框的代码行失败,索引越界/没有活动表示。这有什么不对?幻灯片的索引应该没问题 - 如果我手动设置索引,则没有变化。

Dim PowerPointApp As Object
Set PowerPointApp = CreateObject("PowerPoint.Application")
PowerPointApp.Visible = True


Set objP = PowerPointApp.Presentations.Add
objP.ApplyTemplate "" & Table1.Range("A1").Value & "draft.pptx"

PowerPointApp.ActivePresentation.Slides.Add 1, ppLayoutTitle

For i = 1 To 10

 objP.ApplyTemplate "" & Table2.Range("A1").Value & "template.pptx"
 PowerPointApp.ActivePresentation.Slides.Add i + 1, ppLayoutBlank
 PowerPointApp.ActivePresentation.Slides(i + 1).Select

 Table3.ChartObjects(i).CopyPicture

 PowerPointApp.ActivePresentation.Slides(i + 1).Shapes.Paste
 PowerPointApp.ActivePresentation.Slides(i + 1).Shapes(1).Top = 150
 PowerPointApp.ActivePresentation.Slides(i + 1).Shapes(1).Left = 50
 PowerPointApp.ActivePresentation.Slides(i + 1).Shapes(1).Width = 400
 PowerPointApp.ActivePresentation.Slides(i + 1).Shapes(1).Height = 300

     'Exception occurs here                            
 PowerPointApp.ActivePresentation.Slides(i + 1).Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=100, Top:=100, Width:=200, Height:=50).TextFrame.TextRange.Text = "Text"
Next i

1 个答案:

答案 0 :(得分:3)

您所处理的问题源于您使用的绑定类型 - 后期绑定。在这种情况下,某些VBA常量无法识别,它们被视为变量。

首先 - 如果你将VBE编辑器设置为require variable declaration模式,那么你会更早地发现这个问题,因为我可以在你的代码中找到的所有三个vba常量都被标记为变量:

   ppLayoutTitle
   ppLayoutBlank
   msoTextOrientationHorizontal

第二 - 为了避免这个问题,您需要将所有上述常量转换为以下数字:

   ppLayoutTitle    =1
   ppLayoutBlank    =12
   msoTextOrientationHorizontal    =1

以这种方式:

PowerPointApp.ActivePresentation.Slides.Add 1, 1 'ppLayoutTitle
PowerPointApp.ActivePresentation.Slides.Add i + 1, 12 'ppLayoutBlank
PowerPointApp.ActivePresentation.Slides(i + 1).Shapes.AddTextbox(1, Left:=100, Top:=100, Width:=200, Height:=50).TextFrame.TextRange.Text = "Text"

第三次 - 为什么它适用于两个常量中的第一个?因为两者都被识别为变量,其值等于0.并且在两种情况下,0都是幻灯片类型的可接受参数。但是0不是TextBox类型的接受值..