Set objFrame = htmlDoc.frames("kensaku")
Set objTag = objFrame.document.getElementsByName("処理")
For i = 0 To objTag.Length - 1
If objTag(i).Value = "検索" Then
objFrame.document.Script.setTimeout "javascript:objFrame.document.getElementsByName('処理')(" & i & ").click()", 200 '←①ここで「検索」ボタンが押せない!!
Sleep 2000 '「Webページからのメッセージ」が表示されるのを待つ
hwnd = FindWindow("#32770", "Web ページからのメッセージ")
If hwnd <> 0 Then
PostMessage hwnd, WM_COMMAND, vbOK, 0& '←②ここで「OK」がクリックできない!!
1'(WinAPI宣言部は省略)
2Public Sub OK_Click() 'クリック
3 hWindow = FindWindow("#32770", "Web ページからのメッセージ")
4 If hWindow <> 0& Then
5 Call OK_Button
6 End If
7End Sub
89Private Sub OK_Button()
10 hButton = FindWindowEx(hWindow, 0&, "Button", "OK")
11 Do Until IsWindowEnabled(hButton) = 1
12 If hButton = 0& Then
13 Debug.Print "OKボタン喪失:VBA継続"
14 Exit Sub
15 End If
16 Loop
17 Call SendMessage(hButton, &H6, 1, 0&) 'ボタンをアクティブにする
18 Call SendMessage(hButton, &HF5, 0, 0&) 'ボタンをクリックする
19End Sub
<追記2>
VBScript起動から終了とOKボタンクリックのコードです。
VBA
1'(WinAPI宣言部は省略)
2 '★VBScriptを起動
3 TaskId = Shell("WScript.exe " & ThisWorkbook.Path & """\IEbotton.vbs""")
4 timeOut = Now + TimeSerial(0, 0, 10)
5 Do
6 If ie.Busy = True Then '★VBScriptタイヤログ操作成功時Trueとなる
7 Sleep 500
8 'VBScriptの処理を強制終了
9 hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, TaskId)
10 If hProc <> 0& Then 'プロセスハンドルが返されたかを判定
11 Call CloseHandle(hProc) 'プロセスクローズ
12 End If
13 Call OK_Click 'クリック
14 Exit Do
15 End If
16 If Now > timeOut Then End '★VBScriptタイヤログ操作失敗と判断
17 Sleep 100
18 Loop
<追記3>
IE操作してダイアログ表示させる IEbotton.vbs のコードです。
VBScript
1'同一フォルダに`~.vbs`という名前でテキストファイルを作成し、以下のコードを記述して保存しておく。
2'文字のエンコーディングはShift_JISまたはUnicode(UTF16LE)であること。
3Option Explicit
45Private Const TIME_MINIMUMWAIT = 1500
6Private Const TIME_MAXIMUMWAIT = 3000
78Call Main
910Public Sub Main()
11 Dim cnt 'As Long
12 Dim objW 'As Object
13 Dim sWindowName 'As String
1415 For Cnt = WScript.CreateObject("Shell.Application").Windows.Count To 1 Step -1
16 Set objW = WScript.CreateObject("Shell.Application").Windows(cnt - 1)
1718 If objW Is Nothing Then
19 Else
20 sWindowName = ""
21 On Error Resume Next
22 sWindowName = objW.FullName
23 On Error GoTo 0
2425 If LCase(Right(sWindowName, 12)) = "iexplore.exe" Then
26 If InStr(objW.document.Title, "★操作したいIEページタイトル★") > 0 Then
27 Call Sousa(objW)
28 End If
29 End If
30 End If
31 Next
32 Set objW = Nothing
33 Set Debug = Nothing
34 Set Logger = Nothing
35End Sub
3637Private Sub Sousa(ByRef ie)
38 Dim objTag 'IHTMLElementCollectionオブジェクト
39 For Each objTag In ie.document.getElementsByTagName("input")
40 If InStr(objTag.outerHTML, "★ボタン名★") > 0 Then
41 objTag.Click 'ボタンクリック
42 'タイヤログ操作成功時にVBScriptが制御不可。VBAは ie.Busy = True が成立。
43 Exit Sub
44 End If
45 Next
46End Sub
4748Private Sub IENavigate(ByRef ie, ByVal url)
49 ie.Visible = True
50 ie.navigate url
51 Call IEWaitReady(ie)
52 Call IEWaitRandom
53End Sub
5455Private Sub IEWaitReady(ByRef ie)
56 Dim RepeatSec
57 RepeatSec = Timer
58 Do While ie.Busy = True Or ie.readyState < 4
59 WScript.Sleep 200
60 If (Timer - RepeatSec) > 30 Then
61 If ie.readyState = 4 Then
62 Exit Do
63 Else
64 MsgBox "サーバーが応答していません。"
65 ie.Quit
66 End If
67 End If
68 Loop
6970 RepeatSec = Timer
71 Do While ie.document.readyState <> "complete"
72 WScript.Sleep 200
73 If (Timer - RepeatSec) > 5 Then
74 Exit Do
75 End If
76 Loop
77End Sub
7879Private Sub IEWaitRandom()
80 Dim milliseconds
81 milliseconds = -1
82 Do While milliseconds < TIME_MINIMUMWAIT
83 milliseconds = Int(Rnd * TIME_MAXIMUMWAIT)
84 Loop
85 WScript.Sleep milliseconds
86End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/12 01:54
2021/07/12 12:58 編集
2021/07/13 05:45
2021/07/13 09:24
2021/07/15 02:51
2021/07/15 08:35