- わしこ
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 35
|
投稿日時: 2006-05-26 14:39
「VB.NETで作成した検索条件入力画面で、
検索条件を入力し「検索」ボタンを押下すると、
その結果がEXCELに一覧とグラフで表示される」
という機能をもったプログラムを作成しようとしています。
EXCELに表示する意味は、表示されたものが
加工(印刷したりレイアウト変えたり等)しやすいからです。
わからない点は、
DB接続・データ抽出までをVB.NETでやった方がいいのか、
それとも検索条件をEXCELに渡してDB接続はVBAでやった方がいいのか、
どちらがいい方法なのか、という事です。
そもそもVB.NETからデータを渡して
VBAでそれを受け取りグラフ表示…ってできるのでしょうか?
相談のような内容になってしまいましたが、
.NET、VBAに精通された方おられましたら教えてください
[ メッセージ編集済み 編集者: わしこ 編集日時 2006-05-26 14:40 ]
[ メッセージ編集済み 編集者: わしこ 編集日時 2006-05-26 14:43 ]
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-05-26 14:43
引用: |
|
わしこさんの書き込み (2006-05-26 14:39) より:
わからない点は、
DB接続・データ抽出までをVB.NETでやった方がいいのか、
それとも検索条件をEXCELに渡してDB接続はVBAでやった方がいいのか、
どちらがいい方法なのか、という事です。
|
どちらの方法も、さらにいろんな方法に分かれるので何とも言えないですね。
VSTO を利用するとか、COM Interop を利用するか、3rd パーティ製品を利用するなど。
引用: |
|
そもそもVB.NETからデータを渡して
VBAでそれを受け取りグラフ表示…ってできるのでしょうか?
|
データを渡す方法はいくつかあります。
グラフで表示するならば、セルに直接値を埋め込むのが手軽かもしれません。
引用: |
|
.NET、VBAに精通された方おられましたら教えてください
|
精通していない者の意見で申し訳ありませんがw どちらもアリじゃないかと思います。
COM Interop を使うよりは、VBA 側ですべてやった方が良いような気もしますが。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- わしこ
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 35
|
投稿日時: 2006-05-26 14:52
じゃんぬねっと様、早速返答ありがとうございます。
引用: |
|
データを渡す方法はいくつかあります。
グラフで表示するならば、セルに直接値を埋め込むのが手軽かもしれません。
|
ネットで検索しましたが、
なかなかそれらしいものがありませんでした。
検索の仕方が悪そうですね。
引用: |
|
精通していない者の意見で申し訳ありませんがw どちらもアリじゃないかと思います。
COM Interop を使うよりは、VBA 側ですべてやった方が良いような気もしますが。
|
いえいえ、とんでもありません。いつもありがとうございます。
そうですね。検索条件をVBAに渡し、検索はVBAでやった方が
解りやすい方法である気がします。
VB.NETからVBAに値を渡す方法があると解っただけでも、
先に進めそうです。
ありがとうございます。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-05-26 15:39
引用: |
|
わしこさんの書き込み (2006-05-26 14:52) より:
そうですね。検索条件をVBAに渡し、検索はVBAでやった方が解りやすい方法である気がします。
VB.NETからVBAに値を渡す方法があると解っただけでも、先に進めそうです。
|
どうせなので、1 つの解決策として書いておきますね。
まず、Excel 側のマクロ関数を呼び出す例です。
「Microsoft Excel xx.x Object Library」を参照設定に追加してください。
(COM オブジェクトなので、ReleaseComObject メソッドで確実に参照を解放する必要があります)
コード: |
|
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim xlApplication As Excel.Application
Try
xlApplication = New Excel.Application()
xlApplication.Visible = True
Dim xlWorkbooks As Excel.Workbooks
Try
xlWorkbooks = xlApplication.Workbooks
Dim xlWorkbook As Excel.Workbook
Try
xlWorkbook = xlWorkbooks.Open("C:\Maki.xls")
xlApplication.Run("MosaMosaAA", "もっさもっさー", "と、文字列を渡してみる")
Finally
If Not xlWorkbook Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook)
End If
End Try
Finally
If Not xlWorkbooks Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbooks)
End If
End Try
Finally
If Not xlApplication Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication)
End If
End Try
End Sub
|
ここでは、Maki.xls という Excel Book にある MosaMosaAA という名前の関数を実行します。
実行するにあたり、2 つの文字列を引数として渡しています。
以下は、その呼び出される側 (Excel Book) 側の関数です。
コード: |
|
Public Sub MosaMosaAA(ByVal stTitle As String, ByVal stMessage As String)
Call MsgBox(stMessage, vbOKOnly Or vbInformation, stTitle)
End Sub
|
ここでは、2 つの文字列を受け取り、メッセージ ボックスを表示します。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- わしこ
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 35
|
投稿日時: 2006-05-26 17:22
じゃんぬねっと様、具体的なコードまでありがとうございます。
いただいたコードを実行してみたところ
.NET側で関数MosaMosaAAを参照するところで
******
'System.Runtime.InteropServices.COMException' のハンドルされていない例外が WindowsApplication1.exe で発生しました。
追加情報 : マクロ 'MosaMosaAA' が見つかりません。
******
なるエラーでとまってしまいます。
明らかにVBA側の関数の書く場所が悪いのだと思っています。
以下のソースをSheet1,Sheet2,Sheet3,ThisWorkBook
新しいモジュールなど、どこに書いても同じ現象が起こってしまいました。
引用: |
|
コード: |
|
Public Sub MosaMosaAA(ByVal stTitle As String, ByVal stMessage As String)
Call MsgBox(stMessage, vbOKOnly Or vbInformation, stTitle)
End Sub
|
ここでは、2 つの文字列を受け取り、メッセージ ボックスを表示します。
[/code]
|
参照設定は行いました。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-05-26 17:51
引用: |
|
わしこさんの書き込み (2006-05-26 17:22) より:
明らかにVBA側の関数の書く場所が悪いのだと思っています。
|
そうですね、標準モジュールに書いてください...
引用: |
|
以下のソースをSheet1,Sheet2,Sheet3,ThisWorkBook
新しいモジュールなど、どこに書いても同じ現象が起こってしまいました。
|
Σ(;゚Д゚) えーっ!!
絶対できるハズなんですが... (;~_~)
開いているファイルが違っていたりとか、そんなことはないですよね...?
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- マー帽
- 常連さん
- 会議室デビュー日: 2006/01/31
- 投稿数: 21
|
投稿日時: 2006-05-26 23:54
横から失礼します。
引用: |
|
いただいたコードを実行してみたところ
.NET側で関数MosaMosaAAを参照するところで
******
'System.Runtime.InteropServices.COMException' のハンドルされていない例外が WindowsApplication1.exe で発生しました。
追加情報 : マクロ 'MosaMosaAA' が見つかりません。
|
ThisWorkbookに作成して、下記の様に記述すれば実行出来るのではないでしょうか?
コード: |
|
xlApplication.Run("ThisWorkbook.MosaMosaAA", "もっさもっさー", "と、文字列を渡してみる")
|
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-05-27 00:07
いえ、標準モジュールに書いてあれば、普通にできるハズなのでそれに驚いています。
(なんせ、私も動作確認していますから...)
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|