Eu continuo recebendo um erro de execução 13 no Excel 2013

0

O código abaixo funciona bem no início, mas se eu excluir todos os dados das células, recebo o erro "erro 13" e o código para de funcionar. Existe alguma maneira de resolver este problema? Eu incluí o código abaixo:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Application.EnableEvents = False

If Target.Column = 1 Then
    Target = StrConv(Target, vbProperCase)
End If
Application.EnableEvents = True

If Target.Column = 3 Then
    Target = StrConv(Target, vbProperCase)
End If
Application.EnableEvents = True

If Target.Column = 6 Then
    Target = StrConv(Target, vbProperCase)
End If
Application.EnableEvents = True

If Target.Column = 7 Then
    Target = StrConv(Target, vbProperCase)
End If
Application.EnableEvents = True

End Sub
    
por Jack Finkenbinder 12.09.2017 / 01:44

1 resposta

0

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

    
por 12.09.2017 / 06:42