Isso é semelhante ao código da sua pergunta, mas impede que qualquer célula nas colunas A: B seja excluída / definida como em branco:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Dim b As Boolean
On Error GoTo Terminate
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
For Each c In Target.Cells
If Not Intersect(c, Range("A:B")) Is Nothing And c.Value = "" Then
b = True
GoTo UndoChange
End If
Next c
UndoChange:
If b Then Application.Undo
Terminate:
If Err Then
Debug.Print "Error", Err.Number, Err.Description
Err.Clear
End If
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Funciona com várias seleções de células, pois faz um loop em cada célula no intervalo alterado e verifica um valor em branco.
EDIT: Código modificado, para integrar sua funcionalidade Worksheet_Change
existente;
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Dim b As Boolean
On Error GoTo Terminate
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
For Each c In Target.Cells
If Not Intersect(c, Range("A:B")) Is Nothing And c.Value = "" Then
b = True
GoTo UndoChange
End If
If c.Column = 10 And c.Row >= 6 Then
c.Value = UCase(c.Value)
End If
Next c
UndoChange:
If b Then Application.Undo
Terminate:
If Err Then
Debug.Print "Error", Err.Number, Err.Description
Err.Clear
End If
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub