[[20151028222940]] 『範囲内のエクセルを入力後に保護する方法』(mackey) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『範囲内のエクセルを入力後に保護する方法』(mackey)

他の方の質問で
「セル入力後→保護する」という以下マクロがあり、シート全体に保護が掛かるのですが、一部の列はこのマクロを適用させたくありません。

'--------------

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Me.Protect , , , , True
If Target.Count > 1 Then Exit Sub
Target.Locked = True

End Sub

'--------------

シートの保護を解除しようとすると、全体が解除になりますし、範囲の一部だけ「セル入力後→保護する」といった形はできないものでしょうか。

< 使用 Excel:Excel2010、使用 OS:Windows7 >



 もう少し具体的に説明いただけますか?
 提示頂いたコードは、
 1)いずれかのセルに変更があったとき
 2)VBAからのみ変更ができる保護をして
 3)変更されたセルが1つのみの場合
 4)セルの書式設定>保護>ロックを掛ける

 というコードです。
 この4番だけ指定した列を除外したいということですか?
 それとも、1番の「いずれかのセルに変更」を「指定した列を除いた変更」にしたいのでしょうか?
(稲葉) 2015/10/29(木) 08:54

 ちょっとしばらく返事できそうにないので

 4番除外の場合
    Option Explicit
    Const ExcColumn As String = "C"
    Private Sub Worksheet_Change(ByVal Target As Range)
        Me.Protect userinterfaceonly:=True
        If Intersect(Target, Cells(1, ExcColumn).EntireColumn) Is Nothing Then
            If Target.CountLarge = 1 Then
                Target.Locked = True
            End If
        End If
    End Sub

 1番を除外の場合
    Option Explicit
    Const ExcColumn As String = "C"
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Cells(1, ExcColumn).EntireColumn) Is Nothing Then
            Me.Protect userinterfaceonly:=True
            If Target.CountLarge = 1 Then
                Target.Locked = True
            End If
        End If
    End Sub

(稲葉) 2015/10/29(木) 09:09


目的の列だけセルの書式設定でロックしないようにしておき、シート丸ごと保護、では駄目ですか?
保護していても、ロックしない列は自由に入力できる、というだけの事ですが。
(Worksheet_Changeイベント時にロックを操作するのは、何か違うような気がします)
(???) 2015/10/29(木) 11:50

 まっさらな時は、全てのセルのロックを外しておいて、
 変更を加えたら、それ以上変更できないようにロックする、という機能かな〜?と思ってましたが
 間違えたときどうするんだろうとか、考えてしまいますね!
(稲葉) 2015/10/29(木) 11:53

1番の「指定した列を除いた変更」で思い通りの結果が出ました!!
この度は、回答頂きありがとう御座います!
(mackey) 2015/10/30(金) 10:46

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.