excel VBAのIE操作(フォーカス)について
未読分:7件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#7 2014年12月12日(金)09時49分 From: VBAマスター | 返事 削除 変更 |
>社内で使用しているイントラネットのサイトなのですが イントラネットが対象なら、Microsoft Internet Controlsに参照設定して、 >Dim ie As New SHDocVw.InternetExplorerMedium でインスタンス化したIEを使うとか。 |
Message#6 2014年12月12日(金)09時48分 From: 宅配GEO | 返事 削除 変更 |
返信ありがとうございます。 教えて頂いたコードを実行させていただきました。 「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> |
Message#5 2014年12月11日(木)08時09分 From: VBAマスター | 返事 削除 変更 |
「うんともすんとも」とは、もう少しちゃんとした言葉には出来なかったのですか? こちらで試してみているのだから、どうして出来ないかと考えたり、また、どうしてかと聞くべきではありませんか?掲示板で聞くというのは、一期一会だと思って聞いたほうが価値があると思います。 この"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' |
Message#4 2014年12月10日(水)09時09分 From: VBAマスター | 返事 削除 変更 |
こんにちは。 これで取れるような気がします。本当は、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 '// |
Message#3 2014年12月9日(火)14時02分 From: 宅配GEO | 返事 削除 変更 |
返信ありがとうございます。 やってみました。Aというテキストボックスにカーソルを置いてみて、 イミディエイトウインドウで「print elm」とやってみましたが、 [object] と出ます。その後、Bというテキストボックスにカーソルを移動して、 ObjIE.Document.getElementsByName(elm)(0).Focus (←Aのテキストボックスに移動しているつもりです) とやってみましたが、 「実行時エラー91、オブジェクト変数または、Withブロック変数が設定されていません」 と出てしまいます。 何が原因なのかさっぱりわかりません。引き続きご教示お願い致します<(_ _)> |
Message#2 2014年12月9日(火)14時01分 From: VBAマスター | 返事 削除 変更 |
Dim elm As Object Set elm = ie.document.activeElement こんな感じで。 |
Message#1 2014年12月8日(月)18時38分 From: 宅配GEO | 返事 削除 変更 |
excel VBAのIE操作で、現在フォーカスされているテキストボックスの名前を取得したいのですが、 何か良い方法はありませんでしょうか?ご教示お願いいたします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降