プロが教える店舗&オフィスのセキュリティ対策術

作業ブックのシート名「審査」に
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = True
Sheets("真北").Visible = [L27] = "有"
Sheets("角地").Visible = [L28] = "有"
Application.ScreenUpdating = True
End Sub
のコードを設定しております。
このコードは
指定セルをプルダウン選択で等で「有」にした場合に
非表示シートが表示されるように設定しております。
シート名「審査」にコード設定は変わらず、
このコードを下記のように、指定セル値を違うシートに変更しました、
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = True
Sheets("角地").Visible = Sheets("1").[I26] = "有"
Sheets("真北").Visible = Sheets("1").[I30] = "有"
Application.ScreenUpdating = True
End Sub
しかし、シート名「1」のセル「I26」「I30」をプルダウン選択で「有」に変更しても各非表示シート「真北」「角地」が上手く表示されません。
解決方法を教えてください。
よろしくお願いいたします。

A 回答 (2件)

こんにちは


諸々、#1様に同感ではありますが、コード内での問題点を挙げておきます
#1様がご指摘されている所は直した方が良いです
タイプが面倒とか身に着けてしまった悪習のであれば、後々必ず困ると思いますので・・

Application.EnableEvents = True はイベント発生の抑止をやめるものです
反対にApplication.EnableEvents = False はイベント発生を止めるコードです
Application.ScreenUpdating = True はスクリーン更新の抑止をやめるものでApplication.ScreenUpdating = False は更新を抑止するものです

使い方がでたらめになっていますので、もしかしたら
テスト中もしくは、他のコード内でApplication.EnableEvents = False
のまま終了しており、
Private Sub Worksheet_Change(ByVal Target As Range)イベントが
発生していないのではないでしょうか。

イミディエイトウィンドウに
Application.EnableEvents = True をコピペ Enterキーで実行するか

sub test ()
Application.EnableEvents = True
end sub
上記プロシージャを実行して シートの値を変えてみてください

*Application.EnableEvents・Application.ScreenUpdating などについて
検索などをして理解を深める事をお勧めいたします
    • good
    • 0
この回答へのお礼

ありがとうございました。
もう一度、
整理してみます。

お礼日時:2022/06/10 12:27

こんにちは



前の質問にも書いたけれど、変更するのではなくてシート1のシートモジュールに記載すれば良いだけです。

なお、Eval自体あまりお勧めできるものではありませんが、
>Sheets("1").[I26]
は、アラビア数字とローマ数字をごちゃ混ぜに書いているようなものなので、やめた方が良いでしょう。

せめて
 Sheet(1).Range("I26")
とするか
 [シート名!I26]
のどちらかかと。

とは言っても、シートモジュールに記載するのですから、いずれにしろシートの指定は不要になります。
簡単なセンテンスですし、内容が複雑というわけでも無いので、このぐらいを理解できないでVBAを使うのは、かなり危ない気がします。
    • good
    • 2
この回答へのお礼

ありがとうございました。
参考にさせて頂きます。

お礼日時:2022/06/10 12:26

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