
教えてください。
シートが非アクティブになった時、他のシートへ手動コピーするためのマクロですが
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim r As Range
If Application.CutCopyMode Then
【【Set r = Windows(ThisWorkbook.Name)ActiveSheet.Selection】】
【【 】】内がタイトルのようなエラーになってしまいます。
あと、「コンパイルエラー 修正候補:ステートメントの最後」のエラーも出ます。
直し方をおしえていただけないでしょうか。
よろしくお願いいたします。

No.3ベストアンサー
- 回答日時:
>>随時必要な部分を他シート/ブックへコピー&貼り付けしたいです。
プログラムなのに手動でですか??
手動なら、そこで一旦停止させ、手入力後に再開。
自動なら毎回プログラムに手を入れる。
別ブックを起動する処理も要ります。
同一ブックの別シートなら、起動処理は不要。
と、色々有って、どうしたいかです。

No.4
- 回答日時:
>>いい方法があれば・・・・・。
1個のVBAでやろうとしてる事に無理が有るのでは無いですか?
VBAは途中で中断しても当該ブックに触れません。
VBAを2個作れば良いのでは?
1個目のVBAで必要な処理して終了
この後手作業
2個目のVBAで続きの処理を実行?
2個目実行用のボタンを設置するとか・・・。
回答ありがとうございます。
>VBAを2個作れば良いのでは?
これは、思いつかなかったです、すごいです。
ただ、他の人もたくさん使用しますので、あまり運用を変えたくないのです。
2個目実行用のボタンを設置以外でできれば良いのですが。
とりあえず、「Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)」をPrivate Sub Workbook_Activate()」を使ってみます。
何度も回答ありがとうございました。

No.2
- 回答日時:
Windows(ThisWorkbook.Name)ActiveSheet.Selection
↓
Windows(ThisWorkbook.Name).ActiveSheet.Selection
これで文法エラーは無くなりますが、実行出来ないと思います。
Set R = Windows(ThisWorkbook.Name)ActiveSheetとやれば、Rはアクティブシートそのものになりますが、後は何をするかです。
・別シートに丸々上書きするのであれば
Dim R As Worksheet
Set R = Windows(ThisWorkbook.Name).ActiveSheet
R.Cells.Copy Worksheets("Sheet2").Range("A1")
とか、
・ブックの最後へ退避コピーするので有れば
R.Copy After := Worksheets(Worksheets.Count)
が、要るのでは??
No.1
- 回答日時:
こんにちは
全体像がまったくわかりませんけれど、ご提示の1行だけで見るなら・・
コンパイルエラーは、大抵は構文ミスなので・・
>Set r = Windows(ThisWorkbook.Name)ActiveSheet.Selection
↓ ↓
Set r = Windows(ThisWorkbook.Name).ActiveSheet.Selection
でも一応は通りますけれど、いずれにしろ実行時エラーになるものと想像します。
とは言え、コンパイルエラーを修正せずに、ご質問にある実行時エラーがでることはないはずと思いますけれど??
SheetDeactivateイベントはアクティブでなくなった時に発生しますので、「ActiveSheet」も「Selection」も質問者様の思っている内容とは、実際には、異なる実態を意味しているものと想像します。
また、そもそもですが Selection は Application オブジェクトのプロパティなので、Worksheetのプロパティとしては存在しません。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
さて・・・、
もしも、なさりたいことが『元のシート上の選択範囲を取得したい』のだとするなら、Selectionを参照するしかありませんけれど、そのためには元のシートを表示しなければならないですね。
少々面倒にはなりますが、以下のようにすることで、取得することは可能と思います。
Dim sh1, r
Set sh1 = ActiveSheet
Application.EnableEvents = False
Application.ScreenUpdating = False
Sh.Activate
Set r = Selection
sh1.Activate
Application.ScreenUpdating = True
Application.EnableEvents = True
※ 上記で取得できる「選択範囲」は必ずしもセル範囲とは限りません。
(何らかの別のオブジェクトを選択していたりする可能性もあるので・・)
ですので、その後の処理を行う前に、必ず選択範囲の内容を確認してから処理をしないと、またエラーの原因となり得ますのでご注意ください。
※ EnableEvents = False 中にエラーを発生させると面倒なので、変数 r の宣言は Variant 型にしておく方が無難ではないかと思います。
(Rangeで宣言してしまうと、セルではないものが選択されていた時に「型が一致しません」のエラーが発生します)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) IBM Notes9のメールをExcelVBAにて送信するコードについての質問です。 以下のコードを 3 2023/06/21 17:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
特定のセルだけ結果がおかしい...
-
エクセル ドロップダウンリスト...
-
【マクロ】列を折りたたみ非表...
-
vba テキストボックスとリフト...
-
【関数】同じ関数なのに、エラ...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【マクロ】3行に上から下に並...
-
エクセルの循環参照、?
-
【マクロ】A列にある、日付(本...
-
iPhoneのExcelアプリで、別のシ...
-
エクセル
-
【マクロ】WEBシステムから保存...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
VBA シートの切り替えができな...
-
マクロ実行ボタンがコピー出来ない
-
Excelユーザーフォームでシート...
-
エクセル 「実行時エラー"13":...
-
VBAでシートコピー後、シート名...
-
エクセル 複数シートのフィル...
-
【エクセル】シートを分割する...
-
Excelのシートを集約したいので...
-
アクセス97での罫線について
-
VBAを入れる場所
-
EXCELのオートフィルターマクロ...
-
シート保護でオートフィルタ機...
-
【エクセル】複数の文字を同時...
-
Excelマクロによる単語リストの...
-
全てのブックへのシートの挿入
-
シートの表示が消えて整列をし...
-
Excelシートの統合するマ...
-
ワークシート上に配置したコマ...
おすすめ情報
No.1様へ。
回答ありがとうございます。
Selection はここでは使えなかったんですね。知らなかったです。
コードを貼り付けて変数 r の宣言を Variantにしてみたのですが、
シートのコピーした内容を、他シート/ブックへ貼付けれませんでした。
他に何か手段があれば教えていただけないでしょうか。
よろしくお願いいたします。
No.2様。
回答ありがとうございます。
そもそも、この状況で「Windows(ThisWorkbook.Name).ActiveSheet.Selection」は使えなかったのですね。
>後は何をするかです。
>・別シートに丸々上書きするのであれば
シート丸ごとではなく、随時必要な部分を他シート/ブックへコピー&貼り付けしたいです。
ただ、ブックイベントで自動計算、手動計算の切り替えを行っているからか、貼り付ける頃にはコピー元の四角い破線が消えているのです。
何かいい方法はありませんでしょうか。
よろしくお願いいたします。
No.3様へ。
回答ありがとうございます。
>プログラムなのに手動でですか??
はい、コピ&ペーストは決まったパターンで行うのではなく、必要な時に必要な範囲をコピーするだけなので。
該当ブックは手動計算&再計算で使用しているのですが、他ブックを開くと勝手に手動計算が反映されてしまい困ってました。そこで、該当ブックが非アクティブになる時に自動計算に戻すようにしているのですが、今度は該当ブックから他ブック、開いているシートから他シートに切り替えるとコピー元の点線囲みが消え、ペースト出来ないのです。いい方法があれば教えてください。
よろしくお願いいたします。