ExcelでIEを操作

Webベースで勤怠管理をしている場合、ログイン入力がとにかく面倒でしかたなく、プロックスカードで入退室しているんのでログから自動で勤怠管理して欲しいです。

JMeterで自動化をしようとしましたが、シナリオ作成、バッチファイル化、ログインとログオフ時にバッチファイルが動作するようにWindowsのローカルセキュリテイポリシーかタスクスケジューラーを設定しても打刻がされない(出勤・退勤のボタンが押されない)。JMeterはHTTPアクセスコード200が返ってくれば成功としてしまうので、JAVA Servletなどの複雑な処理を再現することが難しいことが判明。

仕方ないので、ExcelからIEを起動させてタイムカードの自動打刻化に成功しました。

サンプルVBAは以下になります。[ ]の中をサイトサービスにより変更してください。

  • strUrl = “https://[URL]” の部分にアクセスするURL
  • objIE.document.all(“[出勤ボタン]”).Click の[出勤ボタン]部分に出勤ボタン名
  • objIE.document.all(“[退勤ボタン]”).Click の[退勤ボタン]部分に退勤ボタン名
  • ExcelのWorksheets(“Sheet1”)A1に企業ID、A2にユーザID、A3にパスワードを入力(ここはサービスにより変更する)

事前にVBAが動作するExcel環境が必要になります。また、出勤ボタン、退勤ボタンの名前はブラウザの開発はツールで確認できます。

1.出勤時のVBA

Sub logIn()
 
Dim objIE As InternetExplorer 'IEオブジェクトを準備
Dim waitTime As Variant
Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット
 
objIE.Visible = True 'IEを表示
 
Dim strUrl As String '次ページのURL
strUrl = "https://[URL]"
 
objIE.navigate strUrl 'IEでURLを開く
 
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
 
    DoEvents
 
Loop
 
Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備
Set htmlDoc = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット

htmlDoc.getElementById("companyID").Value = Worksheets("Sheet1").Range("A1") 'id="companyID"に企業コードを入力
htmlDoc.getElementById("loginID").Value = Worksheets("Sheet1").Range("A2") 'id="user_login"にユーザー名を入力
htmlDoc.getElementById("passwdID").Value = Worksheets("Sheet1").Range("A3") 'id="user_pass"にパスワードを入力

For Each x In objIE.document.forms(0).all
If x.Title = "" Then
x.Click
End If
Next

Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
 
    DoEvents
 
Loop

objIE.document.all("[出勤ボタン]").Click

Application.Wait Now + TimeValue("00:00:01")

objIE.document.all("linkLogout").Click

waitTime = Now + TimeValue("0:00:03")
Application.Wait waitTime

objIE.Quit

Application.Quit
ThisWorkbook.Close
ExcObj.Quit
 
End Sub

2.退勤時のVBA

Sub logIn()
 
Dim objIE As InternetExplorer 'IEオブジェクトを準備
Dim waitTime As Variant
Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット
 
objIE.Visible = True 'IEを表示
 
Dim strUrl As String '次ページのURL
strUrl = "https://[URL]"
 
objIE.navigate strUrl 'IEでURLを開く
 
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
 
    DoEvents
 
Loop
 
Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備
Set htmlDoc = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット

htmlDoc.getElementById("companyID").Value = Worksheets("Sheet1").Range("A1") 'id="companyID"に企業コードを入力
htmlDoc.getElementById("loginID").Value = Worksheets("Sheet1").Range("A2") 'id="user_login"にユーザー名を入力
htmlDoc.getElementById("passwdID").Value = Worksheets("Sheet1").Range("A3") 'id="user_pass"にパスワードを入力

For Each x In objIE.document.forms(0).all
If x.Title = "" Then
x.Click
End If
Next

Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
 
    DoEvents
 
Loop

objIE.document.all("[退勤ボタン]").Click

Application.Wait Now + TimeValue("00:00:01")

objIE.document.all("linkLogout").Click

waitTime = Now + TimeValue("0:00:03")
Application.Wait waitTime
objIE.Quit

Application.Quit
ThisWorkbook.Close
ExcObj.Quit

End Sub

関連記事

TOP