VB6からExcel上にあるグラフの編集を行うには?

解決


tt  2007-06-19 01:45:48  No: 99008

フォーマット用Excelファイルがあります。
このExcelにはシートが2つあり(Graph, DATA)
Graphシートにはグラフが既に用意されています。
グラフはDATAシートに格納されているデータを元に描画されます。

VB6でDATAシートのデータの値を書き込み
Graphシートのグラフを表示させたいのですが、
DATAシートのデータの値の数が固定数ではありません。
そのため、グラフのデータの範囲をVB6から指定しなおしたいのですが
どうしたらよいかがわかりません。

データの値は
Dim lobj_Excel As Object
Dim FileName As String
Dim i As Integer
Dim iCnt As Integer

iCnt = (可変長)
FileName = "D:\Project\hoge.xls"
Set lobj_Excel = GetObject(FileName)

With lobj_Excel.Worksheets("DATA")
    For i = 0 To iCnt
       .Cells(1, 1+i) = (データ)
       .Cells(1, 2+i) = (データ)
       .Cells(1, 3+i) = (データ)
    Next
End With

With lobj_Excel 
   .Windows(lobj_Excel.Name).Visible = True
   .Application.DisplayAlerts = False
   .SaveAs FileName:=ls_Temp
   .Application.DisplayAlerts = True   
   .Close
End With

のようなプログラムで編集しています。
上記のiCntによりセルの列数が可変となります。
その可変のデータをグラフデータ範囲としたいのですが、
Graphシートのグラフの範囲を指定しなおすには
どのような方法がありますでしょうか?

何か方法がありましたら教えていただけるとありがたいです。


特攻隊長まるるう  2007-06-19 03:28:21  No: 99009

マクロの記録ができるはずですが、方法は分かりますか?

Chart.SetSourceData メソッド
とか、
Chart.SeriesCollection(Index).Values プロパティ
あたりでは?

 # Excel の場合はバージョンによって使えるメソッドなどが
 # 変わります。質問時にはバージョン情報も必須です。


tt  2007-06-19 09:04:46  No: 99010

お返事ありがとうございます。

>マクロの記録ができるはずですが、方法は分かりますか?

>Chart.SetSourceData メソッド
>とか、
>Chart.SeriesCollection(Index).Values プロパティ
>あたりでは?
Excelファイルのマクロで設定するということになるんでしょうか?

VB6でexeを作ってそのexeからExcelにグラフを出力するという形なのですが
SetSourceData,SeriesCollectionプロパティもVB6側で操作できるんですか?
その場合、グラフオブジェクトの指定の仕方がいまいちわかりません…。

すみません、情報不足でしたね。Excelのバージョンは2002です。


魔界の仮面弁士  2007-06-19 11:04:25  No: 99011

> Excelファイルのマクロで設定するということになるんでしょうか?

VBA マクロの自動記録機能を使うと、必要なプロパティやメソッドが
わかるので、あとはそれを [F2]キーのオブジェクトブラウザや、
[F1]のExcel開発者ヘルプなどと組み合わせて調べていけば、
VB6 から呼びだす場合のコードも書けるでしょう。

なお、[マクロの記録]では「変数」が使われないので、Selection 主体の
コードになってしまい、冗長 かつ オブジェクト参照が曖昧となります。
それらは、適切なオブジェクトへ置き換えてやらなければなりません。

> SetSourceData,SeriesCollectionプロパティもVB6側で操作できるんですか?
操作できますよ。いずれも Excel.Chart オブジェクトのメンバですし。
# なお、SeriesCollection はプロパティではなく、メソッドです。

> その場合、グラフオブジェクトの指定の仕方がいまいちわかりません…。
objSheet.ChartObjects から辿ると、Excel.ChartObject が得られますよね。
さらにその Chart プロパティから、Excel.Chart オブジェクトが得られますよ。


特攻隊長まるるう  2007-06-19 16:22:24  No: 99012

> Excelファイルのマクロで設定するということになるんでしょうか?
> VBA マクロの自動記録機能
Excel上の操作をコードとして記録するExcelに実装されている
機能を指します。これを使って手作業のコードを記録すれば、
VBからのコードの参考となります。

詳しくは過去ログ検索『マクロの記録』や[Excel]のヘルプで
キーワード検索してみてください。


tt  2007-06-19 19:12:33  No: 99013

みなさん、お返事ありがとうございます。

マクロの記録のコードおよび、みなさんの発言を参考にした結果
下記のコードで範囲の変更ができました。

  lobj_Excel.Worksheets("GRAPH").ChartObjects("グラフ").Chart.SetSourceData Source _
  :=lobj_Excel.Worksheets("DATA").Range(  新しい指定範囲  ), PlotBy _
  :=xlRows

的確かつ親切な対応、ありがとうございました。


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

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






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