- 締切済み
【【大至急!!】】VB6.0(SP6)で任意のExcelのデータを参照する
Windows2000環境で任意のエクセルが開かれた時に、GetObjectでxlAppをセットし、そのシートの値を参照するソースを作成しています。以前のURL http://oshiete1.goo.ne.jp/kotaeru.php3?q=1081151 を参考にそのままでは動作しなかったので、変更を加えました。しかし、依然として動作しません。 回答お願いします。 Do DoEvents For i = 0 To 1000 i = i + 1 Next i 'ここで、errmain.countupflagT2は2秒毎に立てる If errmain.countupflagT2 Then If xlApp Is Nothing Then On Error Resume Next Set xlApp = GetObject _ (, "Excel.Application") End If If xlbk Is Nothing Then On Error Resume Next Set xlbk = xlApp.ActiveWorkbook End If On Error Resume Next Set xlsh = xlbk.ActiveSheet If xlbk.ActiveSheet Is Nothing Then Else Judge End If If xlApp.Visible = False Then Set xlApp = Nothing Set xlbk = Nothing Set xlsh = Nothing End If End If Loop 上記のような感じで、エクセルが閉じた時には、逆の処理をしたいのですが・・・。 エクセルが起動しても、xlbk以降がSetできません。 xp環境ではそれなりに動いてますが。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- takkunnet
- ベストアンサー率74% (32/43)
処理的には間違っていないと思うのですが、正しくセットされていないというのは、他に外部要因があると考えざる終えませんね。。。 ためしに、 Set xlApp = GetObject (, "Excel.Application") の後に xlApp.Caption="test" として対象のExcelのタイトルの部分が変更されるかを確認されていはいかがでしょうか?
- takkunnet
- ベストアンサー率74% (32/43)
>Do...Loopで回して待ち受けているんですが...。 待機中に外部ソフトから該当のExcel(xlApp)にファイルが開かれているのは確かなのでしょうか? もしかしたら他にExcelが起動してそちらに開かれたりしているのでは無いでしょうか? ちなみにWithEventsを使用するなら、FormもしくはClassを追加して、その中に宣言してやればできるはずです。 取得するイベントは WorkBooks_Open くらいでしょうか。
お礼
回答有難うございます。 >もしかしたら他にExcelが起動してそちらに開かれた りしているのでは無いでしょうか? についてですが、確認すると、Excelは1つしか存在しませんでした。(タスクマネージャ・プロセスでの確認) WithEventsについては、トライしてみます。
- takkunnet
- ベストアンサー率74% (32/43)
On Error Resume Next Set xlbk = xlApp.ActiveWorkbook となっていますが、ActiveWorkbookが無い場合は当然xlbkには何もせっとされません。 そのあたりが原因と思われます。
補足
回答有難う御座います。外部ソフト処理でActiveWorkbookはいつ来るか分かりません。また、そのソフトはシートに保護をかけています。それで、Do...Loopで回して待ち受けているんですが...。 WithEventsキーワードを使用して、オブジェクトのイベントに対する応答とか、使ってみようとしたのですが、うまくいきません。
お礼
問題は完全に解決していません。 しかし、解決に近いところまで来ています。 有難うございました。