教えてください。
シートが非アクティブになった時、他のシートへ手動コピーするためのマクロですが
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim r As Range
If Application.CutCopyMode Then
【【Set r = Windows(ThisWorkbook.Name)ActiveSheet.Selection】】
【【 】】内がタイトルのようなエラーになってしまいます。
あと、「コンパイルエラー 修正候補:ステートメントの最後」のエラーも出ます。
直し方をおしえていただけないでしょうか。
よろしくお願いいたします。
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.3ベストアンサー
- 回答日時:
>>随時必要な部分を他シート/ブックへコピー&貼り付けしたいです。
プログラムなのに手動でですか??
手動なら、そこで一旦停止させ、手入力後に再開。
自動なら毎回プログラムに手を入れる。
別ブックを起動する処理も要ります。
同一ブックの別シートなら、起動処理は不要。
と、色々有って、どうしたいかです。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
-
Excel VBA で End Subのところで「型が一致しません」のエラーとなります。
Visual Basic(VBA)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートの切り替えができな...
-
エクセル 「実行時エラー"13":...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
エクセルの文字間スペースを入...
-
AUTOCAD 2010でdwlファイルの場...
-
漢字名のテーブルとカラムのCRE...
-
困ってます。
-
Office 2003 再インストール時...
-
wmp
-
オペランドが足りませんとコメ...
-
エクセルの便利機能について教...
-
Microsoft Excel VBAの参照設定
-
karnelpanic OS10.3 回復方法教...
-
(int)キャストとintvalの違い
-
pythonでrequestsが使えない
-
RedHat7.3インストールできませ...
-
Java インストール時のスクリプ...
-
Windowsドメイン環境でのVPN...
-
OBSが起動できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
VBA シートの切り替えができな...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
エクセル 「実行時エラー"13":...
-
フェイス・シートについて教え...
-
ワークシート上に配置したコマ...
-
全てのブックへのシートの挿入
-
Excelユーザーフォームでシート...
-
エクセルのシートを自動でコピー
-
【エクセル】複数の文字を同時...
-
エクセルマクロ作成方法
-
Excelマクロによる単語リストの...
-
VBAを入れる場所
-
エクセル 複数シートのフィル...
-
エクセルマクロの構文
-
【Excel VBA】指定のブックを指...
-
エクセルのワークシートの並べ替え
-
エクセルのあるシートの内容を...
おすすめ情報
No.1様へ。
回答ありがとうございます。
Selection はここでは使えなかったんですね。知らなかったです。
コードを貼り付けて変数 r の宣言を Variantにしてみたのですが、
シートのコピーした内容を、他シート/ブックへ貼付けれませんでした。
他に何か手段があれば教えていただけないでしょうか。
よろしくお願いいたします。
No.2様。
回答ありがとうございます。
そもそも、この状況で「Windows(ThisWorkbook.Name).ActiveSheet.Selection」は使えなかったのですね。
>後は何をするかです。
>・別シートに丸々上書きするのであれば
シート丸ごとではなく、随時必要な部分を他シート/ブックへコピー&貼り付けしたいです。
ただ、ブックイベントで自動計算、手動計算の切り替えを行っているからか、貼り付ける頃にはコピー元の四角い破線が消えているのです。
何かいい方法はありませんでしょうか。
よろしくお願いいたします。
No.3様へ。
回答ありがとうございます。
>プログラムなのに手動でですか??
はい、コピ&ペーストは決まったパターンで行うのではなく、必要な時に必要な範囲をコピーするだけなので。
該当ブックは手動計算&再計算で使用しているのですが、他ブックを開くと勝手に手動計算が反映されてしまい困ってました。そこで、該当ブックが非アクティブになる時に自動計算に戻すようにしているのですが、今度は該当ブックから他ブック、開いているシートから他シートに切り替えるとコピー元の点線囲みが消え、ペースト出来ないのです。いい方法があれば教えてください。
よろしくお願いいたします。