• ベストアンサー

Excel VBAから他のアプリケーションにフォーカスを移したい

VBAからIEを起動していますが、IEの起動後、IEにフォーカスを移したいのですが、どうやればいいのでしょうか? よろしく願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんばんは。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" とできます。 ご質問の意図から外れていたら、ごめんなさい。それから、上記コードは 直接入力したものですから、エラーがあった場合も、済みません。

noname#27115
質問者

補足

結局、name が設定されているので、   IE.Document.all.getElementsByName("zip").Value = "123-4567" のスタイルで落ち着きました。 ありがとうございました。 また、よろしくお願いします。

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

んーー、、で結局 IE にフォーカスを移す目的は何なんですか?

noname#27115
質問者

補足

すみません、結局、戻さなくてよいことがわかりました。w

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

レスが無いとこ見ると、#2 は外していたのでしょうか? > 開いているIEがあれば、そのIEをmyIEに代入し... 知りたいのは、既に起動済みの IE をアクティブにする方法ですか? または Shell で起動した IE ?

noname#27115
質問者

補足

ありがとうございます。フォーカスを移すという点ではOKでした。ただ、コレも、私の説明不足でしたが、フォーカスが移った時点でIEのテキストボックスを埋めようと、Stopを入れていたのですが、そのStopでVBAにまたフォーカスが戻ってきてしまって。。。w それで、、、、なんだかんだ考えていて遅くなりました。すみません。。<m(__)m> で、最終的に、 Textbox=Inputbox(xxx,xxx,xx)でいけるかナット、そんな感じに動いています。 以上、報告させていただきます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。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)
回答No.1

どのようにしてIEを起動しているのかわからないのですが、AppActivate ステートメントを利用すれば出来るかと思います。

noname#27115
質問者

補足

こんにちは。そうでしたね、すみません。 myIEを宣言して・・・ 開いているIEがあれば、そのIEをmyIEに代入し、開いているIE がなければあらたに作成するという方法を採っています。 Set myIE = CreateObject("InternetExplorer.application")

関連するQ&A

専門家に質問してみよう