我がまちの「給食」自慢を聞かせてっ!

作業ブックのシートに
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
途中省略
If Range("$ER$3").Value = "■" Then
Call Accessシート表示
End If
End Sub
を設定しております。
指定セルに「■」が表示されるとマクロ「Accessシート表示」が実行されるのですが、
作業の中で、マクロ「Accessシート非表示」を実行して「シート名:Access」を非表示にした後、
同じシートの指定セル以外のセルを変更した場合にもマクロ「Accessシート表示
」が実行されてAccessシート表示が表示されてしまいます。
マクロ「Accessシート非表示」を変更して、一度、シート名:Accessを非表示にした後は、手動で表示にしない限り、このシートを非表示出来る方法があれば教えてください。
現状のマクロ
Sub Accessシート非表示()
Worksheets("Access").Visible = False
End Sub
以上となります。
よろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    回答ありがとうございます。
    詳しく教えて頂きましてありがとうございます。
    記者が教えて頂いたコードで再度、質問をさせてください。
    例えばER3セルに入っている数式 =IF(AA3="","","■")
    AA3も数式の場合は参照元をトレースで入力元セルを見つけてください
    とありますが、
    ER3に数式では無く、プルダウンで「■」を選択しております。
    この場合は、どのようになりますでしょうか、
    何度も申し訳ありません。
    よろしくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2024/06/28 13:41
  • 何時も助けて頂きましてありがとうございます。
    勝手ですが、今回の質問とは別に先日より色々と質問を繰り返して、
    未だ、未解決な事が有ります。今週末に一度、整理をし、週明けに再度
    質問をさせて頂きましと思いますが、助けて頂けますでしょうか。
    勝手を言って申し訳ありません。
    よろしくお願いいたします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2024/06/28 14:37
  • うれしい

    先にお礼をしてしまいましたので、
    改めて
    何時も適切なアドバイスをありがとうございます。
    助かりました。

    No.6の回答に寄せられた補足コメントです。 補足日時:2024/06/28 15:17

A 回答 (6件)

プルダウンならばWorksheet_Changeイベントは発生しますので


 #2様の回答で良いと思います
BAは既に回答されているので追記の部分の説明です

私の回答は >表示される を 深読みしたもので(現状もトリガーを特定していないから)

数式の解で表示した場合 Worksheet_Changeイベントが発生しないと記憶しているためのものです

If Range("$ER$3").Value = "■" Then
Call Accessシート表示
End If

If Range("$ER$3").Value = "■" Then 部分に条件
Target(変更されたセル)がER3セルである
を加えればよい事になります

途中省略があるので
1行ですが

If Not Intersect(Range("ER3"), Target) Is Nothing And Target.Value = "■" Then Call Accessシート表示

とか
If Target.Address = "$ER$3" And Target.Value = "■" Then Call Accessシート表示

とかでも同様の処理になるかと・・・思います

いずれにしても
問題解決に 非表示プロシージャを触る必要は無いのではという事ですね
この回答への補足あり
    • good
    • 0
この回答へのお礼

詳しく説明していただきましてありがとうございます。
№2の方と合わせて、設定しまして、上手くできました。
ありがとうございます。

お礼日時:2024/06/28 14:34

>質問をさせて頂きましと思いますが、助けて頂けますでしょうか。


残念ながら 規約に抵触する内容と思われますのでお約束はいたしかねます
    • good
    • 0
この回答へのお礼

承知いたしました。
失礼をお許しください。

お礼日時:2024/06/28 15:15

こんにちは



ご質問文の文字通りの内容を実現するなら・・

1)どこかのセル(できれば非表示シートや、非表示セルが望ましい)を
  フラグとして設定しておく。
2)マクロから対象シートを非表示にした際には、フラグをセットする。
3)対象シートを表示するマクロは全て、フラグを参照してセットされて
  いる場合には表示しないように変更しておく。
4)対象シートの「表示イベント」でフラグをクリア。

といった仕組みすることで可能と思います。
とは言え、想像するところ、こんなつぎはぎ的なことをしなくても、整理さえすれば「やりたいこと」を実現するスマートな方法はありそうに思います。
(何がどうなっているのか不明なので、当方にはよくわかりませんけれど・・)
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
おっしゃる通りですね。
一度、きちんと整理をしてみます。
ありがとうございました。

お礼日時:2024/06/28 14:57

読み返ししたら 


コピペしたので Call Accessシート表示 となっていますが
Call Accessシート非表示 ですかね・・
やっぱり変ですね

> 手動 で表示にしない限り、
であれば Call Accessシート表示は不要です(最もコード書いてないけど)

いつ非表示にするかわかりませんが

Private Sub Workbook_Open()
Worksheets("Access").Visible = False
End Sub

だけで

Worksheet_Changeイベントで
Worksheets("Access").Visible = True は不要?
    • good
    • 0

こんにちは


ご質問の内容には矛盾があり理解できませんが おそらく
Accessシート非表示の内容を変更するのではなく

If Range("$ER$3").Value = "■" Then
Call Accessシート表示
の条件を考察するべきでしょう

文中に
>指定セルに「■」が表示されるとマクロ「Accessシート表示」が実行される
とあるので セルER3には 数式が入っているものと推測します
Worksheet_Changeイベントは数式による変更をトリガーしなかったと思うので

この数式の条件セル(入力される参照元セル)が変更されたときに
現状条件とTarget.Address条件を加えてCall Accessシート表示を実行すれば

例えばER3セルに入っている数式 =IF(AA3="","","■")
AA3も数式の場合は参照元をトレースで入力元セルを見つけてください

If Target.Address(0, 0) = "AA3" And Range("$ER$3").Value = "■" Then
Call Accessシート表示
End If


>同じシートの指定セル以外のセルを変更した場合にもマクロ「Accessシー>ト表示」が実行されてAccessシート表示が表示されてしまいます。
この処理は発生しないと思います


>一度、シート名:Accessを非表示にした後は
この 一度 の条件がどの様なものなのかわかりませんが
>手動で表示にしない限り、このシートを非表示出来る方法があれば教えてください。
ならば、
If Range("$ER$3").Value = "■" Then
Call Accessシート表示
End If
を消せばよい事になりますね

推測もありますので参考程度で
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとございます
早速、試させて頂きます

お礼日時:2024/06/28 12:25

少し質問の意味が読み取りにくいですが、もしER3セルが「■」に変更された時だけ、「Accessシート表示」処理を呼びたいなら、以下のようにされてはどうでしょうか。

Intersectは複数の範囲の積集合を求めるメソッドです。
意味が違っていたらごめんなさい。

Private Sub Worksheet_Change(ByVal Target As Range)
 Set insect = Application.Intersect(Range("ER3"), Target)
 If insect Is Nothing Then
  ' 何もしない
 Else
  If Range("ER3").Value = "■" Then
   Call Accessシート表示
  End If
 End If
End Sub
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
早速試させて頂きます。

お礼日時:2024/06/28 11:59

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

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


おすすめ情報

このQ&Aを見た人がよく見るQ&A