Chcę, aby inni nie edytowali zawartości komórki w moim arkuszu Excela za pomocą VBA. Czy można to zrobić?Jak zablokować dane w komórce w programie Excel za pomocą vba
Odpowiedz
Spróbuj użyć metody Worksheet.Protect
, tak:
Sub ProtectActiveSheet()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Protect DrawingObjects:=True, Contents:=True, _
Scenarios:=True, Password="SamplePassword"
End Sub
Należy jednak być zaniepokojony tym hasło w kodzie VBA. Nie potrzebujesz hasła, jeśli próbujesz ustawić prostą barierę, która uniemożliwia użytkownikowi popełnianie drobnych błędów, takich jak usuwanie formuł itp.
Ponadto, jeśli chcesz zobaczyć, jak robić pewne rzeczy w VBA w programie Excel spróbuj nagrać makro i przejrzyj generowany kod. To dobry sposób na rozpoczęcie pracy z VBA.
Można najpierw wybrać których komórki nie chcesz być chronione (być edytowane przez użytkownika) poprzez ustawienie Locked status nich fałsz:
Worksheets("Sheet1").Range("B2:C3").Locked = False
Następnie można chronić arkusz, a wszystkie pozostałe komórki będą chronione. kod to zrobić, i nadal pozwalają kodu VBA zmodyfikować komórki to:
Worksheets("Sheet1").Protect UserInterfaceOnly:=True
lub
Call Worksheets("Sheet1").Protect(UserInterfaceOnly:=True)
Możesz również chcieć ogłoszenie d hasło, w innym wypadku wystarczy kliknąć "Odblokuj arkusz roboczy", a następnie wprowadzić zmiany w uprzednio zablokowanych komórkach. – Jonathan
wiersz powyżej Arkusze robocze ("Arkusz1") Protect (UserInterfaceOnly: = True) powinien być arkuszem roboczym ("Arkusz1"). Zabezpiecz UserInterfaceOnly: = True, tj. Bez nawiasów – dinotom
@dinotom, spójrz na historię edycji i faceta, który edytował w ten sposób wyjaśnia, dlaczego –
Sub LockCells()
Range("A1:A1").Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub
Można też zrobić to na poziomie arkusza przechwyconego w arkuszu roku zmień wydarzenie. Jeśli to lepiej spełnia twoje potrzeby. Umożliwia dynamiczne blokowania w oparciu o wartości, kryteriów, ect ...
Private Sub Worksheet_Change(ByVal Target As Range)
'set your criteria here
If Target.Column = 1 Then
'must disable events if you change the sheet as it will
'continually trigger the change event
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "You cannot do that!"
End If
End Sub
Załóżmy na przykład w jednym przypadku, jeśli chcesz zablokowanych komórek z zakresu A1 do I50 następnie poniżej kod:
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"
W innym przypadku, jeśli masz już chroniony arkusz następnie wykonaj poniższy kod:
ActiveSheet.Unprotect Password:="Enter your Password"
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"
http://stackoverflow.com/questions/17111648/how-to-lock-excel-cells-in-vba/ 18868676 # 18868676 –