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 |
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