あえてエクセルを2つ起動してセルを参照する方法
ご質問させていただきます。
Excel2007を2つ起動します(あえて2つ起動する必要があります)。1つのExcel上に2つのブックを開くのではありません。
1つ目のExcel2007をExcel(1)と呼び、2つ目のExcel2007をExcel(2)と呼ぶことにします。
Excel(1)で開くファイル名は「板とチャート」で、Excel(2)で開くファイル名は「ティック」です。
Excel(1)とExcel(2)は同一のデータベンダーとDDE接続しており、平日の午前9時~午後3時までリアルタイムでデータが更新されます。
それぞれ受信したデータをVBAやワークシート関数で加工して各シートに表示しています。
このDDE接続はデータベンダーが提供するものであり、プロシージャはパスワードでロックがかかっており、私は見る事もいじる事も出来ませし、そもそもVBAに関して初歩的な知識しかないため、DDE接続自体をよく理解しおらず、いじれません。
今回やりたいことを以下に記します。
Excel(2)のファイル名「ティック」ワークシート名「連続」のQ1,Q2,Q3,Q4,Q5,Q6セルのそれぞれの値をExcel(1)のファイル名「板とチャート」ワークシート名「板」のC5,C13,C21,C29,C37,C45に表示させ、同様に、Excel(2)のファイル名「ティック」ワークシート名「連続」のR1,R2,R3,R4,R5,R6セルのそれぞれの値をExcel(1)のファイル名「板とチャート」ワークシート名「板」のI5,I13,I21,I29,I37,I45に表示させたいのです。
なお、Excel(2)のQ1~Q6セル及びR1~R6セルの値はそれぞれIF関数で"A","B"または空欄にリアルタイムで変化します。
従いまして、その"A","B",空欄をExcel(1)のファイル名「板とチャート」ワークシート名「板」のC5,C13,C21,C29,C37,C45セル及びI5,I13,I21,I29,I37,I45セルにリアルタイムに反映させたいのです。
なお、Excel(2)のIF関数の"A","B"または空欄を判定する各セルはcalculateイベントで1秒間に複数回更新されるカウンターになっています。
従いまして、IF関数の"A","B"又は空欄は1秒間の間に変化することもあります。
以上の事を実現いたしたく、以下を試してみました。
Sub できるかな()
Dim xlApp As Application
Set xlApp = GetObject("C:\Users\hoully\Desktop\ティック.xlsm", "Excel.Sheet").Application
Worksheets("板").Range("C5") = xlApp.Worksheets("連続").Range("Q1").Value
End Sub
実行すると、VBAprojectにVBAproject(ティック.xlsm)が追加されるのですが、
「実行時エラー 9
インデックスが有効範囲にありません。」
と表示され、Worksheets("板").Range("C5") = xlApp.Worksheets("連続").Range("Q1").Valueが黄色になります。
Worksheets("板").Range("C5") = xlApp.application.Worksheets("連続").Range("Q1").Valueとやっても同じ事が起こりました。
次に、以下を試してみました。
Sub できるかな2()
worksheets("板").range("C5").formula= "=INDEX([C:\Users\hoully\Desktop\ティック.xlsm]sheet2!Q1:R6,1,1))"
End Sub
「実行時エラー1004
アプリケーション定義またはオブジェクト定義のエラーです」
と表示されてしまいます。
私はExcelもVBAも初心者で、非常に単純なプロシージャを作るにも本やネットを参照しなければ作れないレベルです。
そのため、どこが悪いのかよくわかりません。
どなたか教えていただけないでしょうか?
よろしくお願いいたします。
お礼
ご返答ありがとうございます。