[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『保護したシートに入力しようとした際のエラーメッセージを独自のものにしたい』(hana)
お世話になります。
複数の人が入力をするファイルで、あるシートに『シートの保護』を掛けています。
そのシートをいじった際に出るエラーメッセージを独自のものにしたいのですが、可能でしょうか?
詳しく説明致しますと、データ入力用のシートがあり、マクロで入力用のシートを加工して印刷専用のシートを作成しているのですが、その印刷専用のシートに間違って入力をしないように知らせたいのです。
「このシートは『印刷用シート』です。
入力は『入力用シート』にお願いします。」
のような感じのメッセージを出せればと思います。
マクロでも構いません。
どうぞよろしくお願い致します。
< 使用 Excel:Excel2010、使用 OS:unknown >
こんばんわ。
印刷用シートを非表示にしておいたらどうですか? マクロで加工や印刷してるなら、印刷する時だけ表示させれば良いのでは?
(sy) 2016/09/22(木) 00:51
マクロでは印刷用のシートを作成するところまでで、印刷は複数の人が行うため非表示にはできないんです。
何かいい方法がありますでしょうか?
ご教授いただけますと幸いです。
(hana) 2016/09/22(木) 22:08
非表示には出来ないんですか。
すいません。 保護されたセルのエラーメッセージを変更する方法は、私では分かりません。
[[20060131122124]] 『セルの保護をかけたときのメッセージについて』(evian)
こちらにWorksheet_SelectionChangeを使っての代替え案がありました。
もしくはシートを開いた時に分かりやすいセル(仮にA1セル)に、 「このシートは『印刷用シート』です。 入力は『入力用シート』にお願いします。」 と予め入力しておくのも有りかと。 そのセルを印刷範囲外にしておけば印刷される事も無いので、一番簡単に出来る代替え案かなと思います。
後は入力用シートに印刷ボタンを作って、そちらから印刷してもらうとか。
(sy) 2016/09/22(木) 22:18
思い付きですけど、シート保護をかけるのをやめて、当該シートのChangeイベントで お好きなメッセージを出した後 UNDO をかけるとか。 (もちろん、その前後に、Applecation.EnableEvents = False と True をおいて サンドイッチにしておく必要あり)
また、別マクロで、このシートをつくる際にも、マクロの最初に Applecation.EnableEvents = False 。 マクロの最後に Applecation.EnableEvents = True を入れておく必要があります。
(β) 2016/09/22(木) 23:06
なかなか試す時間がなかったため、お礼が遅くなりました。
syさんβさん、ありがとうございます。
色々やってみましたが、わたしの能力的に下記で行うのが限界でした(汗)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Msg, Style, Title, Response Msg = "このシートは『印刷用シート』です。 " & Chr(13) Msg = Msg & "入力は『入力用シート』にお願いします。" & Chr(13) & Chr(13) Style = vbOKOnly Title = "入力できません" Response = MsgBox(Msg, Style, Title)
End Sub
これで希望のメッセージボックスが出せました!
ところで、追加で質問になってしまい恐縮なのですが、上記のメッセージボックスだと「OK」ボタンを押しても再度メッセージが表示されます。(2回「OK」を押さないとメッセージが消えません)
何がいけないのでしょうか?
お分かりになる方、ぜひ教えてくださいませ。
(hana) 2016/09/26(月) 00:39
一度ファイルを閉じてから再度やってみたところ、「OK」ボタン1回クリックでメッセージが消えました。
お騒がせしました。
ありがとうございました。
(hana) 2016/09/26(月) 00:51
「Worksheet_SelectionChange」で希望のメッセージを出すことはできたのですが、他のマクロでいろいろと加工をした後に、そのシートに「Worksheet_SelectionChange」を設定することはできますか?
最初からシートに設定しておくと、その前の加工の段階でメッセージが出てしまい、進まなくなってしまいます(泣)
よろしくお願い致します。
(hana) 2016/09/28(水) 13:26
Worksheet_SelectionChangeの最初に
If Worksheets("Sheet1").Range("A1").Value <> "OK" Then Exit Sub End If のように特定のシートの特定のセルに特定の値が入力されていない場合は処理を行わないようにするのはどうだろうか。 (ねむねむ) 2016/09/28(水) 14:13
開発作業中の臨時措置ではなく、本番処理として、他のマクロで、このシートをさわる、その時に セル選択によってイベントが発生するのを避けたいということですね。
1.ほかのマクロのコードが見えないのですが、セル.Select や セル.Activate といったセル選択コードを書かなければいいんです。 Select や Activate をしなくてもコード実行できますので。
2.SelectionChangeは、↑の方策で切り抜けることもできますが、たとえば Changeイベントのようなもの、 これは、他のマクロで、当該シートに値を書きこむと、発生しますね。 なので(SelectionChangeも含め)シートにイベントコードが書いてある、そのシートに対して他のマクロで変更などなにがしかの処理を行う場合は
他のマクロの先頭で Application.EnableEvents = False
マクロを抜ける前に必ず Application.EnableEvents = True こうしておくのが鉄則です。
(β) 2016/09/28(水) 15:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.