教えてください。
画面コピーを取得するシステムを作成しています。
prtscrキーを押すと、画面コピーを取り続ける仕組みなのですが、現在私が作成しているものだと貼り付け位置が右下にズレ続けてしまいます。
これを、ズレ続けることなく、右下→左下→右下→左下と規則的にセルが移動できるようにしたいです。また可能であれば、画面コピーの倍率も70%→20%→70%→20%と変動させたいのですが、どのようにすれば良いのでしょうか。以前にMOD関数を活用すべきというご助言も頂いたのですが、利用方法がよく分からずに困っています。よろしくお願いします。
<現在作成中のVBA>
' キャプチャ収集状態なら True
Private isLogging As Boolean
' キャプチャを貼り付けるブック名を保持する
Private fileName As String
' キャプチャを取得する
Private Sub Capture()
On Error GoTo errorHandler
' クリップボードに画像が格納されていたら貼り付ける
If Application.ClipboardFormats(1) = xlClipboardFormatBitmap Then
Dim rows As Integer: rows = 39 ' 行数
Dim cols As Integer: cols = 72 ' 列数
' キャプチャを貼り付けるブックを選択する
Workbooks(fileName).Activate
' 選択しているセルを基準セルとして取得する
Dim baseCell As Variant
Set baseCell = Selection
' クリップボードのデータを貼り付け、行数に合わせて縮小する
baseCell.Offset(3, 1).Select
ActiveSheet.Paste
With Selection.ShapeRange
.LockAspectRatio = msoTrue
.Height = .Height * 0.7
End With
' 次の画像を貼るために基準セルを移動し、クリップボードに現在のセルの値をコピーする (先頭を Bitmap でなくすため)
With baseCell.Offset(rows - 25, 8)
.Select
.Copy
End With
' 切り取り・コピーモードを解除する
Application.CutCopyMode = False
End If
' 1秒間隔で再実行するようタイマーをセットする
Application.OnTime Now + TimeValue("00:00:01"), "Capture", , isLogging
Exit Sub
errorHandler:
isLogging = False
End Sub
' キャプチャを開始する
Sub StartCapture()
MsgBox "キャプチャの取得を開始します。終了時は Esc キーを押下してください。"
' Esc キーで停止できるようにしておく
Application.OnKey "{ESC}", "StopCapture"
' キャプチャを貼り付けるブック名を取得する
fileName = ActiveWorkbook.Name
' キャプチャ取得状態を設定する
isLogging = True
' キャプチャの取得を開始する
Capture
End Sub
No.1ベストアンサー
- 回答日時:
こんにちは
もしかして、これの続きなのかなぁ?
https://oshiete.goo.ne.jp/qa/10125906.html
とは言え、いろいろ変わっているみたいで、今回は位置がどこなのかさっぱりわからなくなってしまったので、前回の補足的に方法のみの説明です。
>右下→左下→右下→左下と規則的にセルが移動できるようにしたいです。
>画面コピーの倍率も70%→20%→70%→20%と変動させたいのです
の2種類が決まるようにできれば良いものとして、前回同様に回数のカウンタを用意しておきます。
このカウンタに対して、位置は4種類を順に回るので
counter Mod 4
サイズは2種類なので
counter Mod 2
をとれば、それぞれは0~3、0~1の値を順に繰り返すことになり、これに応じた処理を行うように記述しておけばよいということになります。
位置を例にすれば、計算結果が、0:右下、1:左下、2:右下、3:左下のように対応させて考えるといった要領です。サイズに関しても同様です。
回数が多すぎてオーバフローする恐れがある場合なども考慮するなら、counterのインクリメント時に
counter = (counter + 1) Mod 4
のようにしておけば、counter自体が4を超えることが無くなります。
(この場合は、内容的にはカウンターとは言えませけれど…)
参考までに、計算値がどう変化するかを以下にエクセルの表で添付しておきます。
※ なお、同じ内容の質問をするときは、前回の質問は閉じておくのがエチケットかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】指定行以降をクリ...
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定のセルが空白だったら、そ...
-
Excelのプルダウンで2列分の情...
-
DataGridViewの各セル幅を自由...
-
VBAでセルをクリックする回...
-
【Excel】指定したセルの名前で...
-
TODAY()で設定したセルの日付...
-
DataGridViewで右寄せ左寄せが...
-
連続する複数のセル値がすべて0...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Application.Matchで特定行の検索
-
Excel VBA、 別ブックの最終行...
-
エクセルVBAでコピーして順...
-
VLOOKUP関数で別ファイルを指定...
-
VBA コピーして次の値まで貼り...
-
【VBA】指定したセルと同じ値で...
-
ExcelのVBAで数字と文字列をマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
Excel VBA、 別ブックの最終行...
-
VBAを使用した時間管理
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
【EXCEL VBA】Range("A:A").Fi...
-
VBA コピーして次の値まで貼り...
-
VBA初心者です。結合セルを保持...
おすすめ情報