2016-05-19 10 views
0

DBとして機能するExcelファイルがあります。 Excelファイルのデータをソートして変更した後、更新されたデータをPowerPointスライドにコピーしています。 更新されたワークシートからすべてのチャートオブジェクトをコピーする前に、PowerPointスライドから古いグラフを削除します。Excel VBAからPowerPointスライド内のすべてのチャートオブジェクトを削除しようとするとエラーが発生する

私は以下のコードを使用していますが、スライドの最後のチャートを削除しようとすると、エラーメッセージが表示されます。 エラーメッセージは "Shapes.Item:整数が範囲外です.25はインデックスの有効範囲1〜24ではありません"です。あなたがそれらの一つ以上を削除することを意図してVBAでオブジェクトのコレクションをループしているときはいつでも

Dim SlideNum, i      As Integer 

SlideNum = ActiveSheet.Cells(5, 2) 

For i = 1 To PPT.ActivePresentation.Slides(SlideNum).Shapes.Count 
    ' if current slide object is a chart, delete it 
    If PPT.ActivePresentation.Slides(SlideNum).Shapes.Item(i).HasChart Then 
     PPT.ActivePresentation.Slides(SlideNum).Shapes.Item(i).Delete 
    End If 
Next i 
+0

'i'で後方にカウントしますが、前方にカウントしません。先に進むと、ある時点でシェイプを削除すると、 'i'はスライド上のシェイプの数よりも大きくなります(シェイプをループするときに' Shapes.Count'は再評価されません)。 –

+0

変数を宣言することの良い習慣は、〜DIM SlideNum As Integer、i As Integer〜 – skkakkar

答えて

2

あなたは手順を逆方向にカウントする必要が-1ので、あなたのループは次のように起動する必要があります:

For i = PPT.ActivePresentation.Slides(SlideNum).Shapes.Count to 1 Step -1 
+0

ありがとう、ジェイミー –

関連する問題