• ベストアンサー

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

エクセルVBAでマクロを実行させて、他のシートの内容をシート1にコピーするようにしてあります。 標準モジュールのModule1でコードをかきました。 それとは別に、MicrosoftExcelObjectsのSheet1の部分に Sub AutoClicked() Worksheets("Sheet1").Activate msg = "こちらのシートは入力は禁止しています" End Sub を追加して、シート1上(シート2以降は対象外)をクリックするとダイアログが表示される機能 を実現したかったのですが機能しませんでした。どこをどのように直せばよいのでしょうか?

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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’のようなアプローチが実は最も安全と言えます。

kiseki777
質問者

お礼

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

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 前回の投稿で誤記がありました。 >(2)Sheet2の別セル選択でメッセージボックスを出す は >(2)Sheet1の別セル選択でメッセージボックスを出す の間違いです。 何度も失礼しました。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.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

kiseki777
質問者

お礼

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

関連するQ&A