VBAでIEのタイトルバーを取得する方法
未読分:4件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#4 2014年10月25日(土)07時51分 From: VBA迷人 | 返事 削除 変更 |
回答ありがとうございます。 Shell関数でのやり方はできますので、大丈夫です。 あくまで質問した形でできないかを模索しています。 いい方法ないですかね・・・ |
Message#3 2014年10月25日(土)07時51分 From: VBA迷人 | 返事 削除 変更 |
回答ありがとうございます。 Shell関数でのやり方はできますので、大丈夫です。 あくまで質問した形でできないかを模索しています。 いい方法ないですかね・・・ |
Message#2 2014年10月18日(土)09時11分 From: VBA助け人 | 返事 削除 変更 |
NativeなVBでは、AppActivateの引数にShell関数の戻り値を利用します。 Function Shell(PathName, [WindowStyle As VbAppWinStyle = vbMinimizedFocus]) As Double Sub AppActivate(Title, [Wait]) AppActivate ステートメントの使用例 ' Shell 関数の戻り値を使うこともできます。 ReturnValue = Shell("c:\Program Files\Microsoft Office\Office\EXCEL.EXE",1) ' Microsoft Excel を実行します。 AppActivate ReturnValue ' Microsoft Excel をアクティブにします。 AppActivateの引数にShell関数の戻り値を利用するのは、複数の同じプログラムが起動している場合にどのインスタンスに対してAppActivateを発行するかを識別するためです。 IEの場合であれば、起動時の引数として表示するサイトのアドレスを指定できたと思いますので、ページアドレスはその手法で引き渡せば構わないと思います。 ※ オブジェクトブラウザで確認しましたが、Shell関数もVBAに実装されているようです。 ------------------------------------------- なおNativeなVBの場合、WindowsAPIを呼び出すだけで特定のドキュメント(アドレス)をデフォルトのプログラム(ブラウザ)で開くことができます。 (VBAで実装できるか確認したことはありません) Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) _ As Long Public Const SW_HIDE As Long = 0 Public Const SW_NORMAL As Long = 1 Public Const SW_SHOWMINIMIZED As Long = 2 Public Const SW_SHOWMAXIMIZED As Long = 3 Public Const SW_SHOWNOACTIVATE As Long = 4 Public Const SW_SHOW As Long = 5 Public Const SW_MINIMIZE As Long = 6 Public Const SW_SHOWMINNOACTIVE As Long = 7 Public Const SW_SHOWNA As Long = 8 Public Const SW_RESTORE As Long = 9 Public Const SW_MAX As Long = 10 Public Const SW_FORCEMINIMIZE As Long = 11 Private Sub OpenURL(sFileName As String) Dim lRet As Long ' Open URL lRet = ShellExecute(Me.hwnd, "open", sFileName, "", App.Path, SW_NORMAL) If lRet <= 32 Then MsgBox "Can't Open File !!!" & Format(lRet, " #0") _ , vbExclamation Or vbOKOnly _ , "Open error" End If End Sub |
Message#1 2014年10月4日(土)10時59分 From: VBA迷人 | 返事 削除 変更 |
おはようございます。 VBAでIE操作に挑戦しています。 IEを最善面に表示させる方法について、色々調べる中でもっと簡単な方法がないか探していたらAppActivateステートメントにたどり着きました。 引数titleにIEのタイトルバーに表示されるタイトルを指定すれば表示されると考えました。 そこで、以下のようにすると無事前面表示に成功しました。 Sub sample() Dim objIE As InternetExplorer Call ieView(objIE, "http://www.yahoo.co.jp") AppActivate objIE.LocationName & " - " & "Internet Explorer" End Sub こちらでも問題ないのですが、IEのバージョンによってはタイトル明記が異なる場合もでてくるかもしれないと考え、引数titleの特性で一致したタイトルがない場合は、指定された文字列で始まるタイトルを指定すれば認識してくれるとありました。 そこで、前方一致なら後方の"Internet Explorer"は不要と考え以下のようにしてみました。 Sub sample() Dim objIE As InternetExplorer Call ieView(objIE, "http://www.yahoo.co.jp") AppActivate objIE.LocationName End Sub Sub ieView(objIE As InternetExplorer, _ urlName As String) Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate urlName Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Do Until objIE.document.ReadyState = "complete" DoEvents Loop End Sub するとyahooはうまくいくのですが、他のサイトでは、引数が不正ですとエラーが表示されます。 何が違うのか見てみるとyahooは英文字のみだったのでうまく前面表示できていましたが、他のひらがな・カタカナが入っているサイトではエラーがおきていました。 そこで、表示されている文字列ではなく、文字コードでみているのではないかと思い、LEFT関数を利用して英文字部分だけ抽出してやるとエラーが起きていたサイトでも表示がうまくいきまいた。ただし、頭文字がひらがな・カタカナではじまるサイトはエラーがおきます。 じゃあとりあえずサイトの文字コードをShift-JISにしてみたらどうかと思ったら、こちらでもエラーが起きます。 ここでもうギブアップでこちらで質問させていただきます。 IEを前面に出す方法は他でもありますが、あえてAppActivateを利用した方法で解決する策はないでしょうか? 完全一致ではなく前方一致でどのサイトでも対応できるようにしたいと考えています。 よろしくお願いします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降