[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ロック解除のセルを選択した時に、保護を解除したい。』(にゃもたん)
はじめまして。
マクロ初心者です。
ご教授願います。
今作成している表について、多数人での入力・編集を行っていて
一部のセル以外はいじられないようにロックをかけて保護を
しています。
ところが、保護をかける→ロックを解除して、入力・編集
を許可しているセルについても、セルの結合・結合の解除が
できなくなってしまいます。
表は以下のとおりの作りになっています。
・ロックをかけているセルは、関数、ベタ打ち、さまざま。
・ロックをかけているセルにも結合セルがある。
・ロックをかけていない入力用のセルは飛び飛びである。(行・列指定は不可)
以前の質問で、「A列が選択された時は保護を解除、それ以外のセルが
選択された時は保護を設定」というものがあったのですが、
https://www.excel.studio-kazu.jp/kw/20041005101917.htm
この応用で、A列ではなく「ロックがかかっているセルの選択は保護」
「ロック解除セル選択は保護解除」とすることはできないでしょうか?
その他、結合自体をマクロで実行する方法も知○袋にあったのですが、
そうすると、入力作業がややこしくなるので(編集メンバーには
お年寄りがいるので)、エクセル側で保護・解除を制御したいです。
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:unknown >
>>エクセル側で保護・解除を制御したいです。
とはいえ、この処理自体はマクロになりますけど、それでいいのですね。
(β) 2016/01/26(火) 14:55
(にゃもたん) 2016/01/26(火) 15:02
>https://www.excel.studio-kazu.jp/kw/20041005101917.htm 最後の「l」が抜けているようだ。
https://www.excel.studio-kazu.jp/kw/20041005101917.html
(ねむねむ) 2016/01/26(火) 15:06
おっしゃるとおりです。
ねむねむさんご指摘ありがとうございます
あらためてご指導願います。
ロックセルを選択→シート保護
ロック解除セルを選択→シート保護解除
が、実行できないでしょうか?
https://www.excel.studio-kazu.jp/kw/20041005101917.html
やりたいことは↑と同じで、条件をA列ではなく「ロック解除セル」に
変えたいです。
よろしくお願いします。
(にゃもたん) 2016/01/26(火) 15:24
セル選択は範囲を選択できるがロックされたセルとロックされていないセルの両方をまとめて選択された場合はどうするのか?
一つのセルだけが選択された場合だけ実行させるのか? セル範囲の左上のセルのロックで判断させるのか? なにかそれ以外で判断させるのか?
(ねむねむ) 2016/01/26(火) 15:34
そうでした!!
範囲選択された場合、
「選択範囲に、ロックされたセルが1つでも含まれていた場合→保護実行」
とすることができたらありがたいです。。
もし、そのような条件づけができない場合、
「範囲内のアクティブセルで判別」とかで…
範囲選択されることは(ロックにもアンロックにも、もともと結合している
セルがあるので)確実なので、1つのセルだけが選択された場合のみの
実行ではなく、1つでも、複数でも実行できるようにしたいです。。。。
(にゃもたん) 2016/01/26(火) 15:50
For Each cl In Target
If cl.Locked Then
flg = True: ActiveSheet.Protect: Exit Sub
End If
Next cl
ActiveSheet.Unprotect
End Sub
(mm) 2016/01/26(火) 17:16
領域内セル群のプロパティによっては、その値を取得した際に、各セルすべて同じならその値、異なるものが混在していれば Null値が返るものがあります。
セル領域.Locked も、そういったプロパティです。
ですから、
選択領域がすべてFalse なら UnProtect、すべて True あるいは False と True が混在なら Protect という処理なら 以下のように ループなしのコードでも。
なお、シート.Protect ですが、これだけだと、ユーザーに許可する操作が保護されたセルの選択と保護されていないセルの選択のみになります。 もし、いろいろと許可する操作にチェックをつけて保護しているなら、コード内の Protectメソッドの引数として 各条件をすべてセットするか、あるいは、シートに設定された保護条件を継承するコードにしなければいけません。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Locked = False Then
Unprotect
Else
Protect
End If
End Sub
(β) 2016/01/26(火) 18:31
どちらの方法でもできました!
ありがとうございます。
ものすごく遅くなってしまってすみません。
すぐお礼の返事をしたつもりだったのですが、
嬉しくてすぐさま作業に入ろうと、、、
プレビューを押して送信したつもりになって
更新されなかったみたいです…
まだ見てくれていらっしゃるでしょうか
本当に、聞くだけ聞いて結果とお礼が
こんなに遅くなってしまい…申し訳ありません。
ねむねむさんも、言葉足らずのわたしの質問を
補完する質問をしてくださり、
ほんとうにありがとうございました。
本当に本当に助かりました。
色々なファイルに使わせていただいてます。
感謝の気持ちがお3方に届きますように
1か月も…(TT)ゴメンナサイ
本当にありがとうございました。
(にゃもたん) 2016/03/08(火) 17:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.