スポンサーリンク
VBAでIE(Internet Explorer)の操作ができるようになり、次は他のアプリケーションを操作する方法について自分用のメモとして残しておくので、定期的な確認作業をオートメーションする際のヒントにしてもらえたら幸いです。
他のアプリケーションの操作方法
手順1
ログイン画面のあるアプリケーションを起動する。
手順2
ログインを行う。
手順3
ログイン後の画面をスクリーンショットで、Excelのシートに貼り付ける。
手順4
手順3のシートをPDF出力する。
手順5
手順4のシートを別のエクセル出力する。
※今回は紹介しませんが、この手順5の後にメール送信を行えたら尚良いと思います。
FFFTPを対象とした際のツール作成手順
近内はログイン画面のあるアプリケーション(ソフトウェア)として、FFFTPを作業の対象とするようになったので、そちらの手順もここに記しておきたいと思います。
作成手順
手順1
下記リンクの記事に沿ってツールを作成し、そのツールを用いて手順を進める。
-
VBAのユーザーフォームでハンドル情報を取得する方法[No19]
動機 自宅にてアプリケーションの自動操作を行うプログラムを作成する機会がありました。 ほとんどのWindowsのアプリケーションは、管理番号がふられた部品で構成されています。 この管 ...
手順2
窓の杜からFFFTPをダウンロードして「 "C:\ffftp\FFFTP.exe" 」となるように保存しておく。
-
「FFFTP」定番FTPクライアントソフト - 窓の杜
FFFTPのダウンロードはこちら 左右分割型で日本語UIのFTPクライアント。ウィンドウ内左右にローカルディスク側とホスト側のファイル一覧を表示し、ドラッグ&ドロップや右クリックメニューなどの操作で ...
続きを見る
※窓の杜では、アプリケーション(ソフトウェア)を窓の杜ソフトライブラリに収録する際、配布元からダウンロードし、ウイルスバスタークラウド、ノートンセキュリティ、ESET Internet Security、Windows Defenderという4つのウイルス対策ソフトで、常に最新のウイルス定義ファイルを使用してウイルスチェックが実施されています。そのため、FFFTPは比較的安全に使用することができるアプリケーションであると言えるでしょう。
-
窓の杜 - 窓の杜でのウイルスチェックについて
続きを見る
スポンサーリンク
手順3
Excel(拡張子xlsm)を新規作成した後、モジュール(Module1)を作成したら、次のコードで上書きする。
Option Explicit
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hWndParent As Long, ByVal hwndChildAfter As Long, _
ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As String) As Long
Private Declare Sub keybd_event Lib "USER32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public Sub Main()
'①区切り線#############################################################################
'画面0:FFTP起動
On Error GoTo ErrEnd
Dim ret As Long
ret = Shell("C:\ffftp\FFFTP.exe", vbNormalFocus)
On Error GoTo 0
DoEvents
Application.Wait Now() + TimeValue("00:00:03")
DoEvents
'②区切り線#############################################################################
Dim className As String
Dim windowTitleName As String
'画面1:FFTP起動画面
className = "#32770"
windowTitleName = "FFFTP"
Dim handleOwner As Long
handleOwner = FindWindow(className, windowTitleName)
Dim handlechild As Long
handlechild = FindWindowEx(handleOwner, 0, "Edit", vbNullString)
Call SendMessage(handlechild, &HC, 0, "Password")
Dim handleButton As Long
handleButton = FindWindowEx(handleOwner, 0, "Button", "OK")
Call SendMessage(handleButton, &H6, 1, 0&) 'ボタン→アクティブ化
Call SendMessage(handleButton, &HF5, 0, 0&) 'ボタン→クリック
DoEvents
Application.Wait Now() + TimeValue("00:00:03")
DoEvents
'③区切り線#############################################################################
'画面2:ホスト一覧画面
className = "#32770"
windowTitleName = "ホスト一覧"
handleOwner = FindWindow(className, windowTitleName)
AppActivate windowTitleName
handleButton = FindWindowEx(handleOwner, 0, "Button", "閉じる(&O)")
Call SendMessage(handleButton, &H6, 1, 0&) 'ボタン→アクティブ化
Call SendMessage(handleButton, &HF5, 0, 0&) 'ボタン→クリック
DoEvents
Application.Wait Now() + TimeValue("00:00:03")
DoEvents
'④区切り線#############################################################################
'画面3:FFTP(*)画面
className = "FFFTPWin"
windowTitleName = "FFFTP (*)"
handleOwner = FindWindow(className, windowTitleName)
AppActivate windowTitleName
'⑤区切り線#############################################################################
'アクティブ画面スクリーンショット
keybd_event &HA4, 0&, &H1, 0&
keybd_event vbKeySnapshot, 0&, &H1, 0&
keybd_event vbKeySnapshot, 0&, &H1 Or &H2, 0&
keybd_event &HA4, 0&, &H1 Or &H2, 0&
'全画面スクリーンショット
'keybd_event vbKeySnapshot, 0&, &H1, 0&
'keybd_event vbKeySnapshot, 0&, &H1 Or &H2, 0&
DoEvents
Application.Wait Now() + TimeValue("00:00:01")
DoEvents
'⑥区切り線#############################################################################
'Sheet1に貼り付け
Dim sheetName As String
sheetName = "Sheet1"
Worksheets(sheetName).Activate
Range("A1").Select
ActiveSheet.Paste 'または、SendKeys "+(^V)", True
DoEvents
Application.Wait Now() + TimeValue("00:00:01")
DoEvents
Range("A25").Select
ActiveSheet.Paste 'または、SendKeys "+(^V)", True
'⑦区切り線#############################################################################
'出力
Dim fileName As String
fileName = "資料(" & Format(Now(), "YYYY年MM月DD日") & "(" & Format(Now(), "aaa") & ")" & "_" & Format(Now(), "hh時nn分ss秒出力") & ")"
'PDF出力
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=ThisWorkbook.Path & "\" & fileName & ".pdf"
'⑧区切り線#############################################################################
'Excel出力
Application.DisplayAlerts = False
Sheets(sheetName).Copy
ActiveWorkbook.SaveAs _
fileName:=ThisWorkbook.Path & "\" & fileName, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
ActiveSheet.DrawingObjects.Delete
ThisWorkbook.Close
Application.DisplayAlerts = True
'⑨区切り線#############################################################################
Exit Sub
ErrEnd:
MsgBox "実行できませんでした。" & vbCrLf & "エラー内容:" & Err.Description
End Sub
この手順でツールを作成したところ、私のPCでMainを実行すると、期待していた動作を得ることができました。
関連記事
-
ウィンドウハンドル関連の記事一覧[No74]
記事一覧 ハンドル番号、キャプション名、クラス名について書かれた記事のまとめです。 最後までお付き合いいただきありがとうございます! この情報が誰かの役にたてれば幸 ...
雑記
1日に何か1つでも良いことがあると、心地よく眠れますよね。
天気が良かったとか、早く仕事が終わったとか、夕飯が美味しかったとか、どんな小さなことでもいいんです。この記事を読んでくれた皆さんにとって、明日も何か良いことがありますように。
最後までお付き合いいただきありがとうございます!
この情報が誰かの役にたてれば幸いです。