- ベストアンサー
VBAからIEを動かしてタブをクリックする方法
- VBAからIEを操作して特定のタブをクリックする方法について困っています。ソースコードと具体的な問題点を説明します。
- 具体的な問題点は、タブを押すことができないということです。タブをクリックするためのソースコードを記載しています。
- さらに、タブをクリックする後の作業についてもアドバイスをいただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私の経験では、IEはなぜか、起動直後はSendKeysを受け入れてくれません。 一度、IEの何もないところをクリックする 又は、Navigateを2回行う、で解決しました。 Navigate2回は時間がかかるので、IEの何もないところをクリックするのがいいと思います。そのためには、IEを左上(好きな場所でいいが、左上が一番楽)に固定する必要があります。 気になるのか、3秒止めていることです。やはり、BusyとRadeyState を見て止めないとうまく行かないと思います。 それと、SendKeysはTrueにした方がいいです。 当然下のプログラムはテストをしていません。 サブルーチンは私が使っているものを流用しました。Esc で止まるようにしてあります。 SleepStop は1 で0.1 秒止まります。 ' マウス操作 Declare Function SetCursorPos Lib "user32" ( _ ByVal x As Long, _ ByVal y As Long) As Long Declare Sub mouse_event Lib "user32" ( _ ByVal dwFlags As Long, ByVal dx As Long, _ ByVal dy As Long, ByVal cButtons As Long, _ ByVal dwExtraInfo As Long) Const MOUSEEVENTF_LEFTDOWN As Integer = &H2 '左ボタンDown Const MOUSEEVENTF_LEFTUP As Integer = &H4 '左ボタンUP Const MOUSEEVENTF_RIGHTDOWN As Integer = &H8 '右ボタンDown Const MOUSEEVENTF_RIGHTUP As Integer = &H10 '右ボタンUP ' キー入力 Declare Function GetAsyncKeyState Lib "USER32.DLL" ( _ ByVal vKey As Long) As Long ' 一時停止 Declare Sub Sleep Lib "kernel32.dll" ( _ ByVal vKey As Long) ' Sub ***() ' Dim objIE As InternetExplorer 'IEオブジェクトを準備 Dim strURL As String '次ページのURL ' Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 objIE.Top = 0 objIE.Left = -7 strURL = "https://*****" objIE.navigate strURL 'IEでURLを開く BusyWait objIE SleepStop 10 SetCursorPos 1, 121 '何もにないところ mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ’ SendKeys "{Tab 8}", True SendKeys "***", True 'IDの入力 SendKeys "{Tab}", True SendKeys "***", True 'パスワードの入力 SendKeys "{Tab}", True SendKeys "{Enter}", True 'ENTERの入力 BusyWait objIE SleepStop 10 ︙ End Sub ' Sub BusyWait(IE As Object) ' While IE.Busy Or IE.ReadyState < 4 SleepStop 1 Wend End Sub ' Sub SleepStop(vKey) ' For i1 = 1 To vKey DoEvents ' If GetAsyncKeyState(27) <> 0 Then Stop End If Sleep 100 Next i1 End Sub しかし、Sendkeysは失敗する可能性が高いコマンドです。 Set objA = objIE.document.getElementsByTagName("input") objA(7).Value = "***" 'IDの入力 objA(8).Value = "***" 'パスワードの入力 objA(9).Click という形にできませんか。私はこうしています。 (Type=File になっている項目はSendKeysを使わないと入力できませんが) (7)(8)(9) は想像です。実際は、ホームページを見なければ判りません。 For Each objA in objIE.document.getElementsByTagName("input") Debug.Print No, objA.Name, objA.Type No = No + 1 Next objA のようなプログラムで、input エリアの情報が得られます。 "input" は"textarea"かもしれません。両方調べてください。 関係ないことですが、 .Document.getElementsByTagName("a") .Document.Links は同じです。私は短いので下の方を使っています。 そのような仕事をしているのは羨ましいです。 どうすればそのような仕事に就けるのですが?(私は現在無職です)
お礼
すいません、会社の専用線を使用していましてさらに企業秘密からURLを提示することができませんでした。アドバイスありがとうございます!