接続中インスタンスの取得方法

ExcelVBAにてオブジェクトに他ブックやIEを格納して使用していますが、
インスタンスの解放がうまくいかず、状態を調査したいと思っています。
マクロのおいてあるワークブックから、接続中インスタンスをまとめて取得する方法を教えてください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/13 22:37:22
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:dothan No.1

回答回数145ベストアンサー獲得回数25

ポイント50pt

GetObject関数を使って、1つずつNothingにしていけばいいのではないでしょうか。

id:doncho

回答ありがとうございます。

早速、明日GetObject関数で取得を試みます。

これで解決したらとても助かります。

2011/06/13 22:20:41

その他の回答1件)

id:dothan No.1

回答回数145ベストアンサー獲得回数25ここでベストアンサー

ポイント50pt

GetObject関数を使って、1つずつNothingにしていけばいいのではないでしょうか。

id:doncho

回答ありがとうございます。

早速、明日GetObject関数で取得を試みます。

これで解決したらとても助かります。

2011/06/13 22:20:41
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント50pt

Nothingを実施するとExcelVBAの管理下を離れ、OS管理下でガベージコレクションを待つという形になりますので「GetObject関数を使って、1つずつNothing」は使えない手ですし、OS管理下に制御が移ってしまったものの制御はVBAの範疇ではなくVBの範疇となりますので、大げさな話になってしまいます

 

具体的にどのようなコードを書いていて、うまくいかないとはどのような状態を指しているのかが判らないのでヒントのみとりあえず書きますが、ループ処理の中でSet と Nothing を繰り返しているのだとすれば、そのルーチンが回っている間はガベージコレクションは実施されないので、トリガ駆動にすることを考えるか、インスタンスの生成を最小限にする(作成したインスタンスを使いまわす)ことを考えたほうがよろしいでしょう

id:doncho

回答ありがとうございます。

Excelブック内のデータをIEで検索するマクロなのですが、パスワードが必要なサイトで検索を行うため認証後のページをすべてのウィンドウからタイトルとクラスをキーで特定して利用してます。ExcelのWorkBook_Openイベントからマクロにショートカットキーを割り当てているのでこれが怪しいと思っているのですが、原因を特定する方法はないかと悩んでいるところです。

目的は不要なインスタンスをkillすることなので、ひとまずどたんさんの方法でやってみます。

2011/06/13 22:36:21
  • id:taknt
    調査するひとつの手段として どたんさんのやり方は 有効かと思います。

    ま、それで わからなければ あとは windofjulyさんが言うように 別の手段をとるしかないでしょうね。
  • id:doncho
    テスト環境を作ってみた結果、原因が特定できました。
    Workbook_Openイベントに
    Application.Onkey "^+F","aaa"
    を割り当てていたのが原因でしたが、、
    いまだ解決法がわかりません。
    別途質問させていただくかもしれません。
  • id:doncho
    誰も見ていないと思いますが、
    Workbook_Openをトリガにするのをやめて
    Workbook_WindowActivateでApplication.Onkey "^+F","aaa"
    Workbook_WindowDeActivateにApplication.Onkey "^+F"
    とすることで上記の問題は解決しました。
    テスト環境ではうまく動いているので、なんとかなりそうです。
    みなさんありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません