2017-02-13 5 views
0

私はパスワードで保護されたシートを持っています。保護されたシートのコードでセルの値を変更することはできません

ユーザーが値を変更すると、自動的に他のロックされていないセルをvbaコードで変更する必要があります。シートがロックされていても保護されている場合はうまく動作しません。

コードの例:のWorkbook_Openで

()IはTRUEにUserInterfaceOnly属性を設定:

Sheets("Sheet Name").Protect Password:="123456", UserInterFaceOnly:=True, Contents:=True 

シートコード:date.01場合date.02セルにdate.01値を設定

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(Target, Range("date.01")) Is Nothing Then 
    Worksheets("Sheet Name").Range("date.02") = Target 
    End If 
End Sub 

細胞 "date.01" と "date.02" に変更するロック解除されます。

なぜ更新できませんか?

EDIT:

は、SelectionChangeイベントは、セルの値を変更するための最良の選択肢ですか?

Worksheets("Sheet Name").Range("date.02") = Target 

元のセルにフォーカスが戻ったときに変更が適用されることがわかります。

私が実際にやりたいことは、ユーザーがいずれかを変更するといつでも、異なるシートのセルグループに同じ値を与えることです。

解決済み。

私の悪い、私はまた、すべてのエラーを防ぐために、これを使用していた

Worksheet_SelectionChange 

代わりの

Worksheet_Change 

を使用していました。

Application.EnableEvents = False 
<CODE> 
Application.EnableEvents = True 

すべてのセル/範囲がロックされているため、UserInterfaceOnlyを使用する必要はありませんでした。

+0

'シート( "シート名")してくださいパスワードの保護:。= "123456"、UserInterFaceOnly:= Falseを、内容量:=真' – R3uK

+0

同じですが、変更されません。私は、セルに日付の検証規則があると言っているのを忘れていました。 – giorgiline

+0

メッセージはスローされますか?検証ルールにエラーメッセージを追加します。エラーが発生しているかどうかを知ることができます。 – R3uK

答えて

0

イベントメソッドを通じて検証を適用してくださいeはワークシートです。変更イベント

https://msdn.microsoft.com/en-us/library/office/ff839775.aspx

そして、コードは次のようました:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("date.01")) Is Nothing Then 
    Application.EnableEvents = False 
    Worksheets("Sheet1").Range("date.01") = Target 
    Worksheets("Sheet2").Range("date.02") = Target 
    Worksheets("Sheet3").Range("date.03") = Target 
    Worksheets("Sheet4").Range("date.04") = Target 
    Worksheets("Sheet5").Range("date.05") = Target 
    Application.EnableEvents = True 
    End If 
End Sub 
0

あなたは単にそれを保護と関係があると確認することができます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("date.01")) Is Nothing Then

Sheets("Sheet Name").unProtect Password:="123456"

`Worksheets("Sheet Name").Range("date.02") = Target` 
`Sheets("Sheet Name").Protect Password:="123456", UserInterFaceOnly:=True` 

End if 

End Sub

あなたは私たちにVBA

+0

これはどちらでも動作しません。検証はアプリケーションUIを通じて適用されます。 – giorgiline

関連する問題