| |
|
| |
Excel VBA Macro ・ その他 ・ FAQ
|
|
|
|
PrintScreenの自動実行について
|
|
|
|
Question 66.92 その他 |
Excel VBA Borad (掲示板)より |
 |
 |
|
|
PCの全画像をキャプチャしてシートに貼り付けようと思い、下記のようにしたのですがうまくいきません。
SendKeys "{PRTSC}", True の実行時点でクリップボードに入って来ないので、プリントスクリーンを押した認識が出来ていないみたいです。
実際にキーボードで [PrintScreen]を押してから、
Range("M1").Select…以降を実行すると問題はないのですが、何を間違っているのか教えていただきたいと思います。
Sub 試抜き()
'
' 試抜き Macro
' マクロ記録日 : 2004/3/13 ユーザー名 : 品質管理
'
SendKeys "{PRTSC}", True
Range("M1").Select
ActiveSheet.Paste
Selection.Name = "RU"
With Selection.ShapeRange
.PictureFormat.CropTop = 18.75
.PictureFormat.CropLeft = 3.75
.PictureFormat.CropBottom = 378.75
.PictureFormat.CropRight = 522.75
.IncrementTop 27#
End With
Range("N1").Select
End Sub
|
|
|
SendKeysステートメントのヘルプに 「また、Sendkeys ステートメントは、アプリケーションに Copy キーを渡せません。」と書いてありますよ。
ちなみに、Applicationクラスの SendKeysメソッドの方は {PRTSC} という説明もないと思います(つまり使えない)。
以下サンプルを提示しますので、参考にしてください。
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 Sample()
keybd_event vbKeySnapshot, 0&, fKEYDOWN, 0&
keybd_event vbKeySnapshot, 0&, fKEYUP, 0&
'貼り付け処理
End Sub
はずしてたらすみません。
|
|
|
早速のアドバイスまことにありがとうございます。
とりあえずまるまるコピーさせてもらって試してみたところ、貼付け作業のところがステップで送るとうまくいくのに、実行で走らせるとうまくいかなかったので
SendKeys "+(^V)", True
ActiveSheet.Paste
End Sub
と同じ事を 2回やるようにしたらうまくいきました。
ところで、いただいたサンプルのなかみは自分にはチンプンカンプンで応用がきかないので、ついでといっては何ですが、[Alt]キーと [PrintScreen]キーの同時押しに関するサンプルも、提供いただけませんでしょうか。
あつかましいお願いで申し訳ありませんが宜しくお願いします。
|
|
|
しばらく来ていないうちにご注文がついていたのですね。レスが遅くなりまして申し訳ありません。
Altキーについても、仮想的に押して戻してあげればいいので、次のようになります。
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 VK_LMENU As Long = &HA4
Private Const fKEYDOWN = KEYEVENTF_EXTENDEDKEY
Private Const fKEYUP = KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP
Sub Sample()
keybd_event VK_LMENU, 0&, fKEYDOWN, 0&
keybd_event vbKeySnapshot, 0&, fKEYDOWN, 0&
keybd_event vbKeySnapshot, 0&, fKEYUP, 0&
keybd_event VK_LMENU, 0&, fKEYUP, 0&
End Sub
|
|
|
おかげで職場の作業が大幅に改善出来そうです。さっそく仕事で使えるように細工しようと思います。
またお願いするかもしれませんが宜しくお願いします。
|
|
|
|