Nie jest to specjalnie prosta ani ładna procedura, ale działa 🙂
Jak widać powinna być umieszczona w module prywatnym arkusza
Powoduje ona wykrycie i cofnięcie wklejania do komórek z ustawionym sprawdzaniem poprawności
Private Sub Worksheet_Change(ByVal Target As Range) Dim BylaZmiana As Boolean Dim ZakresWspolny As Range On Error GoTo Obsluga 'jeśli to spowoduje błąd to nie ma zmian w chronionym zakresie A1:A2 Application.Intersect(Me.Range("A1:A2"), Target).Select BylaZmiana = True 'ta linia prawdopodobnie spowoduje błąd gdy było wklejanie If Target.Validation.Type <> xlValidateDate Then Resume Next Czyszczenie: On Error Resume Next Application.EnableEvents = True Exit Sub Obsluga: Select Case Err Case 91 'prawdopodobnie do zignorowania Case 1004 If BylaZmiana Then 'prawdopodobnie błąd spowodowany wklejeniem w chronionym zakresie MsgBox "Nie wolno niszczyć sprawdzania poprawności!", vbExclamation Application.EnableEvents = False Application.Undo Application.EnableEvents = True End If Case Else MsgBox Err & " - " & Err.Description, vbCritical End Select Resume Czyszczenie End Sub |