プロが教えるわが家の防犯対策術!

いつもお世話になっております。
あるシートのあるセルをクリックしたら他のシートに行ごとコピーさせたいのですが、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)を使用しようと思うと
対象となるシート全てのPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)
に同じことを書くことになります。またそのシートは増えたり、減ったりすることもあり
その都度、新しいシートに書くことが必要となります。
標準モジュールに全シート対象のイベントプロシジャーを書くことはできないでしょうか。
よろしくご教示いただきたく、お願いいたします。

A 回答 (4件)

シートの増減についての修正は必要と思われます(未経験ゆえ)が、他は参考になるのではと。


https://www.relief.jp/docs/excel-vba-class-modul …
    • good
    • 0
この回答へのお礼

めぐみん_様
ご教示ありがとうございます。クラスモジュールは良く理解できていないのですが、よい機会なので挑戦してみたいと思います。ありがとうございました。

お礼日時:2021/12/13 14:42

こんにちは



>標準モジュールに全シート対象のイベントプロシジャーを書くことはできないでしょうか。
標準モジュールではイベントを感知することができません。
ですので、シート(または後述のブック)に記述する必要があります。
とは言っても、処理内容がまったく同じならその処理を標準モジュールに記述しておいて、そちらへ処理を引き渡すことはできます。
 Call 標準モジュールのプロシージャ


シートのモジュールでは対象シートのイベントを感知できますが、ThisWorkbookモジュールではブック内の(各シートの)イベントを感知することができます。
ですので、各シートに同じイベント処理を設定するのが面倒であれば、ブックモジュールを利用すれば良いでしょう。
シートモジュールと異なる点は、どのシートで発生したイベントであるかも含めて判断するような記述にしておく必要があるという点でしょうか。
ThisWorkbookのモジュールからも標準モジュール内のプロシージャを呼び出すことも可能ですが、thisWorkbook内に全部を記述しても1箇所の記述で済ませられますね。
    • good
    • 2
この回答へのお礼

thisWorkbookを使ったことがなかったので、勉強になりました。
ここで各シートのイベントを拾うことができれば、まったく希望する通りのことができます。ありがとうございました。挑戦します。

お礼日時:2021/12/13 14:58

おはようございます。



中々良い記事が見付かりませんが、クラスモジュールでできると思います。

下記は、BeforeDoubleClickの例ですが、同じ様にできるかと。

https://sites.google.com/site/compositiosystemae …

VBA クラス イベント などで検索してみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。ほかにもクラスモジュールの使用をご提案いただいており、初めて使用することになるとおもいますが、良い機会なので挑戦したいと思います。ありがとうございました。

お礼日時:2021/12/13 15:04

こんにちは


ご質問をストレートに考えると
回答としては#2様と同様となりますかね。

>あるシートのあるセルをクリックしたら他のシートに行ごとコピーさせたいのですが、

これは、SelectionChangeでなくBeforeDoubleClickを使用した方が良いのではないかと思います。

ブックモジュールからですと
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
MsgBox Sh.Name
Cancel = True
End Sub
セルをダブルクリックするとシート名が表示されます。

違った目線で考えると同じイベントを複数の(増減する)シートで
実行したいと言う事は、そのシート内容(構成や表組)はほぼ同じなのでは?と思います。

回答ではありませんが、シートはどのように増やすのでしょうか?
イベントの書いてあるシートをコピペ、データを入れ替えるなどのVBAや手作業で作成する場合、イベントもコピペされますよ
'---
あと、シートの増減と考えるのも良いとは思いますが、VBA処理のブックであれば、各シート内容はデータと考えて1シートに纏めデータシートとして
必要(作業)部分を表示(作業)シートに抽出する形が良いように思います
行をコピペしたいと言う事でロジック自体該当しないと思いますが、、
    • good
    • 1
この回答へのお礼

Qchan1962様 いつもお世話になります。
Workbook_SheetBeforeDoubleClickは、まったく知りませんでした。
やってみましたが、希望とおりの動作がえられました。
たびたび、お助けいただき本当にありがとうございました。

お礼日時:2021/12/13 15:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!