この記事を読むと・・・ |
---|
ExcelVBA(マクロ)でキャプチャ画像を自動でシートに貼り付けるツールの作成方法が理解できる |
エクセルで画面キャプチャを貼り付けるVBAの作成方法
記載のコードをそのまま使いたい場合は以下の通り設定して下さい。
- Microsoft Excel マクロ有効ワークシート (.xlsm)を新規で作成する
- 「ScreenCaptureTool.xlsm」という名前で保存する
- 記載されているコードをそのまま貼り付ける
- 「マクロ実行」と「エビデンス」というシートを作成する
- VBAのコードを割り当てるボタンを「マクロ実行」シートに三つ作成する
①画面キャプチャを実行する用
②キャプチャしたシートを別ブックにエクスポートする用
③キャプチャ画像等が記載されたシートの初期化用 - ボタンに以下のコードを割り当てる
①StartCapture
②SaveEvidenceSheet
③DeleteAllCells - VBAを設定したエクセルファイルを起動する
- マクロの実行を許可する
以下のコードには大きく3種類のコードが記載されています。
①画面キャプチャをシートに貼り付ける処理
②画面キャプチャを貼り付けたシートを別ブックとして保存(エクスポート)する処理
③画面キャプチャを貼り付けていたシートを初期化する処理
'### API関数定義 ###'
Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPtr
Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPtr
'### 基本情報定義 ###'
Private FileName As String
Private SheetName As String
Private CheckFlag As Boolean
Private BaseCell As Variant
Private LastRow As Long
'### クリップボードリセット ###'
Sub ClearClipboardImage()
' クリップボードを開く
If OpenClipboard(0) <> 0 Then
' クリップボードから画像データを削除する
EmptyClipboard
' クリップボードを閉じる
CloseClipboard
End If
End Sub
'### 画面キャプチャ開始 ###'
Sub StartCapture()
MsgBox "画面キャプチャを開始します。"
Application.OnKey "{ESC}", "StopCapture"
CheckFlag = True
' 画面キャプチャの貼り付け先の情報を定義する
FileName = "ScreenCaptureTool.xlsm"
SheetName = "エビデンス"
' 画面キャプチャ終了フラグを定義する
CheckFlag = True
' 画面キャプチャ開始時にクリップボードを一旦リセットする
ClearClipboardImage
' 画面キャプチャ開始する
ExeCaptute
End Sub
'### 画面キャプチャ貼り付け処理 ###'
Sub ExeCaptute()
' ESCキーでエラー処理に進む
On Error GoTo ErrHandler
' クリップボードにビットマップ形式の画面キャプチャがあれば貼り付けする
If Application.ClipboardFormats(1) = xlClipboardFormatBitmap Then
Workbooks(FileName).Sheets(SheetName).Activate
' A列の最終行を取得する
LastRow = Cells(Rows.Count, "A").End(xlUp).row
' キャプチャ取得日を貼り付け
If Not IsEmpty(Workbooks(FileName).Sheets(SheetName).Range("A1")) And Trim(Workbooks(FileName).Sheets(SheetName).Range("A1").Value) <> "" Then
Cells(LastRow + 58, "A").Value = "【取得日時:" & Now & "】"
Cells(LastRow + 58, "A").Offset(1, 1).Select
Else
Cells(LastRow, "A").Value = "【取得日時:" & Now & "】"
Cells(LastRow, "A").Offset(1, 1).Select
End If
Worksheets(SheetName).Paste
Application.CutCopyMode = False
' 画面キャプチャのクリップボードをリセットする
ClearClipboardImage
' シートに改ページを挿入する
ActiveSheet.HPageBreaks.Add Before:=Cells(LastRow + 58, "A")
End If
' 次回実行予定時刻を設定(1秒ごとに実行)
Application.OnTime Now + TimeValue("00:00:01"), "ExeCaptute", , CheckFlag
Exit Sub
' エラー処理
ErrHandler:
CheckFlag = False
End Sub
'### 画面キャプチャ停止 ###'
Sub StopCapture()
If CheckFlag = True Then
CheckFlag = False
Application.OnKey "{ESC}", ""
MsgBox "画面キャプチャを停止します。"
End If
End Sub
Sub DeleteAllCells()
' 「エビデンス」シートのすべてのデータとオブジェクトを削除する
ThisWorkbook.Sheets("エビデンス").Cells.ClearContents
ThisWorkbook.Sheets("エビデンス").DrawingObjects.Delete
MsgBox "「エビデンス」シートをリセットしました。"
End Sub
Sub SaveEvidenceSheet()
' 保存時刻を取得
Dim SaveTime As String
SaveTime = Format(Now, "yyyymmdd_hhnnss")
'名前をつけて保存
Dim Save_File As Variant
Save_File = Application.GetSaveAsFilename(InitialFileName:="作業エビデンス_" & SaveTime, _
FileFilter:="Excelファイル,*.xlsx,すべてのファイル,*.*")
' キャンセルされた場合の処理
If Save_File = False Then
MsgBox "ファイルの保存をキャンセルしました。", vbInformation, "キャンセル"
Exit Sub
End If
' 既存のファイルを上書きするかしないかの判定
If Dir(Save_File) <> "" Then
msg = "同じ名前のファイルが他に存在します。上書きしますか?"
If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
' メッセージ表示オフ
Application.DisplayAlerts = False
End If
' シートのコピー、ファイル保存
Sheets("エビデンス").Copy
ActiveWorkbook.SaveAs FileName:=Save_File, FileFormat:=xlOpenXMLWorkbook
' ファイルを閉じる
ActiveWorkbook.Close
End Sub
ファイル名やシート名などを自分好みに変更したい場合は、
ファイル名「ScreenCaptureTool.xlsm」、シート名「エビデンス」となっている部分を任意の名前に変更してください。
ダウンロード
マクロが組み込まれたファイルをダウンロードしてもOKな環境の方は、すでに作成済みのファイルがあるので、以下のリンクからダウンロードすればそのまま使用できます。
※エクセルのバージョンなどによって上手く動作しない可能性がありますので使用は自己責任でお願いします。
使用手順
作成済みのファイルを参考に使用方法を解説します。
ScreenCaptureTool.xlsmを開き、『コンテンツの有効化』をクリックします。
※マクロを有効化します。
「マクロ実行」シートにある『キャプチャ開始』のボタンをクリックします。
※開始されると「画面キャプチャを開始します。」のメッセージが表示されます。
『Print Screen』ボタンを押下し、画面キャプチャを取得します。
画面キャプチャが取得される度に、取得日時と画面キャプチャが「エビデンス」シートに貼り付けられます。
『Esc』キーを押下し、画面キャプチャを終了します。
※停止されると「画面キャプチャを停止します。」のメッセージが表示されます。
『エビデンスシートを別ブックで保存する』をクリックします。
保存先とファイル名を指定する画面が表示されるので任意の名前、場所を設定し、保存してください。
別ブックにエビデンスが保存されたことを確認後、『エビデンスシートをリセットする』をクリックし、エビデンスシートを初期化します。
※リセットされると”「エビデンス」シートをリセットしました”のメッセージが表示されます。