2016-05-24 5 views
0

Ich lief ein einfaches Sub namens SetProtection() einmal auf einem Makro aktiviert Vorlage. Die Arbeitsmappe hat 9 Registerkarten. Ich habe den Code so ausgeführt, dass UserInterfaceOnly:=True. Es funktioniert gut, während die Vorlage geöffnet ist. Ich speichere und schließe die Vorlage. In einer Windows-Ordneransicht doppelklicke ich auf die Vorlagendatei, sodass Excel eine neue Arbeitsmappe öffnet. Die Einstellung UserInterfaceOnly:=True wird von der neuen Arbeitsmappe vergessen. Ich bekomme einen Fehler, wenn der Wert einer Zelle geändert wird, wenn VBA versucht, den Wert einer anderen Zelle, die gesperrt ist, zu ändern.Excel 2013 VBA wsheet.protect UserInterfaceOnly: = Wahr

Nehmen wir an, ich bearbeite die Vorlage Datei und savAs eine Makro-fähige Arbeitsmappe. Wenn ich die Arbeitsmappe bearbeite, funktioniert die Einstellung UserInterfaceOnly:=True weiterhin. VBA kann Änderungen an gesperrten Zellen vornehmen.

Sollte nicht UserInterfaceOnly:=True von einer Excel-Vorlage Datei weitergegeben werden?

Sub SetProtection() 

    Dim wSheet   As Worksheet 
    Dim Pwd    As String 
Pwd = InputBox("Enter your password to protect all worksheets", "Password Input") 
    For Each wSheet In Worksheets 
     wSheet.Protect Password:=Pwd, UserInterfaceOnly:=True 
    Next wSheet 
End Sub 

Antwort

0

See: http://www.cpearson.com/excel/Protection.aspx

Die Userinterfaceonly Einstellung wird nicht gespeichert, wenn Sie die Arbeitsmappe schließen, so müssen Sie es festgelegt, wenn die Arbeitsmappe geöffnet wird. Der beste Ort dafür ist in der Workbook_Open-Ereignisprozedur.