Open4
PCOMM(AS400)をVBAで制御するメモ
めちゃ参考になった
- ドキュメント
- ポップアップウィンドウへの入力はautECLPS メソッドのSendkeysは使えないので、VBAのsendkeys使う
- autECLFieldList メソッドは集合の塊。
- autECLFieldList メソッドのCountは集合の数
- autECLFieldList メソッドで取得したCountは画面上に配置されている?
- autECLFieldList メソッドのFindFieldByRowColは表示位置の情報を持ってくる
なので、何も表示されていなくてもFindFieldByRowCol(row,col)でブランクが取得できるかもしれない - vbaだと「Application.Wait 3」で止めないとエクセルがよくクラッシュする
- sendkeysの特殊キー
- メソッドは使い回すため、共通変数とすると楽
- ログイン処理時でポップアップが出る場合、vbaからsendkey
- PCによって処理速度が異なるので、処理待ち時間は長めに取ること。
- autECLOIAメソッド、WaitForAppAvailableで処理終わり次第次の処理に移れる
- 引数無いと無制限なので10000(ミリ秒)くらい入れておこう
- 似たようなコマンドにWaitForInputReadyがあるが以下の理由でNG
- 入力欄が先に表示されるケースだと表示処理中でも処理を進めてしまう(っぽい)
- WaitForAppAvailableを使ったら安定しだしたのでこっちを愛用
- autECLPS メソッドのGetTextで値読み込むのも良いが、
whileで上限決めつつリトライさせると安定する - while回す際はApplication.wite で待機時間を作ると安定する
- 待機させたいことはRPA処理上頻出するため、下のように関数にしておくと楽ちん
- autECLOIAメソッド、WaitForAppAvailableで処理終わり次第次の処理に移れる
private sub wite_ms(ms)
Application.Wait [Now()] + wait_ms / 86400
end sub
waitはいっぱいあって何を選べば良いのか結構困る
接続情報ベース
autECLOIA
- WaitForInputReady
- WaitForSystemAvailable
- WaitForAppAvailable
- WaitForTransition
autECLPS
- Wait
- WaitForCursor
- WaitWhileCursor
- WaitForString
- WaitWhileString
- WaitForStringInRect
- WaitWhileStringInRect
- WaitForAttrib
- WaitWhileAttrib
- WaitForScreen
- WaitWhileScreen
検索時はoia使ってたけれど、表示ラグでうまく動かないことが稀にある
psメソッドを検討してたけれど、下の処理でイケる気がしてきた
どっちも見れば対応できる気がするな
Sub wait_ms(ms)
If Not WaitForInputReady(ms) And WaitForAppAvailable(ms) Then
MsgBox ms & "ms経過により Timeout"
End
End If
End Sub
ヒントになりそう