[[20190426183321]] 『VBAでスクリーンショット取得し所定サイズトリミングして指定セルへ』(ジョニー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでスクリーンショット取得し所定サイズトリミングして指定セルへの貼付マクロ』(ジョニー)

過去の投稿を参考にして、
「VBAでスクリーンショット取得し所定サイズトリミングして指定セルへの貼付マクロ」
を作成したのですが、
オフィスクリップボードが空の状態でマクロを起動すると、
1回目のActiveSheet.Pasteでエラーが起きます。

また、一旦手動でプリントスクリーンキーでスクリーンショットを取ると、
1回目はマクロが動作するのですが、2回目以降マクロを動作させると、
画面が1回目のスクリーンショットのまま貼付られてしまいます。
(例えば1回目は画面にAという表示がある状態で、
 2回目はBという表示がある状態でマクロを動作させているのに、
 2回目のスクリーンショットがAのままになってしまいます)

最初のエラーとスクリーンショットが更新されないのはどこが悪いのでしょうか?

〜以下コード〜

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 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 スクショマクロ()
    keybd_event vbKeySnapshot, 0&, fKEYDOWN, 0&
    keybd_event vbKeySnapshot, 0&, fKEYUP, 0&
    Sheets(1).Activate
    Range("A30").Select
    ActiveSheet.Paste
    With Selection.ShapeRange
        .PictureFormat.CropTop = 155
        .PictureFormat.CropBottom = 368
        .PictureFormat.CropRight = 600
        .PictureFormat.CropLeft = 20
        .ScaleWidth 0.75, msoTrue
    End With
    Selection.Cut
    Range("A30").Select
    ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
End Sub

< 使用 Excel:Excel2007、使用 OS:Windows7 >


Application.Waitで、間をとってみてはどうでしょうか。

(マナ) 2019/04/26(金) 19:29


試してみました。
DoEventsでもよかったです。

(マナ) 2019/04/26(金) 19:33


アドバイスありがとうございます!
Application.Waitを1個入れるとうまくいきました。
立て続けに質問ですみませんがこれってマシンスペックが低い為でしょうか?

Sub スクショマクロ()

    keybd_event vbKeySnapshot, 0&, fKEYDOWN, 0&
    keybd_event vbKeySnapshot, 0&, fKEYUP, 0&

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

    Sheets(1).Activate
    Range("A30").Select
    ActiveSheet.Paste
    With Selection.ShapeRange
        .PictureFormat.CropTop = 155
        .PictureFormat.CropBottom = 368
        .PictureFormat.CropRight = 600
        .PictureFormat.CropLeft = 20
        .ScaleWidth 0.75, msoTrue
    End With
    Selection.Cut
    Range("A30").Select
    ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
End Sub
(ジョニー) 2019/04/26(金) 19:38

>マシンスペックが低い為でしょうか?

たぶん、スペック高くてもだめだと思います。

(マナ) 2019/04/26(金) 19:50


なるほどありがとうございました。
(ジョニー) 2019/04/26(金) 19:53

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.