こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

シートに入力しようとするとダイアログを表示させたい

エクセルVBAでマクロを実行させて、他のシートの内容をシート1にコピーするようにしてあります。
標準モジュールのModule1でコードをかきました。
それとは別に、MicrosoftExcelObjectsのSheet1の部分に

Sub AutoClicked()
Worksheets("Sheet1").Activate
msg = "こちらのシートは入力は禁止しています"
End Sub

を追加して、シート1上(シート2以降は対象外)をクリックするとダイアログが表示される機能
を実現したかったのですが機能しませんでした。どこをどのように直せばよいのでしょうか?

投稿日時 - 2011-11-24 11:31:41

QNo.7151773

すぐに回答ほしいです

質問者が選んだベストアンサー

方法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’のようなアプローチが実は最も安全と言えます。

投稿日時 - 2011-11-24 12:31:59

お礼

方法3がドンピシャです。
解決しました。有難うございます。

投稿日時 - 2011-11-24 14:01:20

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

No.1です!
たびたびごめんなさい。

前回の投稿で誤記がありました。

>(2)Sheet2の別セル選択でメッセージボックスを出す

>(2)Sheet1の別セル選択でメッセージボックスを出す
の間違いです。

何度も失礼しました。m(_ _)m

投稿日時 - 2011-11-24 12:11:28

ANo.1

こんにちは!
ご希望の方法と異なるかもしれませんが・・・
一つの案です。
(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

投稿日時 - 2011-11-24 12:07:41

お礼

アクティブ時にはできれば出したくないですが、
参考にさせていただきます。
有難うございました。

投稿日時 - 2011-11-24 14:00:33

あなたにオススメの質問