Usuário com melhor resposta
Tratamento de Erro (On Error GoTo)

Pergunta
-
Olá pessoal! Tudo bom?
Criei um programa que procura alguns valores da célula de uma planilha. Coloquei um tratamento de erro quando o valor da célula apresentar um erro como valor. Quando há só uma célula com erro o código funciona, no entanto, quando há mais de uma célula, o segundo erro não é tratado.
Alguém pode me ajudar?
Abs,
No código abaixo se duas ou mais células tiverem por ex. um erro do tipo #DIV/0!, o código é interrompido.
Sub Macro1()
Dim cont As Integer
On Error GoTo trataerro
For cont = 1 To 3
MsgBox Cells(cont, 1)
trataerro:
Next
End Sub
Respostas
-
Não declare variáveis com o tipo de dados Integer se elas representarem uma linha no Excel. Declare-as como Long. Além de tipos de dados Long operarem com maior velocidade, suporta o limite de um milhão de linhas do Excel.
---
Não sugiro utilizar o tratamento de exceção do tipo On...Error...Goto no seu caso. O Excel possui um tipo de teste especial para tratar erros de células.
Na verdade, erros do tipo #DIV/0!, #N/D e #NÚM! representam um tipo de dados Variant com um subtipo específico que pode ser testado usando a função IsError:
Sub pTest1() Dim cont As Integer Dim rng As Excel.Range Dim sError As String For cont = 1 To 3 Set rng = Cells(cont, 1) If Not IsError(rng.Value) Then MsgBox rng.Value Else MsgBox "Erro." End If Next cont End Sub
No entanto, se quiser saber qual tipo de erro a célula possui, faça algo como mostrado abaixo:
Sub pTest2() Dim cont As Integer Dim rng As Excel.Range Dim sError As String For cont = 1 To 3 Set rng = Cells(cont, 1) If Not IsError(rng.Value) Then sError = rng.Value Else Select Case rng.Value Case CVErr(XlCVError.xlErrDiv0): sError = "#DIV/0!" Case CVErr(XlCVError.xlErrNA): sError = "#N/D" Case CVErr(XlCVError.xlErrName): sError = "#NOME?" Case CVErr(XlCVError.xlErrNull): sError = "#NULO!" Case CVErr(XlCVError.xlErrNum): sError = "#NÚM!" Case CVErr(XlCVError.xlErrRef): sError = "#REF!" Case CVErr(XlCVError.xlErrValue): sError = "#VALOR!" End Select End If MsgBox sError Next cont End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Erikeng quarta-feira, 17 de dezembro de 2014 20:04
Todas as Respostas
-
-
Não declare variáveis com o tipo de dados Integer se elas representarem uma linha no Excel. Declare-as como Long. Além de tipos de dados Long operarem com maior velocidade, suporta o limite de um milhão de linhas do Excel.
---
Não sugiro utilizar o tratamento de exceção do tipo On...Error...Goto no seu caso. O Excel possui um tipo de teste especial para tratar erros de células.
Na verdade, erros do tipo #DIV/0!, #N/D e #NÚM! representam um tipo de dados Variant com um subtipo específico que pode ser testado usando a função IsError:
Sub pTest1() Dim cont As Integer Dim rng As Excel.Range Dim sError As String For cont = 1 To 3 Set rng = Cells(cont, 1) If Not IsError(rng.Value) Then MsgBox rng.Value Else MsgBox "Erro." End If Next cont End Sub
No entanto, se quiser saber qual tipo de erro a célula possui, faça algo como mostrado abaixo:
Sub pTest2() Dim cont As Integer Dim rng As Excel.Range Dim sError As String For cont = 1 To 3 Set rng = Cells(cont, 1) If Not IsError(rng.Value) Then sError = rng.Value Else Select Case rng.Value Case CVErr(XlCVError.xlErrDiv0): sError = "#DIV/0!" Case CVErr(XlCVError.xlErrNA): sError = "#N/D" Case CVErr(XlCVError.xlErrName): sError = "#NOME?" Case CVErr(XlCVError.xlErrNull): sError = "#NULO!" Case CVErr(XlCVError.xlErrNum): sError = "#NÚM!" Case CVErr(XlCVError.xlErrRef): sError = "#REF!" Case CVErr(XlCVError.xlErrValue): sError = "#VALOR!" End Select End If MsgBox sError Next cont End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Erikeng quarta-feira, 17 de dezembro de 2014 20:04
-