• 締切済み

Accessで作成したグラフをVBで表示

VB2005についてです。 Accessで作成したグラフをVBにどうやって表示させればいいのでしょうか? 教えてください。

みんなの回答

回答No.3

Access のフォームで作ったグラフを VB で表示させるってことは、VB から Access を起動して、目的の MDB ファイルを開いて、目的のフォームを開かせるってことです。 ここでちょっと待ったです。 その VB アプリと、MDB の関係ってそれだけですか? もしかしたら MDB の中のテーブルを VB アプリから操作してませんか? VB で作ったフォームで MDB の中のデーターを操作してませんか? 操作しているんだったら、、、 データーの操作にあたって、ユーザーには MDB の存在を見せてないですよね。 だったらグラフ表示の際にも MDB の存在は見せず、VB アプリの中でグラフを見せたいはず。 であるなら VB 用のグラフ コンポーネントでグラフを描画すべきです。 #1 さんの回答のとおりです。 操作していないのだったら、、、 VB アプリとは別のタイミングで、場合によっては別のユーザーによって、MDB のフォームでデーターの操作がなされている。 VB アプリは会社の偉い人がグラフを見るだけのために存在する。 そのぐらいデーター操作とグラフ閲覧がかけ離れているのなら、、、 VB アプリを作る意味、よくわからないですね。 #2 さんのように VB アプリから MDB を開いてグラフ用のフォームを開く。 または、、、やっぱり偉い人にも MDB を開いてもらう。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

#1 です。 VB.NET 2005 側から Office を操作するには OLE オートメーション 参考HP → http://home.att.ne.jp/zeta/gen/excel/c04p44.htm でオブジェクトを直接操作する方法があります。 たとえば Excel の Book を 開き、データをシートに貼り付け そのシートを印刷させるとかです。 年賀はがきの作成やアマチュア無線の交信証明のはがきを作成するのに つかっています。 __________________________________<サンプル>_________________________________________________ '-- ********************************************************************************* '-- * [ ComExcel ] '-- * '-- * Excel OBJECT 操作関数 EXCEL 2000 以上で動作確認済み '-- * '-- ********************************************************************************* ''' <summary> ''' Excel共通処理 ''' </summary> Public Class ComExcel '-------------------------------------------------------------------------------- ' ワーク定義 '-------------------------------------------------------------------------------- Friend m_objApp As Object = Nothing 'Excelアプリ Friend m_objBooks As Object = Nothing 'ブックコレクション Friend m_objBook As Object = Nothing 'ブック Friend m_objSheets As Object = Nothing 'シートコレクション Friend m_objSheet As Object = Nothing 'シート '-------------------------------------------------------------------------------- ' プロパティ定義 '-------------------------------------------------------------------------------- Private m_strErrorMsg As String = String.Empty ''' <summary>エラーメッセージ</summary> Public ReadOnly Property ErrorMsg() As String Get Return m_strErrorMsg End Get End Property ''' -------------------------------------------------------------------------------- ''' <summary> ''' Excel開始 ''' </summary> ''' <param name="I_blnVisible">Excel表示有無(デフォルト:False[非表示])</param> ''' <exception cref="Exception">Excelオープンエラー</exception> ''' -------------------------------------------------------------------------------- Public Sub ExcelStart(Optional ByVal I_blnVisible As Boolean = False) m_strErrorMsg = String.Empty Try 'Excelアプリ m_objApp = CreateObject("Excel.Application") m_objApp.Visible = I_blnVisible '警告メッセージ表示有無 m_objApp.DisplayAlerts = False 'ブックコレクション m_objBooks = m_objApp.Workbooks Catch ex As Exception m_strErrorMsg = "Excel開始エラー→" & Environment.NewLine & ex.Message Throw New Exception(m_strErrorMsg) End Try End Sub ''' -------------------------------------------------------------------------------- ''' <summary> ''' Excel終了 ''' </summary> ''' <exception cref="Exception">Excelクローズエラー</exception> ''' -------------------------------------------------------------------------------- Public Sub ExcelEnd() m_strErrorMsg = String.Empty Try 'ブッククローズ If (m_objBook IsNot Nothing) Then BookClose() End If 'ブックコレクション開放 ps_ReleaseComObject(m_objBooks) If (m_objApp IsNot Nothing) Then 'Excelアプリ終了 m_objApp.DisplayAlerts = True m_objApp.Quit() ps_ReleaseComObject(m_objApp) End If Catch ex As Exception m_strErrorMsg = "Excel終了エラー→" & Environment.NewLine & ex.Message Throw New Exception(m_strErrorMsg) End Try End Sub ''' -------------------------------------------------------------------------------- ''' <summary> ''' ブックオープン ''' </summary> ''' <param name="I_strWorkBookName">ワークブック名</param> ''' <param name="I_objSheetName">シート名またはシートNo.(デフォルト:先頭シート)</param> ''' <exception cref="Exception">ブックオープンエラー</exception> ''' -------------------------------------------------------------------------------- Public Sub BookOpen(ByVal I_strWorkBookName As String, Optional ByVal I_objSheetName As Object = 1) m_strErrorMsg = String.Empty Try 'ブッククローズ If (m_objBook IsNot Nothing) Then BookClose() End If 'ブック m_objBook = m_objBooks.Open(I_strWorkBookName) 'シートコレクション m_objSheets = m_objBook.Worksheets 'シート m_objSheet = m_objSheets.Item(I_objSheetName) Catch ex As Exception m_strErrorMsg = "Excelオープンエラー→" & Environment.NewLine & ex.Message Throw New Exception(m_strErrorMsg) End Try End Sub ________________________________________________________________________________ ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ 同様に ACCESS でも オブジェクトの操作ができます。 下記は VB2005 のプロジェクトに各種、参照の設定が必要になります。 添付した画像をご覧ください。 _______________________________<サンプル>_________________________________________________ Imports MYQSL_APP.MyQSL.Common 'Microsoft Office 2003 Access のライブラリ Imports Microsoft.Office.Interop.Access Public Class MsAccess_QSL_Print Private m_AccessOBJ As Microsoft.Office.Interop.Access.ApplicationClass Public Sub S_Report_Print(ByVal P_Where As String) Dim cl As New MyQSL.Common.Jousu Dim StrCurPath = My.Application.Info.DirectoryPath '実行パスの取得 Dim StrMdbPath = StrCurPath & "\MDB\QSO_LOG.mdb" m_AccessOBJ = New Microsoft.Office.Interop.Access.ApplicationClass m_AccessOBJ.OpenAccessProject(G_DB_FullPath) m_AccessOBJ.DoCmd.OpenReport("R_QSLカード", AcView.acViewDesign, , P_Where, AcWindowMode.acWindowNormal) m_AccessOBJ.CloseCurrentDatabase() System.Runtime.InteropServices.Marshal.ReleaseComObject(m_AccessOBJ) End Sub End Class ________________________________________________________________________________ ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ そのほかに VSTO というものがあります。 Microsoft Offce 2003 以降のバージョンで あれば使えます。 ただし VSTO は別途購入しなくてはなりませんが・・・ VSTOは あたかもEXCELやWORDの機能の一部のように コマンドボタンや 入力フォームを表示させて さまざまな機能の追加が行えるようにしたものです。 MSDN ライブラリにチュートリアル がありますので そちらをご覧ください。 はじめに (Visual Studio Tools for Office) → http://msdn.microsoft.com/ja-jp/library/23cw517s(VS.80).aspx Office 開発のチュートリアル → http://msdn.microsoft.com/ja-jp/library/ebax1172(VS.80).aspx ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ 上記の操作方法で Access オブジェクト を扱えば なんとかなるのではないかと思います。 __________________________________________________________________________________________________

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

通常、グラフを表示する場合は OCX(有料)のソフトを購入することなるはずです。 グラフ関連のOCXは使用したことがないのでわからないのですが たとえば グレープシティ(http://www.grapecity.com/japan/support/database/dotnet_productlist.htm) から発売されている商品です。 Excel や Access のグラフ を直接、VB.NET 2005 のフォームに表示するのはできないと思いますが・・・・ Google で調べてみると  【VB.NET】グラフコントロール(ZedGraph) http://www.atmarkit.co.jp/fdotnet/vblab/extcompo_02/zedgraph_01.html なるOCX(無料)がありますね。 これでなんとかなればいいのですが。  ただ、単に Access のフォームを起動したいのであれば Shell 関数で Access を起動して 目的のフォームを表示してあげればよろしいと思います。 OCXを使って表示させるには Access (MDB もしくはADP ) のデータを データセットとして VB.2005 側から操作できるようにしてあげればOKです。

関連するQ&A