2017-02-07 9 views
0

私はpowerpointでチャートオートメーションスクリプトを作成しています。私は "ActivateChartDataWindow"を呼び出す際に問題があります。ActivateChartDataWindowを使用したVBA Chartオートメーション

"ActivateChartDataWindow"の代わりに "Activate"を使用しますが、 "Activate"は完全なExcelプログラムを読み込み、ルーチン全体を遅くして実行します。

"ActivateChartDataWindow"はチャートにデータを入力するように機能しますが、データを編集するために手動でデータを編集 - データを編集すると、Excelアプリケーションにアクセスするためにロードしたくないようです!

これは過去5時間にわたり私の夢中になってきましたが、これをどうやってやり遂げるかについてのアイデアはありがたいです。

OLE.dll1が正しく動作しており、使用しているコードは以下のとおりです。

以下のコード:

あり、各ページに1つのチャートで5枚のスライドがあり、以下のコードは、私がコンセプト

のポイントとして使用しています何で私が「ActivateChartDataWindow」間違った使用してい伐採を持っていますしかし、私が間違ってやっていることを知るためにウェブにはあまりないです! Arrrhhhh!

For i = 1 To 5 
     Set instance = Nothing 
     Set instance = ActivePresentation.Slides(i).Shapes(1).Chart.ChartData 
     With instance 
      .ActivateChartDataWindow 
      instance.Workbook.Sheets(1).Range("A1:H26").Value = 27 
      instance.Workbook.Close 
     End With 
    Next i 
End Sub 
+0

なぜActivateWhateverを使用するのですか?オブジェクトを直接操作する方がいいですし、そのオブジェクトを 'アクティブにする必要はありません。 –

+0

私の理解から、あなたは暗闇の事を活性化する必要があります!私が間違っていない限り? – Dianna

+0

いいえ、必要はありません。下の私の答えを試してください。 –

答えて

0

常に推奨するとおり、修正するオブジェクトはActivateである必要はありません。スライドに埋め込まれたワークブックを処理しようとしている場合、このようにすることができます。

' This function will get you a Workbook object embedded in a Slide (late binding) 
Function getEmbeddedWorkbook(sld As Slide) As Object 
    Dim shp As Shape 
    On Error Resume Next 
    For Each shp In sld.Shapes 
     If shp.Type = 3 Then ' embedded chart workbook created in PP 
      Set getEmbeddedWorkbook = shp.Chart.ChartData.Workbook 
      Exit Function 
     End If 
     If shp.Type = 7 Then ' embedded workbook pasted from excel 
      Set getEmbeddedWorkbook = shp.OLEFormat.Object 
      Exit Function 
     End If 
    Next 
End Function 


' For Testing, I have 6 slides, Some have a workbook pasted from Excel 
' OLE, shape type = 7, others have a chart created in PP (type = 3) 
Sub Test() 
    Dim wb As Object, i As Long 
    For i = 6 To 6 'ActivePresentation.Slides.Count 
     Set wb = getEmbeddedWorkbook(ActivePresentation.Slides(i)) 
     If Not wb Is Nothing Then 
      wb.Sheets(1).Range("A1:D5").Value = i * i 
     End If 
    Next 
End Sub 
+1

こんにちは灰、頭のおかげで。私は間違いなく前にこれを与えるでしょう。ただし、ブックはグラフに埋め込まれています。このコードはまだ動作しますか?私はラインを見ています.... shp.OLEFormat.Object)=ワークブックをTypenameとして参照する "ブック" – Dianna

+0

p.s. 'PasteSpecial - > Excel Worksheet'を使ってPPにテーブルを張っていると思いますよね? –

+0

はい。私はあなたがより良い方法を提案しようとしていると思いますか? – Dianna

関連する問題