Изображение
Здравствуйте, я пытаюсь написать макрос, который автоматически блокирует ячейки после того, как пользователь нажал кнопку сохранения. Листы защищены и содержат несколько незаблокированных ячеек, в которые пользователь может вводить данные. Теперь я хочу, чтобы эти ячейки блокировались после того, как пользователь щелкнул данные. У меня в книге несколько листов, но я хочу, чтобы это происходило только для первых листов. Я пробовал много кода на форуме, но безуспешно, может ли кто-нибудь помочь мне с этим.
Код VBA:
Option Explicit Dim Ws As Worksheet
Private bRangeEdited As Boolean 'Private WithEvents Ws As Worksheet
Private Sub Workbook_Open()
Set Ws = Range("A1:ZZ27").Parent End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sMSG As String
sMSG = "Beim Speichern der Arbeitsmappe werden die Eingabezellen gesperrt. " & vbLf
sMSG = sMSG & "Möchten Sie fortfahren ?"
If Not bRangeEdited Then GoTo Xit
If Not Me.ReadOnly Then
With Range("A1:ZZ27")
If MsgBox(sMSG, vbExclamation + vbYesNo) = vbNo Then
Cancel = True
GoTo Xit
End If
Unpro_SheeTS ' .Parent.Unprotect "1234"
If .SpecialCells(xlCellTypeBlanks).Address <> .Address Then
.SpecialCells(xlCellTypeConstants).Locked = True
bRangeEdited = False
End If
Pro_SheeTS ' .Parent.Protect "1234"
End With
End If Xit: End Sub
Private Sub ws_Change(ByVal Target As Range)
Dim Ws As Worksheet
If Not Intersect(Range("A1:ZZ27"), Target) Is Nothing Then
bRangeEdited = True
End End Sub
Sub Unpro_SheeTS()
For Each Ws In ActiveWorkbook.Worksheets
Ws.Unprotect ("1234")
Next
Exit Sub
End Sub Sub Pro_SheeTS()
For Each Ws In ActiveWorkbook.Worksheets
Ws.Protect ("1234")
Next
Exit Sub
End Sub