- ベストアンサー
Excel VBAから他のアプリケーションにフォーカスを移したい
VBAからIEを起動していますが、IEの起動後、IEにフォーカスを移したいのですが、どうやればいいのでしょうか? よろしく願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。KenKen_SP です。 > フォーカスが移った時点でIEのテキストボックスを埋めようと... IE のテキストボックスにデータを流し込むなら、特にフォーカスを得なくても 可能だと思いますよ。例えば、テキストボックスなら INPUT タグですから、 For Each f In IE.Document.all.tags("input") ' TEXTBOX If LCase(f.Type) = "text" then Debug.Print f.Name End If Next f みたいな感じで列挙できます。あとは HTML ソースの name 属性を見て、 代入の判定をすれば良いかと。例えば、郵便番号なら大抵 zip とか postal なんて名前がついてますから、 For Each f In IE.Document.all.tags("input") Select Case LCase(f.Type) Case Is = "text" If f.Name Like "*zip*" or f.Name Like "*postal*" then f.Value = "123-4567" End If Case Is = "radio" Case Is = "checkbox" End If Next f このような感じで。 最初から テキストボックスの name 属性が分かっている場合は決め打ちで、 IE.Document.all.getElementsByName("zip").Value = "123-4567" とできます。 ご質問の意図から外れていたら、ごめんなさい。それから、上記コードは 直接入力したものですから、エラーがあった場合も、済みません。
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
んーー、、で結局 IE にフォーカスを移す目的は何なんですか?
補足
すみません、結局、戻さなくてよいことがわかりました。w
- KenKen_SP
- ベストアンサー率62% (785/1258)
レスが無いとこ見ると、#2 は外していたのでしょうか? > 開いているIEがあれば、そのIEをmyIEに代入し... 知りたいのは、既に起動済みの IE をアクティブにする方法ですか? または Shell で起動した IE ?
補足
ありがとうございます。フォーカスを移すという点ではOKでした。ただ、コレも、私の説明不足でしたが、フォーカスが移った時点でIEのテキストボックスを埋めようと、Stopを入れていたのですが、そのStopでVBAにまたフォーカスが戻ってきてしまって。。。w それで、、、、なんだかんだ考えていて遅くなりました。すみません。。<m(__)m> で、最終的に、 Textbox=Inputbox(xxx,xxx,xx)でいけるかナット、そんな感じに動いています。 以上、報告させていただきます。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 いろいろ方法はあります。IE オブジェクトを作って起動した場合、ウインドウ ハンドルもタイトルも容易に取得できます。 確実なのは、ウインドウハンドルを使ってアクティブにする方法です。 Private Declare Function SetForegroundWindow Lib "user32.dll" ( _ ByVal hWnd As Long _ ) As Long Sub Sample Dim IE As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True '(処理) SetForegroundWindow(IE.HWND) '<-- アクティブに Set IE = Nothing End Sub
- masa_019
- ベストアンサー率61% (121/197)
どのようにしてIEを起動しているのかわからないのですが、AppActivate ステートメントを利用すれば出来るかと思います。
補足
こんにちは。そうでしたね、すみません。 myIEを宣言して・・・ 開いているIEがあれば、そのIEをmyIEに代入し、開いているIE がなければあらたに作成するという方法を採っています。 Set myIE = CreateObject("InternetExplorer.application")
補足
結局、name が設定されているので、 IE.Document.all.getElementsByName("zip").Value = "123-4567" のスタイルで落ち着きました。 ありがとうございました。 また、よろしくお願いします。