- ベストアンサー
シートに入力しようとするとダイアログを表示させたい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
方法1 確実な方法(推奨) シート1をシートの保護する #ご利用のエクセルのバージョンが不明ですが,2003までではツールメニュー,2007以降では校閲タブ 標準モジュールのマクロを sub macro1() worksheets("Sheet1").protect userinterfaceonly:=true ’以下今のシート1に記入するマクロ end sub とする。 方法1’ご質問に書かれている内容に照らすと適切な方法 シート1を「非表示」にしてしまえば,シート1を「触る」ことは(わざわざ再表示しない限り)そもそも出来ません。 シート1を再表示させないためには,「ブックの保護」を行います。 方法2 あまりお奨めではない方法 シート1のシートモジュールの今のマクロを消して,次のマクロをコピー貼り付ける private sub Worksheet_SelectionChange(byval Target as excel.range) msgbox "DO NOT TOUCH" end sub 方法3 あまりお奨めではない方法 標準モジュールのマクロを sub macro1() application.enableevents = false ’以下今のシート1に記入するマクロ application.enableevents = true end sub とする。 さらにシート1のシートのモジュールの今のマクロを消して,次のマクロをコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range) msgbox "forbidden" application.enableevents = false application.undo application.enableevents = true end sub #参考として補足しておきます 方法2が,今のところアナタのオリジナルアイデアに一番近いアプローチです。 が,こういった手段では,たとえば「シート1を開く・そのままいきなり書き込む」を阻止できません。 方法3は,シート1への記入を阻止し,かつたとえば「シートが保護されていると出来ないこと」を特にシート1で許可したい場合に利用できる方法です。 しかしアナタのご相談は「シート1に触らせたくない」ですので,方法1’のようなアプローチが実は最も安全と言えます。
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! たびたびごめんなさい。 前回の投稿で誤記がありました。 >(2)Sheet2の別セル選択でメッセージボックスを出す は >(2)Sheet1の別セル選択でメッセージボックスを出す の間違いです。 何度も失礼しました。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! ご希望の方法と異なるかもしれませんが・・・ 一つの案です。 (1)Sheet1をアクティブにした段階でメッセージボックスを出す (2)Sheet2の別セル選択でメッセージボックスを出す 上記(1)(2)のマクロをSheet1に設定し、Sheet1を保護してはどうでしょうか? Sheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に↓のコードをコピー&ペーストしてみてください。 Private Sub Worksheet_Activate() MsgBox "こちらのSheetは入力禁止となっています" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "こちらのSheetは入力禁止となっています" End Sub 次にSheet2以降に関しては「対象外をクリックすると・・・」と言うコトですが 対象範囲の「編集許可」をしてそれぞれのSheetを保護する方法はどうでしょうか? ※ この場合はSheetを保護している旨のメッセージがそのまま表示されます。 この程度しか思いつきませんが、他に良い方法があればごめんなさいね。m(_ _)m
お礼
アクティブ時にはできれば出したくないですが、 参考にさせていただきます。 有難うございました。
お礼
方法3がドンピシャです。 解決しました。有難うございます。