• ベストアンサー

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

エクセルからあるアプリケーションを起動し、そのアプリケーションの中のデータをエクセルのセルに書き込みたいのですが,その方法を教えていただけませんか。 アプリケーションの中に「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

  • Excelを2つ起動してセルを参照する方法

    ご質問させていただきます。 Excel2007を2つ起動して、他方のシートのセルを参照したいのです。 具体的に説明いたしますと、1つ目のExcel2007をExcel(1)と呼び、2つ目のExcel2007をExcel(2)と呼ぶことにします。Excel(2)のsheet1のA1セル~A48セルまでcalculateイベントでリアルタイムに変化する値が入っています。それらの値をExcel(1)のsheet2のB1セル~B48セルで参照したいのです。 できるのでしょうか? どなたか教えていただけないでしょうか? よろしくお願いいたします。 もしVBAを使わなくてもできるようでしたら、そちらの方法も教えてください。 よろしくお願いいたします。

  • Excelのあるセルの値をテキストデータのある場所に入れたい

    Excelのセルで 1のCの値(123)と1のFの値(456)をテキストデータのなか(木村さんは*** でも私は+++)の***に(123) +++に(456)を埋め込みたいのですが VBAの使い方がわかりませんので教えてください。 

  • Excelのセルのデータ:年月日時間分→年月日抽出処理

    Excelのセルのデータ:年月日時間分→年月日抽出処理 2006/6/13 16:53という年月日時間分から2006/6/13という値だけを取り出す方法、 関数などを教えてください。 もちろん単なる表示だけを変えるならセルのプロパティで選択すればいいのですがフィルタ機能等で抽出を行うため予めデータを直しておきたいのです。

  • エクセルでデータの入ったセルを分ける方法

    エクセルでデータの入力されたセルを分割する方法を知りたいです。 画像のようなエクセルデータがあって、55行のセルに時間が2つ入力されてしまいました。 この55行のセル内のデータを上と下で分割して、1つのセルに1つだけ時間が入るようにしたいのですが、何かいい方法はありませんでしょうか? 詳しい方がいらっしゃいましたら、お助け願います。。。

  • エクセル:同じデータがあれば、同じデータの隣のデータを抽出する。

    エクセル:同じデータがあれば、同じデータの隣のデータを抽出する。 以下のようなエクセルデータがあります。A1からA3の中にC1があれば、 あったセルの隣のセルの値をD1に抽出したいです。 何か方法がありますでしょうか? お願いいたします。  EX: A B  C D 1 2  3 2 5  2 3 9  1 結果: A B  C D 1 2  3 9 2 5  2 5 3 9  1 2

  • [エクセル]データの検索

    エクセルで、膨大な実験データの中から同じ値を探し出しセルの色を変えたいのですが、簡単に出来ないでしょうか?

  • Excelのセルを入力できないようにしたいのですが・・・。

    Excelのあるセルを指定して、そのセルに何も入力できないようにしたいのです。 「データ-入力規制-全ての値」をチェックしてみたのですが、それではダメでした。 方法をご存知の方、教えてください!

  • 【Excelの値が入っていないセルだけセルに色を付

    【Excelの値が入っていないセルだけセルに色を付ける方法を教えてください】 また値が入っているセルだけ色付けする方法も合わせて教えてください。

  • 結合セルのデータを結合していないセルに表示したい。

    WindowsXP、Excel2002を使用しています。 エクセルブック1のセル結合した縦横に大きなセルに入力された値を、エクセルブック2のセル結合していないひとつのセルに表示する方法を教えてください。 普通にコピー&ペーストすると、ひとつのセルにおさまらず、下のセルのデータが消えてしまいます。 よろしくお願いします!

  • Excelのセルから読み込んだ値に応じて異なるアプリを起動する方法

    Excelのセルから読み込んだ値に応じて異なるアプリを起動する方法を教えてください。 具体的にはワークシートのセルに書き込まれたアプリの名前(test1.exeまたはtest2.exe)を読み込んでそれに対応したアプリを実施したいと思っております。なお、それぞれのアプリのプログラムは同一フォルダーに保存されております。 現在以下の様なマクロを書いてトライしておりますが、これを実行すると 実行時エラー '53': ファイルが見つかりません。 というメッセージが出てしまいます。どなたか対策を教えてください。 Sub Macro1() Dim strKeywords As String strKeywords = "ThisWorkbook.Path" & Worksheets("wave_data").Range("G5").Value 'セルG5に起動すべきアプリの名前が記入されています。 MsgBox strKeywords 'アプリ名の読み込みが正しくできたか確認してます。 Shell strKeywords, vbNormalFocus 'この行を実行した直後に実行時エラー'53'がでます。 End Sub

専門家に質問してみよう