VBAで基幹システム(Web)を操作するためのRPAツールを作っている。
画面に値を入力してから、内部処理が完了するまでの間に動作を待機する必要がある。一律でSleepを入れると無駄な時間が発生して動作が不安定になるのでIEの動作が完了するまで待機する処理を実装する。
うまく作れればExcelで簡単なRPAツールを作ることができる。マウス操作、クリック、指定した画面をアクティブにする、コピー、貼り付け、ぐらいは問題なく関数は作れているのであとは組み合わせるだけ。
フリーソフトをインストールする必要がないのでExcelだけ入っていれば使える簡易なRPAになる。のんびりと作っていこうと思う。
<使い方>
・標準モジュールに貼り付け
・GetIEWindowTitlesでタイトルを確認
・WaitIEの引数に確認したタイトルを指定(部分一致)
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'IEの動作を待機する
Public Function WaitIE(ByVal strCaption) AS Boolean
Dim shells As Object
Dim shell As Object
DIm tgtIE As Object
For i = 0 To 100
Set shells = CreateObject("Shell.Application")
For Each shell In shells.Windows
If TypeName(shell.document) = "HTMLDocument" Then
If InStr(shell.document.Title,strCaption) > 0 Then
Set tgtIE = shell
Exit For
End If
End IF
Next
If Not tgtIE Is Nothing Exit For
Sleep 100
Next
If tgtIE Is Nothing Then
WaitIE = False
Else
'IEが動作中の場合は待つ
Do While tgtIE.Busy = True Or tgtIE.readyState <> 4
DoEvents
Loop
Sleep 100
WaitIE = True
End If
End Function
'WaitIEで指定できる画面を全て取得する
Public Function GetIEWindowTitles() As String
Dim shells As Object
Dim shell As Object
Dim strValue As String
GetIEWindowTitles = ""
Set shells = CreateObject("Shell.Application")
For Each shell In shells.Windows
If TypeName(shell.document) = "HTMLDocument" Then
If strValue <> "" Then strValue = strValue & ","
strValue = strValue & shell.document.Title
End IF
Next
Set shell = Nothing
GetIEWindowTitles = strValue
End Function
0 件のコメント:
コメントを投稿