• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAからIEを動かしてタブをクリックする方法)

VBAからIEを動かしてタブをクリックする方法

このQ&Aのポイント
  • VBAからIEを操作して特定のタブをクリックする方法について困っています。ソースコードと具体的な問題点を説明します。
  • 具体的な問題点は、タブを押すことができないということです。タブをクリックするためのソースコードを記載しています。
  • さらに、タブをクリックする後の作業についてもアドバイスをいただきたいです。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (774/1619)
回答No.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 は同じです。私は短いので下の方を使っています。 そのような仕事をしているのは羨ましいです。 どうすればそのような仕事に就けるのですが?(私は現在無職です)

その他の回答 (2)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.2

VBAは初歩程度で、的外れの回答ならゴメン。 テーブルのフィールドのデータ型をハイパーリングにしてここへURLを登録する方法はダメですか

回答No.1

サイトのURLを提示しないと回答のしようが無いと思いますよ。 また、どのタブなのか、画像で指し示すなどされたらいかがですか?

masa582
質問者

お礼

すいません、会社の専用線を使用していましてさらに企業秘密からURLを提示することができませんでした。アドバイスありがとうございます!

関連するQ&A