Ich habe ein VBA-Makro, das Zellen durchläuft, deren Werte geändert wurden, und ändert die Werte anderer Zellen in derselben Zeile.Excel VBA - Blatt wird zu schnell geschützt
Public Sub Worksheet_Change (ByVal Target As Range)
Dim r As Integer
Application.ScreenUpdating = false
' Unprotect the sheet
ActiveSheet.Unprotect("password")
Set newRange = Range("K:K")
If Not Application.Intersect(newRange, Range(Target.Address)) Is Nothing Then
For Each cell in Target.Cells
' Change the values of cells in the same row
r = cell.Row
Cells(r, 2).Value = "New Value"
Cells(r, 3).Value = "New Value" ' Debug highlights this line
Cells(r, 4).Value = "New Value"
Cells(r, 5).Value = "New Value"
Next
End If
' Reprotect the sheet
ActiveSheet.Protect Password:="password", AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, _
AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
Application.ScreenUpdating = True
End Sub
Ohne unprotecting/Erneuter Schutz des Blattes das Makro funktioniert gut, aber wenn hinzugefügt erzeugt es eine Runtime Error Application-Defined or Object-Defined error
, aber nicht vor Eingang der ersten Zelle Wert Cells(r, 2).Value = "New Value"
ändern.
Ich kann nur annehmen, dass dies daran liegt, dass das Blatt beim Start ungeschützt ist und die erste Zellenwertänderung abgeschlossen ist, bevor das Blatt dann gesperrt wird (vielleicht läuft es in einem separaten Thread zur For-Schleife?). Das Makro enthält dann Fehler in der folgenden Zeile, da versucht wird, eine Änderung an einem geschützten Blatt vorzunehmen.
Wie kann ich das beheben und verhindern, dass das Blatt zu schnell einrastet?
erste Zeile: "ByVal Ziel als Zeile" sollte "ByVal Ziel als Bereich" sein – NiH
Danke, änderte die Frage – ryansin
Sind Sie wirklich zuweisen "New Value" '? Können Sie das Problem mit dem genauen Code reproduzieren, den Sie in Ihrer Frage angegeben haben? (außer für das Passwort natürlich) – trincot