• ベストアンサー

excel VBAのIE操作(フォーカス)について

excel VBAのIE操作で、現在フォーカスされているテキストボックスの名前を取得したいのですが、 何か良い方法はありませんでしょうか?ご教示お願いいたします。

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

  • ベストアンサー
回答No.3

「うんともすんとも」とは、もう少しちゃんとした言葉には出来なかったのですか? こちらで試してみているのだから、どうして出来ないかと考えたり、また、どうしてかと聞くべきではありませんか?掲示板で聞くというのは、一期一会だと思って聞いたほうが価値があると思います。 この"w"って、何かと考えれば分かるはずです。 w とは、すべてのウィンドウのことです。つまり、IEでタブで二つ以上開いていたら、最初のタブ側のウィンドウを探しているということです。  Set objShellWins = CreateObject("Shell.Application").Windows()   For Each w In objShellWins それでも分からないなら、こうでもすれば、分かるはずです。 でも、探し方はいろいろあるはずで、何も、フォーカスしてるものの名前を取るということにこだわらなくても、ループして探してもよいし、他にもあります。最終目的は、そんなことではないのでしょう。この先があるはずだと思います。 '// Sub Test1a()  Dim objIE As Object  Dim objShellWins As Object  Dim w As Object  On Error GoTo ErrHandler  Set objShellWins = CreateObject("Shell.Application").Windows()   For Each w In objShellWins    If TypeName(w) = "IWebBrowser2" Then       Set objIE = w       Exit For    End If   Next   If Not objIE Is Nothing Then   With objIE   If .Document.activeElement.ID <> "" Then    Debug.Print .LocationName, .Document.activeElement.ID    Else    Debug.Print "NO DATA"   End If   End With   End If ErrHandler:  Set objIE = Nothing  Set objShellWins = Nothing  End Sub '// #2のマクロで取った結果: http://oshiete.goo.ne.jp/ [検索する]のテキストボックスは、'searchtop' と出ています。 その次の 画面下の[カテゴリ]のコンボボックスは、'qa_ranking_change' となっています。 また、 https://www.google.co.jp/ の真ん中のテキストボックスは、'lst-ib' http://www.yahoo.co.jp/ の最初のテキストボックは、'srchtxt'

shoe-gal
質問者

お礼

WindFaller 様、kumatti1 様 お世話になっておりますm(_ _)m ご連絡が遅くなり申し訳ございません。 kumatti1 様におっしゃっていただいております、「インスタンス化」を調べてみましたが、 やはり自分で少し勉強する必要があるようです。 こちらはいったん解決とさせていただきます。 いろいろとありがとうございましたm(_ _)m

shoe-gal
質問者

補足

返信ありがとうございます。 教えて頂いたコードを実行させていただきました。 「goo」「google」「yahoo!」ともテキストボックスの値が出ました<(_ _)> 勉強になりました。ありがとうございます。 しかし、自分がトライ中のサイトでも試してみましたが、カーソルを合わせて実行してみましたが、 「NO DATA」となってしまいます(泣) 社内で使用しているイントラネットのサイトなのですが(ソースは下記です)、bodyフレームの中を いじりたいのですが、ダメなようです。何かアクセスさせないような仕組みがあるのでしょうか? 引き続きご教示お願い致しますm(_ _)m <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>SAAA soft</title> <META name="GENERATOR" content="IBM WebSphere Studio"> </head> <frameset frameborder="0" border="0" framespacing="0" rows="55,*"> <frame name="header" src="/jsp/HICM1.jsp?Change=0" scrolling="no" noresize marginheight="0" marginwidth="0"> <frameset frameborder="0" border="0" framespacing="0" cols="144,*"> <frame name="Menu" src="/jsp/HASP1.jsp" scrolling="no" noresize> <frame name="body" src="/jsp/MessageAffServlet" scrolling="auto" noresize> </frameset> </frameset> </html>

その他の回答 (3)

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.4

>社内で使用しているイントラネットのサイトなのですが イントラネットが対象なら、Microsoft Internet Controlsに参照設定して、 >Dim ie As New SHDocVw.InternetExplorerMedium でインスタンス化したIEを使うとか。

shoe-gal
質問者

補足

kumatti1 様 お世話になっておりますm(_ _)m あまりの自分のできなさに、心が折れておりました。 土日は休日のため、月曜に会社に行ったらやってみます。 ありがとうございます!

回答No.2

こんにちは。 これで取れるような気がします。本当は、JavaScript経由で行ったほうがわかりやすいのでしょうが、VBAですから、こんな方法しか思いつきません。以下は、教えてGooのトップページで試してみました。 まあ、取れる所とそうでない所はあるとは思いますが。 '// Sub Test1() Dim objIE As Object Dim objShellWins As Object Dim w as Object On Error GoTo ErrHandler Set objShellWins = CreateObject("Shell.Application").Windows()   For Each w In objShellWins    If TypeName(w) = "IWebBrowser2" Then       Set objIE = w       Exit For    End If   Next   If Not objIE Is Nothing Then   With objIE   Debug.Print .Document.activeElement.ID 'イミディエイトwinへ出力   End With   End If ErrHandler:  Set objIE = Nothing  Set objShellWins = Nothing End Sub '//

shoe-gal
質問者

お礼

返信ありがとうございます。 上記コードを実行してみました(「教えてGooで試しました」)が、うんともすんともなりませんでした。 ありがとうございました。

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

Dim elm As Object Set elm = ie.document.activeElement こんな感じで。

shoe-gal
質問者

補足

RE: 返信ありがとうございます。 やってみました。Aというテキストボックスにカーソルを置いてみて、 イミディエイトウインドウで「print elm」とやってみましたが、 [object] と出ます。その後、Bというテキストボックスにカーソルを移動して、 ObjIE.Document.getElementsByName(elm)(0).Focus (←Aのテキストボックスに移動しているつもりです) とやってみましたが、 「実行時エラー91、オブジェクト変数または、Withブロック変数が設定されていません」 と出てしまいます。 何が原因なのかさっぱりわかりません。引き続きご教示お願い致します<(_ _)>

関連するQ&A

  • Excel VBAでIEを操作し値を取得する方法

    こん色々調査したのですが分からないのでお教えください。 EXCELのVBAにてIEを操作しているのですが 通常のボタン操作やテキストボックスの値を取得するのは 出来ています。 しかし「インラインフレーム(iframe)」内の値を取得する方法が 分かりません。 どなたかお分かりの方はいますでしょうか? 念のため参考のページ内のソースを一部抜粋させていただきます。 <html> <head> <title>SAMPLE</title> </head> <body> <iframe width="400" height="400" src="http://www.yahoo.co.jp"></iframe> </body> </html>

  • エクセルのフォームでのフォーカス

    エクセルVBAでのユーザーフォームの テキストBOX間のフォーカスはenterで移動可能かのですが、間にComboBoxがあるとComboBoxが飛ばされますが そこにもフォーカス移動って可能でしょうか?

  • EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります

    EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります。 (1)ユーザーフォームにテキストボックスを2つ作る (2)コマンドボタンを1つ作る。 この場合に、コマンドボタンを押すと、セットフォーカスされている方のテキストボックスに「新春」と表示させることはできるのでしょうか。 キーボードは当然セットフォーカスされているテキストボックスに入力されますが それと同じ機能をコマンドボタンにも持たせたいのです。 Private Sub CommandButton1_Click() で TextBox1がセットフォーカスされているならTextBox1に"新春"と入力する TextBox2がセットフォーカスされているならTextBox2に"新春"と入力する というような条件式になるのでしょうか。 色々調べましたが答えが見当たりません。 よろしくお願いいたします。

  • エクセルVBA テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

  • Excel vbaでのIE操作(フレーム)について

    ExcelのVBAでIEの操作を勉強しています。 その中でも、複数フレームの処理について勉強がしたいのですが、 良い本、良いサイトをご存知の方いらっしゃいませんでしょうか?

  • エクセルでIEを操作、検索フォームをアクティブに

    VBAを使い、エクセルから立ち上がっているIEを操作し、表示しているHP(YAHOOなど)の入力フォームをアクティブ状態(カーソルが点滅している状態)にしたいのですが、可能でしょうか? 類似の質問で、エクセルVBAでIE(たとえばYAHOOなど)に表示中の検索フォームにテキストを入力後、送信するというようなものは見かけます。 こういった場合、厳密にいえば、入力フォームをアクティブにしてテキストを入力しているわけではないので、IEのウィンドウをアクティブにした時に、検索フォームにカーソルが残っていません。 どなたか、エクセルVBAから入力フォームをアクティブ状態(カーソルが点滅している状態)にする方法をご存じではないでしょうか?

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

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

  • エクセルVBA IEの操作

    こんにちは、 エクセルVBAでIEの操作の質問です。 IEで特定の文字列をクリックするマクロはどのような記述になりますでしょうか? たとえば OKWEBのランキングをクリックする場合はどのようになりますか? http://okwave.jp/mypage から 右上 ランキング という文字をクリックする場合です。 実際にやりたいことは、電子取引ホームページの (PHPで作成されているのかな? 動的なホームページです。)請求書番号を検索してそれを クリックして画面を保存という作業です。イントラなんで ここではURLを公表することが できないため、 OKWEBを一例とさせていただきました。  会社のパソコンでやりたいので UWSC等のフリーソフトも簡単に導入できないし、エクセルならVBA利用は制限されてないので VBAでやろうと考えてます。

  • EXCEL VBA で IE と OutlookExpress を操作する

    EXCEL VBA で IE と OutlookExpress を操作して毎日の作業を自動化 したいと思ってます。 その為に必要な内容の書籍を探していますが本屋さんではなかなか みつかりません。 どなたかご存じの方おりましたら教えてください。

  • エクセルのマクロでフォームを起動したときのフォーカス

    はじめまして。 表題の件ですが、 エクセルのマクロでフォームを作成し、 データ入力をしようとしています。 フォームを入力する際 一番最初に 使用するのはテキストボックスなのですが 起動する際 フォーカス位置はボタンで 一回テキストボックスをクリックしないと フォーカスが移動しません。 起動したときにテキストボックスに初期フォーカスを設定する方法を 教えて頂けませんでしょうか。 どうぞよろしくお願い致します。

専門家に質問してみよう