VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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のマクロを記録し、コードを貼り付けたものです。
ものすごくわかり辛いかも知れませんが、原因と対策をご教授頂きたいのですが、宜しく
お願いします。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -