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

いつもお世話になっております。
エクセル シート1に
下記のコードをいれてあります。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show vbmoderess
End Sub

シート追加したら追加したら
下記のコードをいれることはできるのでしょうか

今はシートを追加したらシートモジュールにコピーして
使用しています。
これをなんとかしたいのです

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show vbmoderess
End Sub

A 回答 (3件)

こんばんは


先ずは、こちら http://officetanaka.net/excel/vba/vbe/01.htm 
を踏まえた上で

>シート追加したら なので
こんな感じで良いかと、、
Sub sample()
Dim WB As Workbook
Dim sh_name As String
sh_name = ActiveSheet.Name
Set WB = ActiveWorkbook
With WB.VBProject.VBComponents.Item(sh_name).CodeModule
.insertlines 2, "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)"
.insertlines 3, "UserForm1.Show vbModeless"
.insertlines 4, "End Sub"
End With
End Sub

エラー対策及び、すでにあるシートを対象に実行する事は考慮していません
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/06/29 08:03

こんばんは



ほとんどのシート(将来追加されるかも知れないシートを含む)で同じことを実行したいってことでしょうか?
であるなら、各シートモジュールに記述せずに、ThisWorkbookモジュールに記述しておくのが簡単と思います。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

引数にシートオブジェクトが与えられますので、実行対象としたくないシートがある場合にはNameなどでチェックして、そのシートだけ省くようにしておけば、追加されたシートはそのままで対象として扱われます。
(わざわざコードのコピペを行う必要がなくなります)
    • good
    • 1
この回答へのお礼

ありがとうございました。
参考になりました。

お礼日時:2021/06/29 08:03

#1です


ストレートに回答してしまいました。(ストレートに回答するようにしているので良いのですが)

さすが、#2様です。そのようにアドバイスするべきでした。
#2を推奨します

同様の処理をする場合、UserForm1がどのような処理がされるのか分かりませんが、ThisWorkbookモジュールからブックイベントでするべきです。
この場合、シート名などにも共通性がある場合が多く、Likeなどで特定するケースで出来ると思います。

逆に不確定なシートからUserForm1を呼びたい場合などは、ダブルクリックをトリガーにせず、トリガーを右クリックやショートカットキーに登録したりして使えば良いように思います。

ちなみに
#1のコードで変数登録する必要がないのに書いてあるのは、私のExcelVBAに既にあるコードの使い廻しだからで、使う事もありますが
VBAのコードをVBAから書き加えたり変更する事は改修(更新)などの時以外まずありませんが、比較的容易に出来ます。
が、重大なバグを生む可能性もあるのでやり方だけで良いように思いました
    • good
    • 0
この回答へのお礼

ありがとうございました。
補足説明 勉強になります。

お礼日時:2021/06/29 08:04

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

このQ&Aを見た人はこんなQ&Aも見ています