投稿日 | : 2004/02/04(Wed) 17:57 |
投稿者 | : Rs |
URL | : |
タイトル | : VBからExcelのグラフをPictureBoxに表示 |
はじめましてRsという者です。
最近VBを仕事で始めまして、データの検索機能のプログラムを組んでいます。
VBからExcelのグラフをPictureBoxに表示するコードを組んでみたのですがうまくいきません。
ここのHPを参考にさせてもらいまして作ってみたのですが・・・。
以下コードを載せます。
'★プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryに
'チェックを入れておいて下さい。
On Error Resume Next
'オブジェクトへの参照を格納する変数を宣言(事前バインディング)
'事前バインディングを使用すると、プロパティの値を設定または取得
'するのに必要な時間を大幅に短縮できます
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
' 変数にオブジェクトの参照を代入します。Add メソッドを使って
' 新規 workbookとworksheet オブジェクトを作成します。
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
'エクセルを表示します。(表示しなくてもOK)
'xlApp.Visible = True
' Excel のセルに値を代入します。
For a = 1 To 36
If a < 13 Then
xlSheet.Cells(1, a).Value = lblUri(a - 1).Caption
ElseIf a < 25 Then
xlSheet.Cells(2, a - 12).Value = lblUri(a - 1).Caption
Else
xlSheet.Cells(3, a - 24).Value = lblUri(a - 1).Caption
End If
Next a
'グラフを作成する
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R1C12"
ActiveChart.SeriesCollection(1).Name = "=""2002年度"""
ActiveChart.SeriesCollection(2).Values = "=Sheet1!R2C1:R2C12"
ActiveChart.SeriesCollection(2).Name = "=""2003年度"""
ActiveChart.SeriesCollection(3).Values = "=Sheet1!R3C1:R3C12"
ActiveChart.SeriesCollection(3).Name = "=""2004年度"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.HasDataTable = False
'クリップボードを初期化
Clipboard.Clear
'クリップボードにコピー
Set xlSheet = xlBook.Worksheets(1)
xlSheet.ChartObjects("グラフ 1").Copy
'------- Excelの終了処理 -----------------
xlApp.DisplayAlerts = False
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
'-------------------------------------------
'---------- クリップボード経由でPictureに貼り付け ------------------
'クリップボードにメタファイルが入っているかチェック
If Clipboard.GetFormat(vbCFMetafile) Then
'メタファイルならピクチャーコントロールに貼り付け
Set Picture1.Picture = Clipboard.GetData()
End If
ほとんどがここのHPのコピーなんですが^^;
以上のコードでやってみたところ、一回目に通った場合グラフが表示されるのですが
2回目に通した時にグラフが表示されません。
「クリップボードにメタファイルが入っているかチェック」の場所から2回目の場合
Set Picture1.Picture = Clipboard.GetData()の部分のコードを通りません。
「グラフを作成する」の部分はExcelのマクロを記録し、コードを貼り付けたものです。
ものすごくわかり辛いかも知れませんが、原因と対策をご教授頂きたいのですが、宜しく
お願いします。