Quando você exclui uma linha, seus erros de código na linha Target = StrConv(Target, vbProperCase)
(Col 1)
Você está alterando todas as células da linha, então o alvo contém várias células
-
StrConv()
aceita apenas uma string - Antes do erro, você ativa
Application.EnableEvents = False
- Após o erro, o código pára e não consegue executar
Application.EnableEvents = True
agora todos os eventos estão desativados
Esta versão verificará essas possibilidades:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
With Target
If .CountLarge = 1 Then 'one cell
Select Case .Column
Case 1, 3, 6, 7:
If Not IsError(.Value2) Then
If Len(.Value2) > 0 Then .Value2 = StrConv(.Value2, vbProperCase)
End If
End Select
Else
Dim cel As Range, ur As Range
For Each cel In Target 'multiple cells (copy/paste, del/insert rows/cols)
With cel
Set ur = UsedRange
If .Row > ur.Rows.Count Or .Column > ur.Columns.Count Then Exit For
Select Case .Column
Case 1, 3, 6, 7:
If Not IsError(.Value2) Then
If Len(.Value2) > 0 Then
.Value2 = StrConv(.Value2, vbProperCase)
End If
End If
End Select
End With
Next
End If
End With
Application.EnableEvents = True
End Sub
Isso funciona bem em Worksheet_SelectionChange()
também