アフィリエイト広告を利用しています
G-B2H5YFC4DJ
メール下書き作成
ファイルの名前を一括変更
プログレスバー
文字取り消し線の削除(制限あり)
キーでスクショを連続取得
シート名を一括変更
プロフィール
Dr.ワークさんの画像
Dr.ワーク
主に開発に関するブログです
プロフィール

広告

posted by fanblog

2022年03月21日

キー押下でスクショ

01_title.jpg

会社で使うExcel。いつの間にかExcelのために仕事をさせられていませんか?

Excelを使い倒して、仕事を楽にするツールにしちゃいましょう

この記事は、テスト結果を残すためスクリーンショットが必要な際、

他のツールを動かして、画面を出し、

スクリーンショットボタンを押して、

Excelに貼り付けて、、、

を延々と繰り返すテスト作業のうち、Excel貼り付けの部分だけを楽しようとする

自動化ツールの紹介です

なお、既に同じ記事があり、参考にさせていただきましたので、勝手にご紹介させていただきます

VBA スクリーンショットを撮るたびに自動でシートに張り付けるマクロ(t-hom's diaryさん)

Excelにエビデンスを張り付けるのを自動化した話。(Qiita @snaruse0608さん)

先人の方々に感謝です、ありがとうございます

目次
VBAで効率化したい作業
02_before.jpg
スクリーンショットのエビデンスが必要

仕様検討、設計、テスト仕様が終わり、いよいよテストとなったとき、

テスト結果をスクリーンショットで貼り付けるような作業が待っていたりします

WindowsのGUIは非常に便利ですが、開発したものを第三者に説明する資料として残す作業の中で

スクリーンショットをペタペタ貼る作業は本当に大変です

一旦、スクリーンショットだけでも楽にしましょう

なお、リグレッションテストなどのためにも、可能ならpyautoguiなどで

テストは自動化しておきたいところですが、Python環境がインストールができなかったりと、

難易度が高かったりしますので、VBAで処置します

どんな効果?
03_merit.jpg
  • ツール実施中にスクショ記録のために画面切り替え(★改善)
マクロ

'---------------------------------------------------------------------------------------------------
'
' マクロ: Excel以外のスクリーンショットを貼り続けます
'
' 動作のオンオフ:
'     他のウインドウを選択すると自動保存を開始します
'     再度エクセルをアクティブにすると終了します
'---------------------------------------------------------------------------------------------------
Option Explicit

#If Win64 Then
Declare PtrSafe Function OpenClipboard Lib "user32" (Optional ByVal hwnd As Long = 0) As Long
Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
Declare PtrSafe Function GetForegroundWindow Lib "user32" () As Long
#Else
Declare Function OpenClipboard Lib "user32" (Optional ByVal hwnd As Long = 0) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function GetForegroundWindow Lib "user32" () As Long
#End If

Const STARTPOS As String = "A5"     ' 貼り付けセル開始位置
Const RANGEPOS As Long = 10         ' 画像貼り付け間隔

Sub スクリーンショットをExcelに貼り付ける()
    Dim cb As Variant
    Dim isLoop As Boolean
    Dim OffsetY As Long
    Dim i As Long
    Dim thisHwnd As Long
    Dim wkHwnd As Long
    Dim ws As Worksheet
    Dim shp As Shape
    
    isLoop = True
    OffsetY = 0
    Set ws = ThisWorkbook.ActiveSheet
    
    clearClipboard
    
    thisHwnd = GetForegroundWindow
    
    'シートに画像があったら削除する
    If ws.Shapes.Count <> 0 Then
    
        If MsgBox("シート内の画像を削除してもいいですか?", vbYesNo) <> vbYes Then
            MsgBox "処理を中断します"
            Exit Sub
        End If
        
        'シート内画像を削除
        For Each shp In ws.Shapes
            If shp.Type = msoPicture Then shp.Delete
        Next shp
    
    End If

    MsgBox "スクショ自動貼り付けを開始します"
    
    'ウインドウ切り替えを待つ
    Do
        wkHwnd = GetForegroundWindow
        If wkHwnd = 0 Then
            wkHwnd = thisHwnd
        End If
        Application.StatusBar = "ウインドウ切り替え待ち中(1/3)"
        DoEvents
    Loop While thisHwnd = wkHwnd
    
    
    'PrintScreenを押されたらエクセルに保存していく
    Application.StatusBar = "自動貼り付け中(2/3)"
    Do While isLoop
        cb = Application.ClipboardFormats
        If cb(1) <> -1 Then
            For i = 1 To UBound(cb)
                If cb(i) = xlClipboardFormatBitmap Then
                    ws.Paste Destination:=ws.Range(STARTPOS).Offset(OffsetY, 0)
                    OffsetY = OffsetY + RANGEPOS
                    clearClipboard
                End If
            Next i
        End If
        
        wkHwnd = GetForegroundWindow
        If thisHwnd = wkHwnd Then
            isLoop = False
            Application.StatusBar = "自動貼り付け終了(3/3)"
        End If
        
        DoEvents
    Loop
    
    MsgBox "自動貼り付けを終了します"
    Application.StatusBar = False
End Sub

Private Sub clearClipboard()
    'クリップボードを空にする。
    OpenClipboard
    EmptyClipboard
    CloseClipboard

End Sub
マクロの使い方

マクロをExcelに組み込んでください

[スクリーンショットをExcelに貼り付ける]マクロを実行してください

Excelから画面を変更した後、スクリーンショットを記録始めます

A5セルから10行間隔にスクショを貼ります

Excelをアクティブにしたら、マクロは終了します

スクショした回数だけ、Excelに画像が貼られているかと思います

サンプル

想定している使い方です

@[スクリーンショットをExcelに貼り付ける]マクロを実行します

A別ウインドウに移動し、PrintScreenボタンでスクショします

BExcel画面に戻るとマクロを終了します

CExcelに画像が並んでいますので、後は加工してください

06_P01.gif
以上となります。
posted by Dr.ワーク at 13:42 | Comment(0) | TrackBack(0) | VBA
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/11319274
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。