0

Excel (VBA) からパワーポイント (テンプレート付き) を作成し、すべてのスライドにテキスト ボックスを追加しようとしています。

テキストボックスを追加したいコード行は、Index out of bounds/No active presentation で失敗します。ここで何が間違っていますか?スライドのインデックスは問題ないはずです。インデックスを手動で設定しても変化はありません。

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
4

1 に答える 1

3

あなたの状況の問題は、使用するバインディングのタイプである遅延バインディングに起因します。このような状況では、一部の VBA 定数が認識されず、変数として扱われます。

まず、VBE エディターをrequire variable declarationモードに設定すると、コード内で見つけることができる 3 つの vba 定数すべてが変数としてマークされているため、以前にその問題に気付くでしょう。

   ppLayoutTitle
   ppLayoutBlank
   msoTextOrientationHorizontal

2番目-問題を回避するには、上記のすべての定数を次の数値に変換する必要があります。

   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"

3 番目- 2 つの定数のうち最初の定数で機能していたのはなぜですか? どちらも値が 0 に等しい変数として認識されたためです。また、両方の状況で、0 はスライド タイプのパラメーターとして受け入れられました。しかし、0 は TextBox タイプの値として受け入れられませんでした..

于 2013-08-29T09:33:06.027 に答える