- ベストアンサー
VBAで既に開いている別アプリケーションのオブジェクトを得る
VBAで別のアプリケーションにアクセスするには、CreateObject関数を使ってアプリケーションのオブジェクトを作るようにすると思います。例えば、ワード文書にアクセスするなら次の構文になると思います。 Set appWord = CreateObject("Word.Application") appWord.Visible = True しかしこれだと新しいワード文書を作ったり、既存のワードファイルを開いて扱うことしかできません。GetObject関数を用いても同様のようです。既に別ウィンドウで開いているワード文書があって、そこへアクセスするにはどうしたらよいのでしょうか。 また、同じアプリで複数のファイルを開いている場合には、どうやって目的のファイルへのオブジェクトを得るのでしょうか。(ファイル名などを参照して判断?)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Internet Explorerで開いているWindowを取得することはできますよ。 そのためには、まず開いているWindowを順番に取得し、それがInternet Explorerならばそれをオブジェクトに代入し、ひとつもIEウィンドウが存在しない場合は新規作成(CreateObject)すればいいのです。 Windowを取得するにはShell.Applicationというのを使います。 Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ObjIE.Navigate "http://nantokakantoka.html" ObjIE.Visible = True というような感じです。 Wordの場合はわからなくてすみません。 独学なのでもっといい方法があるかもしれないですが。
その他の回答 (2)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>インターネットエクスプローラーに接続 私はオブジェクト使いではありませんので、ネットを探してみました。 下記リンクの [No.156 TypeNameとShell.Applicationを使い起動済みのIEを探す] が役に立つかも知れません。
お礼
ありがとうございます。 ご紹介いただいたURLは確かに勉強になります。ネットを検索するにもテクニックが必要なのですね。自分ではなかなか探せませんでした。
- hana-hana3
- ベストアンサー率31% (4940/15541)
Set appWord = GetObject(, "Word.Application") MsgBox appWord.Documents.Count
補足
ありがとうございます。GetObject関数の引数をよく理解していなかったようです。ExcelからWord、AccessからExcelなどはうまく接続することができました。 ただ、インターネットエクスプローラーに接続しようとすると、うまくいきません。 Set appInet = GetObject(,"InternetExploere.Application") で実行すると、「実行時エラー429、ActiveXコンポーネントはオブジェクトを作成できません。」のエラーが出てしまいます。Officeアプリと違うのでしょうか。
お礼
うまくいきました。ありがとうございます。 InternetExplorerのウィンドウ内に接続していくのは大変ですね。No.2のでご紹介いただいたURLなどもみながら勉強しています。ページ内のFrame、Table、Formなどにたどり着いていくのが大変だということがよく分かりました。