2017-04-05 10 views
0

VBAで2013という単語のバグがありましたが、回避策を探したいと思います。次の例では、グラフを作成するボタンとデータを追加するボタンがあります。コードは、グラフを含むファイルが保存され、再度読み込まれるまで正常に動作します。次に、CommandButton2_Click()はエラーを返します。「オブジェクトchartdataのメソッドブックが失敗しました」。VBA(Word)メソッドのワークブックのオブジェクトchartdataが失敗しました

Private Sub CommandButton1_Click() 
    Dim chartWorksheet As Excel.Worksheet 
    Dim salesChart As Word.Chart 
    Set salesChart = ActiveDocument.Shapes.AddChart.Chart 
End Sub 

Private Sub CommandButton2_Click() 
    For Each objShape In ActiveDocument.Shapes 
     If objShape.HasChart Then 
      With objShape.Chart.ChartData.Workbook.WorkSheets(1) 
       .ListObjects("Table1").Resize .Range("A1:B10") 
       For i = 1 To 10 
        .Cells(i, 1).FormulaR1C1 = CStr(i) 
        .Cells(i, 2).FormulaR1C1 = CStr(10 * i) 
       Next 
      End With 
     End If 
    Next 
End Sub 

コードがMicrosoft's own exampleに基づいており、私は考慮にスタックオーバーフローからいくつかのソリューションを取るしようとしましたが、彼らは問題を解決しません。私は誰も助けることを願っています!

答えて

0

このエラーはバグではありません。 ChartDataは、使用する前にアクティブ化されている必要があります。さもなければ、悪いことが起こる。

Private Sub CommandButton1_Click() 
    Dim chartWorksheet As Excel.Worksheet 
    Dim salesChart As Word.Chart 
    Set salesChart = ActiveDocument.Shapes.AddChart.Chart 


    End Sub 

    Private Sub CommandButton2_Click() 
     For Each objShape In ActiveDocument.Shapes 
      If objShape.HasChart Then 
'----------------------------------------- the bugfix ---------------------- 
       objShape.Chart.ChartData.Activate 
'--------------------------------------------------------------------------- 
       With objShape.Chart.ChartData.Workbook.WorkSheets(1) 
        .ListObjects("Table1").Resize .Range("A1:B10") 
        For i = 1 To 10 
         .Cells(i, 1).FormulaR1C1 = CStr(i) 
         .Cells(i, 2).FormulaR1C1 = CStr(10 * i) 
        Next 
       End With 
      End If 
     Next 
    End Sub 

誰かを助けることを願っています!

関連する問題