• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:access2003から Firefoxの起動確認)

Access2003からFirefoxを起動する方法とウインドウ管理のテクニック

このQ&Aのポイント
  • Access2003からFirefoxを起動する方法と、複数のURLを連続して表示するテクニックについて説明します。
  • コマンドの実行結果でFirefoxの起動を判断する方法や、待ち時間を最適化する方法についても解説します。
  • また、Access2003の中でFirefoxの起動状態を判断する方法なども紹介します。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

マクロの「アプリケーションの実行」アクションは、VBAではShell関数に 相当します(データベースウィンドウで当該マクロを選択した状態で、 メニューで「ツール(T)→マクロ(M)→マクロを Visual Basic に変換(B)」 を指定すると、マクロをVBAに変換できます)。 ただ、このアクション/関数は「非同期実行」(大雑把にいうと、指定した 処理が完了したかどうかに関係なく、次に記述された処理を実行して しまう)の仕様になっているため、今回ご質問のような動作になったりします。 これの対処として一般的なのは、これらの代わりに「WshShellオブジェクトの Runメソッドを使用する」という方法です。 これを使用すると、Runメソッドの第3引数で、指定した処理が完了する まで待つかどうかを指定できますので、現状の「5秒待ち」を削除すること ができることになります。 参考: http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGetDosResult.html (上記URL表示後、ブラウザで「処理完了を待機する」で検索したら、  その下から読んでみてください) ただ、今回のように「ブラウザで指定したサイトを表示」ということでしたら、 いくつかの制限が許容できるなら、VBAの「FollowHyperlink」メソッドを 使用する手もあるかと思います。 <制限> *現状で気づいた範囲で(汗)*  ・表示に使用されるブラウザは、OSで「既定のブラウザ」に指定された   ものになる   (FollowHyperlinkメソッドは、AccessのフォームやExcelのセルなどに   記述されたハイパーリンクをクリックしたのと同様の動作を行うため、   ブラウザは指定できません)  ・起動済みのFireFoxのタブで開くためには、FireFox側の設定で、   「新しいウィンドウではなく新しいタブで開く」をオンにする必要がある   (FireFoxのメニューで、「ツール(T)→オプション(O)」で開く『オプション』   ダイアログで、『タブ』の項目を選択すると、当該項目が表示されます)  ・URL表示後にメッセージボックス等を表示する場合、当該URLの表示   (読み込み)が完了していなくても、それらの後続処理が実行される 【方法】 <VBAでの準備>  新規の標準モジュールを作成したら、以下のコードを貼り付けて保存します: Option Compare Database Option Explicit Public Function OpenHyperlink(sAddress As String, Optional sSubAddress As String) As Boolean   Call FollowHyperlink(sAddress, sSubAddress, False, False)   OpenHyperlink = True End Function <マクロの記述> 現状のマクロから、「5秒の待機」をさせているアクションを削除した上で、 「アプリケーションの実行」アクションを以下のアクションに置き換えます: アクション: 「プロシージャの実行」 プロシージャ名: 「OpenHyperlink("http://oshiete.goo.ne.jp/")」 ※実際のURLの参照の仕方は、現在「アプリケーションの実行」で  使用されているのと同様の方法を使用できると思います。 ・・・以上、参考まで。

pollux0375
質問者

お礼

DexMachina様、大変ありがとうございました。 無事できました。 最初は「処理完了を待機する」にトライして、難しく感じたの ですが、FireFoxを既定のブラウザにしてOpenHyperlinkでやったら できました。 ありがとうございました。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

アプリケーションが起動しているか否かは VBA の標準モジュールに Function AppIsAlive(trgApp As String) As Boolean Dim wProcess As Object For Each wProcess In GetObject("winmgmts:root\cimv2") _ .ExecQuery("select * from Win32_Process " _ & " where Name='" & trgApp & "'") 'Debug.Print wProcess.Name, wProcess.commandline AppIsAlive = True Exit For Next End Function として置いて、appisalive("firefox.exe") とか appisalive("msaccess.exe") などで True が返ってくれば起動中、False だと存在しないと分かります。 マクロだと(正直マクロはほとんど使ってませんけど) 条件の所に、appisalive("firefox.exe") としてナントカすれば良さそうです。 と考えましたが・・・ >1回目の起動の後5秒ぐらい間を置いて(=Firefoxの起動が完了してから) なのでFireFoxが落ち着いたのを判断しなくてはいけないようですね。 これに関しては、? です。 蛇足ながら(FireFoxも使ったこと・・・) 下記リンクによれば https://developer.mozilla.org/ja/Command_Line_Options 『URL を新しいタブで開きます。Firefox と SeaMonkey2.x のみ。 -new-window URL URL を新しいウィンドウで開きます。Firefox と SeaMonkey2.x のみ。 -search term 』 これは関係ないのかな?

pollux0375
質問者

お礼

ありがとうございます。 返信が遅れてしまい、大変失礼しました。 これからじっくり検討・テストしてみます。