• ベストアンサー

エクセルから起動したアプリのデータをエクセルのセルに入れたい

エクセルからあるアプリケーションを起動し、そのアプリケーションの中のデータをエクセルのセルに書き込みたいのですが,その方法を教えていただけませんか。 アプリケーションの中に「ocx=ActiveX」が含まれていてそのActiveXのプロパティの値を読み出したいのですが。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.3

#1です。 >現在はActiveXをVB6で作成し、ActiveXをformにくみこんでEXEファイルを作成しています。 このような場合はCreateObject()で作成して。。。というのはできません。VB6で作成したEXE側で共有したいデータを共有メモリやファイルに書き出して、それをマクロで読み取る方法が一般的(?)だと思います。 1)すみませんが、Activex(ファイル名はxyTable2005.ocx)を配布する方法を教えていただけませんか。 配布する方法は星の数ほどありますが。。。1番簡単なのはInstallSheildやMSのInstallerを利用する方法です。これにocxを含めてregisterのような項目をtrueにしておけばインストールできます。 私がよく使う方法はEXEのリソースにocxを入れておいてインストール時にリソースから直接ocxを書き出してからDllRegisterServerを呼び出す方法です(要は自分でインストーラを作ってしまう方法です)。

miya2003
質問者

お礼

ありがとうございました。 ファイルに書き出しそれを読み出す方法で解決しました。 教えていただいたこの方法はベストが方法だと感心しています。

miya2003
質問者

補足

ご回答ありがとうございます。 1)<CreateObject()で作成して。。。というのはできません...共有メモリやファイルに書き出して> そうですか、ありがとうございます。おっしゃられるようにこれが一般的というか一番いいと思います。共有メモリは難しそうなのでファイル書き出しになると思います。 2)配布方法のご回答を参考にさせていただきます。 ありがとうございました。

その他の回答 (3)

  • fu_u_ka_i
  • ベストアンサー率51% (15/29)
回答No.4

あんまり詳しくないので、なんなんですが・・ 起動された”あるアプリケーション”側から、エクセルへデータを送り出すということなら 可能なのではないですか? (取りに行くか、送りつけるかの違いがありますが。)

miya2003
質問者

お礼

ありがとうございました。 #3の方の方法で解決いたしました。 今後もよろしくお願いいたします。

miya2003
質問者

補足

ご回答ありがとうございます。 アプリケーション側から、エクセルを起動してエクセルへデータを送り出すということなら可能だと思います。 でも今回は,アプリケーションは産業用のコントローラ(PLCといいます)から制御されています。このアプリケーションはPLCのプログラミングの学習のために作成した仮想の機械です。PLCのプログラムはコンピュータのプログラミング言語を同じだということを学習したいのでCとかJAVAとかを使いたいのですが,今回は一番手軽に使用できるエクセルのVBAを使おうとしています。 エクセルから仮想機械(アプリケーション)を制御したいので今回の質問になりました。 よろしくお願いします。

  • Kazupie
  • ベストアンサー率17% (56/323)
回答No.2

そのアプリケーションがVBAをフォローしていれば、可能だと思います。 「オブジェクトブラウザ」で、クラスとメンバは分かります。 (例) 起動されたアプリケーションのオブジェクトを「aplObj」に「value」プロパティーが有るものとします。(オブジェクトの定義は済んでいるものとします。) cells("A1") = aplObj.value … 「A1セルへの代入」 こんな感じで出来るものと思います。

miya2003
質問者

お礼

ありがとうございました。 #3の方の方法で解決いたしました。 今後もよろしくお願いいたします。

miya2003
質問者

補足

ご回答ありがとうございました。 1)アプリケーションがVBAをフォローしているかの確認ができませんでしたが、このアプリケーションはVB6で作成したものです。 2)そして、アプリケーションを起動しエクセルのほうから「オブジェクトブラウザ」を見ましたがクラスとメンバがありませんでした。 起動したアプリケーションにはActiveX(ファイル名:xyTable2005.ocx)が含まれています。このActiveXのプロパティを取得して、エクセルのセルに表示をしたいのですが。

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

これだけの情報では的確な回答を得ることは難しいと思います。 >アプリケーションの中に「ocx=ActiveX」が含まれていてそのActiveXのプロパティの値を読み出したい とありますが、このときアプリケーション=activeXなら簡単ですが、そうでない場合はアプリケーションにActiveXが含まれていてもいなくても少し面倒(アプリ側にデータをやりとりする機構がないとできない)です。 アプリケーション=activeXの場合は Set aaa=CreateObject("aaa.bbb") Cells(1,1) = aaa.data のような感じで簡単にできます(例えばInternetExplorerもこのタイプです)。

miya2003
質問者

補足

早速のご回答ありがとうございます。 アプリケーションにActiveXを含むのはインストールのためだけです。アプリケーション=ActiveXにすることを思いつきませんでした。 現在はActiveXをVB6で作成し、ActiveXをformにくみこんでEXEファイルを作成しています。 教えていただいたようにしましたら下記のエラーがでました。 プログラム: Dim xyTable As Object Set xyTable = CreateObject("xyTable2005.xyTable") Sheet1.Cells(1, 1) = xyTable.positionX エラー: 実行時エラー'398' クライアントサイトが利用できません。 (3行目のSheet1.Cel..が黄色く反転しています) 1)すみませんが、Activex(ファイル名はxyTable2005.ocx)を配布する方法を教えていただけませんか。 2)クライアントサイトが利用できないというエラーの回避方法を教えていただけませんか。 なお、エラーがでたときにはVB6のxyTableのプロジェクトを起動しています。 よろしくお願いします。

関連するQ&A