Excel 2003 では正常に動作していたが、Excel 2010 では失敗した Excel VBA アプリケーションがあります。
相対コードは
Public Sub Create_Chart
Dim c
Dim OutputText As String
OutputText = OutputSource
Workbooks(NewWorkBook).Activate
With ActiveSheet
obj.Range(DataRange).NumberFormat = "0.0%"
ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveChart.SetSourceData Source:=obj.Range(DataRange)
End With
End Sub
デバッガーがこのウィンドウで ActiveChart.SetSourceData Source:=objNBR.Range(DataRange) にヒットすると、エラーメッセージが表示されます-
デバッガーの DataRange は F2:R2、F3:R3 で、obj は正しい Excel フォームを指しています -
ActiveChart はテンプレートからのものです -
私のデバッガーは、「ActiveChart.ChartArea.Select」がtrueであることを示しています。また、ActiveChart と obj は有効なオブジェクトです。
最も重要なのは、Excel 2003 が正常に動作することです。デバッガーを使用して、Excel 2003 と 2010 の obj と ActiveChart を比較します。そして、コードの点で大きな違いは見つかりません。ActiveChart のテンプレートが 2003 年には少し異なっていることがわかります -
元のテンプレートは 2010 年に表示されたものとまったく同じですが、2003 年のワーキング シートへのコピー中に自動的にゼロ設定されました。2003 年と 2010 年の相違点はこれだけです。それがこのエラーの原因になるかどうかはわかりません。
証拠を逃したかどうかはわかりません。エラー メッセージには詳細が示されていません。より多くのデバッグ情報を取得する他の方法はありますか?
誰かが問題と修正を見つけるのを手伝ってくれれば幸いです。
前もって感謝します
Edit1: obj は別のルーチンで作成され、DataRange はそのルーチンに取り込まれます -
Workbooks.Add
MyWorkbook = ActiveWorkbook.Name
Set obj = ActiveWorkbook.Worksheets(1)
次に、データが DataRange セル (F2:R2、F3:R3) に挿入されます。正しいデータが表示された Excel ファイルを確認できます。
Edit2 上記のサブの Workbooks(NewWorkBook) はこれらのコードから生成され、チャートが画面に表示された新しい Excel を確認できます -
Windows(Dir(TemplateFile)).Activate
ActiveWorkbook.Sheets("C1").Select
ActiveWorkbook.Sheets("C1").Copy
NewWorkBook = ActiveWorkbook.Name
Windows(NewWorkBook).Visible = True
Edit3 Sidのアプローチを使用して、最初にこの方法でオブジェクトを宣言します-
Public Sub Create_Chart()
Dim wb As Workbook
Dim ws As Worksheet
Dim objChrt As ChartObject
Dim Chrt As chart
Set wb = Workbooks(NewWorkBook)
Set ws = wb.Sheets(1)
Set objChrt = ws.ChartObjects(1)
Set Chrt = objChrt.chart
With wb
obj.Range(DataRange).NumberFormat = "0.0%"
'Chrt.Export ("c:\temp\testChrt.gif")
'With obj.PageSetup
' .PrintArea = DataRange
' .Zoom = False
' .FitToPagesTall = 1
' .FitToPagesWide = 1
' .Orientation = xlLandscape
' End With
' obj.PrintOut Copies:=1
Chrt.SetSourceData Source:=obj.Range(DataRange)
End With
End Sub
エラーはまったく同じです。Chrt および obj.Range(DataRange) オブジェクトを印刷して保存するためのコメント アウトされたコードがあることに注意してください。値は上記の画像 2 と画像 3 と同じです。グラフとデータがあります。なぜ「Chrt.SetSourceData Source:=obj.Range(DataRange)」がこの場合 2010 年には機能せず、2003 年には機能するのか不思議です。