くもりです。
開発環境はVB6.0、Excel2000です。
Excelのマクロの記録で作ったソースで
VBから実行するとグラフがシート名『グラフ1』ではなく
シート名『Sheet1』に作られてしまいます。
マクロの記録で作ったソースは下記のようです。
ActiveChart.Location Where:=xlLocationAsObject, Name:="グラフ1"
Excel2003ではグラフ1に作られますがExcel2000では
うまくいきません。
よろしくお願いします。
意図と実行しているプログラムが違いますね。
>ActiveChart.Location Where:=xlLocationAsObject, Name:="グラフ1"
この命令はアクティブ(≒選択状態)になっているグラフオブジェクトを
"グラフ1"という名前の付いたワークシート上に貼り付ける?
全然意図と違う命令ではないですか?
ワークシートとグラフシートは同レベルに考えない方が良いです。
ワークシート上にオートシェイプで図形などのオブジェクトが貼り付けられ
ますが、そういった部品レベルでグラフオブジェクトという部品が存在する
と思ってください。
その部品を、さもワークシートのように引き伸ばしただけのものがグラフ
シートです。だから、作成したグラフシートをワークシート上に移動できます。
引き伸ばして表示していた部品をワークシートの上に移動させているだけです。
詳細は Excel VBA のヘルプを参照してください。
>Excel2003ではグラフ1に作られますがExcel2000では
>うまくいきません。
Excel2000は無いので検証できないけど、Excel2003でもうまくいってない
と思います。
>"グラフ1"という名前の付いたワークシート上に貼り付ける?
貼り付けるより「移動する」と言った方が良いですね。
Location を変える命令ですから。
すこしお尋ねしたいのですが、「グラフ1」というシートを用意している
と解釈していいでしょうか?
そのうえで、グラフ1というシートにグラフを表示させようとすると
Excel2000では指定してグラフ1というシートではなく、Sheet1というシートにグラフが作成されてしまうということですか?
エラーは出ていないんですよね?指定したシートが存在しなければエラーが出てグラフ用に新たにシートを開いてそこにグラフを作成したりしますが、、、
ActiveChart.Location Where:=xlLocationAsObject, Name:="グラフ1"
の部分を見る限りでは自分には間違ってなさそうに見えますねー、
Name:="グラフ1"をName:="Sheet1"やName:="Sheet2"に変更することで
グラフの表示位置は変更されますか?
すいません
特攻隊長まるるうさんのレスを読んで自分が勘違いをしてると気づきました
>指定したシートが存在しなければエラーが出てグラフ用に新たにシートを>開いてそこにグラフを作成したりしますが、、、
これは新たにシートが出来てるわけではなくて特攻隊長まるるうさんのおっしゃるように,さもワークシートのように引き伸ばしただけのものがグラフ
シートでした。ですので指定したシートへの移動が可能でした。
参考になるか分かりませんが
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ですが 上記のコードでテストというシートにグラフが表示(移動?)されています。
特攻隊長まるるうさん、ひよこさんありがとうございます。
説明下手ですいません。
意図は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のシート名を
変えたりしても先頭のシートに移動してしまいます。
同じような報告があるね。
http://www.excel.studio-kazu.jp/z_old_log/11.html#u1803
Microsoft のバグ報告は引っ掛からなかったけど。
報告が遅れましたが、Excel2003を
使うことになり無事解決しました。
ありがとうございました。