[リストへもどる]
一括表示

投稿時間:2003/07/30(Wed) 11:35
投稿者名:TM
Eメール:
URL :
タイトル:
Excel側からの操作
いつもお世話になっています。
現在VB-Excel連携のソフトをはじめて製作しているので、
特にExcel&Word関係についてのサンプルには重宝しております。

標記の件ですが、
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")
から
a = xlApp.WorkSheets("Sheet1").Range("A1")
とデータを取ってきたり
Call xlApp.WorkSheets("Sheet1").CommandButtom1_Click
と関数を呼び出したりは出来るのですが、
今度は逆に、このExcelを操作した場合に、
VBAにてVBの関数を呼び出したり、VBの変数に代入したりすることは可能なのでしょうか?

投稿時間:2003/07/30(Wed) 13:07
投稿者名:Say
Eメール:
URL :
タイトル:
Re: Excel側からの操作
何を期待しているのかよくわかりませんが、
データの受け渡しをしたいのなら、DDEを使うとか。
関数を公開したいのならCOM化するとか。
同様の機能のDLLをVC++で作って利用するとか。

投稿時間:2003/07/31(Thu) 09:27
投稿者名:TM
Eメール:
URL :
タイトル:
Re^2: Excel側からの操作
> 何を期待しているのかよくわかりませんが、
> データの受け渡しをしたいのなら、DDEを使うとか。
> 関数を公開したいのならCOM化するとか。
> 同様の機能のDLLをVC++で作って利用するとか。

何を期待しているのかと言われると戸惑ってしまいますが、
VBにて計測のプログラムを作成し、そのデータをExcelに貼り付け、
Excelで集計やら印刷やらのデータ処理を行っています。
VBからのアクションでExcelの関数を実行できるのだから、
ExcelからVBの関数を呼び出したりも簡単にできるのではと思い質問しました。

DDEとかCOM化とかいうのは聞いたこともありません。
よって回答の意味が全く理解できないので出直してきます。
ありがとうございました。

投稿時間:2003/07/31(Thu) 10:54
投稿者名:Say
Eメール:
URL :
タイトル:
Re^3: Excel側からの操作
> DDEとかCOM化とかいうのは聞いたこともありません。
「DDE」はここの過去ログにも何度か出ています。
VBヘルプで
LinkItem、LinkMode、LinkTopic プロパティを調べてみてください。
プロセス間通信としては簡単な方法のひとつです。

「COM化」は「ActiveX化」といったほうがわかりやすかったですね。
(ここでは COM = ActiveX と考えてください。)
VBアプリをCOM(ActiveX)として作るには、
VB起動時、新しいプロジェクトウィンドウの新規作成タグで、
ActiveXコントロール、ActiveXExe、ActiveXDLLのいずれかを選んでください。

「関数の公開」が目的なら、ActiveXDLLが適当でしょう。
(Timerコントロールのように、貼り付けて使いたいなら、
ActiveXコントロールにします。)

公開したい関数をクラスとして実装し、
(ActiveXDLLを選んだ時点でクラスモジュールが用意されますから、
その中に関数を記述すればOKです。)
プロジェクト名、クラス名を決めて保存し、
コンパイルすれば、拡張子DLLのファイルが作られます。

たとえばこのときのプロジェクト名がprjTestClass
クラス名がclsTestClass  
作った関数が
Public Function AddLong(plngA As Long, plngB As Long) As Long
    AddLong = plngA + plngB
End Function
だとすると、Excel VBA側から

Private Sub CommandButton1_Click()
    Dim a As Object
    Set a = CreateObject("prjTestClass.clsTestClass")
    Sheets("Sheet1").Cells(1, 1).Value = a.AddLong(100, 200)
End Sub

みたいな感じで利用できます。