keybd_eventというAPIを利用。
ただOSからのイベントになるようなので、マクロが動いてる最中だとキーイベントが通らなくてキャプチャ失敗ということがよくある。
DoEventsやSleepでごまかしながらやってみる必要あり。
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_LMENU As Long = &HA4
Private Const KEYEVENTF_EXTENDEDKEY As Long = &H1
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const fKEYDOWN = KEYEVENTF_EXTENDEDKEY
Private Const fKEYUP = KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP
' 現在のスクリーンキャプチャ画像を,特定のシートに貼り付けます。
Sub my_cap(sheet_name)
' シート内の全画像を削除
Sheets(sheet_name).Activate
For Each pic In ActiveSheet.Pictures
pic.Delete
Next
' キャプチャ実行
keybd_event VK_LMENU, 0&, fKEYDOWN, 0& 'Altキーを押す
keybd_event vbKeySnapshot, 0&, fKEYDOWN, 0&
keybd_event vbKeySnapshot, 0&, fKEYUP, 0&
keybd_event VK_LMENU, 0&, fKEYUP, 0& 'Altキーを離す
'貼り付け処理
Sheets(sheet_name).Activate
Range("A1").Select
'SendKeys "+(^V)", True
ActiveSheet.Paste
End Sub
' PrintScreenの自動実行について
' http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9d342.html
ネタ元