VBからエクセルにグラフを表示するには

解決


くもり  2009-07-30 20:54:59  No: 142275

くもりです。

開発環境はVB6.0、Excel2000です。

Excelのマクロの記録で作ったソースで
VBから実行するとグラフがシート名『グラフ1』ではなく
シート名『Sheet1』に作られてしまいます。

マクロの記録で作ったソースは下記のようです。
ActiveChart.Location Where:=xlLocationAsObject, Name:="グラフ1"

Excel2003ではグラフ1に作られますがExcel2000では
うまくいきません。

よろしくお願いします。


特攻隊長まるるう  2009-07-30 23:48:22  No: 142276

意図と実行しているプログラムが違いますね。

>ActiveChart.Location Where:=xlLocationAsObject, Name:="グラフ1"
この命令はアクティブ(≒選択状態)になっているグラフオブジェクトを
"グラフ1"という名前の付いたワークシート上に貼り付ける?
全然意図と違う命令ではないですか?

ワークシートとグラフシートは同レベルに考えない方が良いです。
ワークシート上にオートシェイプで図形などのオブジェクトが貼り付けられ
ますが、そういった部品レベルでグラフオブジェクトという部品が存在する
と思ってください。
その部品を、さもワークシートのように引き伸ばしただけのものがグラフ
シートです。だから、作成したグラフシートをワークシート上に移動できます。
引き伸ばして表示していた部品をワークシートの上に移動させているだけです。

詳細は Excel VBA のヘルプを参照してください。

>Excel2003ではグラフ1に作られますがExcel2000では
>うまくいきません。
Excel2000は無いので検証できないけど、Excel2003でもうまくいってない
と思います。


特攻隊長まるるう  2009-07-30 23:51:32  No: 142277

>"グラフ1"という名前の付いたワークシート上に貼り付ける?
貼り付けるより「移動する」と言った方が良いですね。
Location を変える命令ですから。


ひよこ  2009-07-31 00:01:55  No: 142278

すこしお尋ねしたいのですが、「グラフ1」というシートを用意している
と解釈していいでしょうか?

そのうえで、グラフ1というシートにグラフを表示させようとすると
Excel2000では指定してグラフ1というシートではなく、Sheet1というシートにグラフが作成されてしまうということですか?

エラーは出ていないんですよね?指定したシートが存在しなければエラーが出てグラフ用に新たにシートを開いてそこにグラフを作成したりしますが、、、

ActiveChart.Location Where:=xlLocationAsObject, Name:="グラフ1"

の部分を見る限りでは自分には間違ってなさそうに見えますねー、

Name:="グラフ1"をName:="Sheet1"やName:="Sheet2"に変更することで
グラフの表示位置は変更されますか?


ひよこ  2009-07-31 00:11:58  No: 142279

すいません
特攻隊長まるるうさんのレスを読んで自分が勘違いをしてると気づきました
>指定したシートが存在しなければエラーが出てグラフ用に新たにシートを>開いてそこにグラフを作成したりしますが、、、
これは新たにシートが出来てるわけではなくて特攻隊長まるるうさんのおっしゃるように,さもワークシートのように引き伸ばしただけのものがグラフ
シートでした。ですので指定したシートへの移動が可能でした。

参考になるか分かりませんが

x1 = Worksheets("sheet1").Cells(65000, 1).End(xlUp).Row
    x2 = Worksheets("sheet1").Range("P1").End(xlToLeft).Column
 fin = Cells(x1, x2).Address(RowAbsolute:=False, ColumnAbsolute:=False)
x = "A1"

    Worksheets("sheet1").Range(Cells(1, 1), Cells(x1, x2)).Select
    Charts.Add
    ActiveChart.ChartType = xlColumnClustered
     ActiveChart.Axes(xlValue).MaximumScale = 300
    ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(x1, x2)), _
     PlotBy:=xlColumns

    ActiveChart.Location Where:=xlLocationAsObject, Name:="テスト"
End Sub

実行環境はExcel2003ですが  上記のコードでテストというシートにグラフが表示(移動?)されています。


くもり  2009-07-31 01:01:21  No: 142280

特攻隊長まるるうさん、ひよこさんありがとうございます。

説明下手ですいません。
意図はCharts.Addでグラフシートに出来たグラフを
"グラフ1"という名前のシートに移動しようとしています。

実際のコードは
    Charts.Add
    ActiveChart.ChartType = xlLineMarkers       '折れ線グラフ
    ActiveChart.SetSourceData Source:=Sheets(data_sheet).range(GraphKindPara(no).range), _
        PlotBy:=xlColumns
'    ActiveChart.Location Where:=xlLocationAsObject, Name:=draw_sheet.Name
です。

ステップ実行するとCharts.Addで
"Graph1"というグラフシートが挿入されて、そこにグラフが作られています。
ActiveChart.Locationで"グラフ1"という名前のシートに移動しようとしています。

data_sheetはパラメータでExcel.WorkSheetです。

このコードで2003だとグラフ1という名前のシートに
移動できたんですが、2000ではうまくいきません。

どうやら"Sheet1"というシート名に移動するのではなく
先頭のシートに移動されているようです。
ほかのシートを先頭にしたりSheet1のシート名を
変えたりしても先頭のシートに移動してしまいます。


特攻隊長まるるう  2009-07-31 04:04:21  No: 142281

同じような報告があるね。
http://www.excel.studio-kazu.jp/z_old_log/11.html#u1803
Microsoft のバグ報告は引っ掛からなかったけど。


くもり  2009-08-04 20:54:25  No: 142282

報告が遅れましたが、Excel2003を
使うことになり無事解決しました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加