Página 1 de 1

Tratamento de Erro ao retornar Maior número

Enviado: 27 Ago 2021 às 22:44
por SandroLima
Boa noite, pessoal.

Preciso de ajuda com uma macro que me retorna o maior número ao comparar as primeiras Células de duas colunas.
Fiz um esboço da macro e ela funciona a grosso modo desde que o valor das células das duas colunas em questão sejam números.
Código: Selecionar todos
Sub Calcular_Linhas()
    
    Dim Plan As Worksheet
    Dim Tabela As ListObject
    Dim Col_Qtde As Long, Col_Parc As Long
    Dim Qtde As Long, Parcelas As Long
    Dim Num_Linhas As Integer
    
    Set Plan = Sheets("MATRIZ")
    Set Tabela = Plan.ListObjects("Tabela1")
    
    Col_Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Column
    Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Cells(1, 1).Value
        
    Col_Parc = Tabela.ListColumns("Parcelas").DataBodyRange.Column
    Parcelas = Tabela.ListColumns("Parcelas").DataBodyRange.Cells(1, 1).Value
    
    If Qtde > Parcelas Then
        Num_Linhas = Qtde
    Else
        Num_Linhas = Parcelas
    End If
    
    MsgBox "O Número de Linhas é igual a " & Num_Linhas
    
End Sub
Porém há situações em que as células dessas duas colunas apresentam valor "" ou "-".
Acredito que preciso de um "tratamento de erro" ou algo semelhante á fórmula ÉNUM do Excel para verificar se os valores comparados são números.
Se os valores das duas colunas não forem numéricos o Resultado da Variável procurada pela macro deve ser igual a 0 (zero) e caso apelas um dos dois valores seja numérico retornar o valor do número.

Observe que da maneira como está a Macro irá retornar em erro pois o valor da célula K23 não é um número. Ao inserir qualquer número nessa célula a macro funciona.

Segue a planilha para verificação e testes.

Re: Tratamento de Erro ao retornar Maior número

Enviado: 29 Ago 2021 às 00:02
por carloscirilo77
Bom dia, boa tarde, boa noite amigo!!

Pelo que entendi (não sei se estou certo) o que basta é vc comparar o maior número do que cai nas 02 primeiras células das colunas QTDE X PARCELAS, correto ?

Se sim, simplifiquei seu código "assassinando" as variáveis declaradas como DIM_AS LONG (Qtd e Parcelas), por simplesmente duas fórmulas nas células I21 (para Qtd) e K21 (para Parcelas), sendo que essas fórmulas irá manter o valor do que realmente é valor (número) e vai zerar (0) tudo aquilo que cair diferente de número...
Depois no código só fiz "desligar" as condições DIM, e acionar as condições RANGE nessas células de fórmulas, em troca a MSGBOX vai na localização correta da coluna que localizar o maior valor!! Veja como ficou :

Sub Calcular_Linhas()

Dim Plan As Worksheet
Dim Tabela As ListObject
Dim Col_Qtde As Long, Col_Parc As Long
Dim Qtde As Long, Parcelas As Long
Dim Num_Linhas As Integer

Set Plan = Sheets("MATRIZ")
Set Tabela = Plan.ListObjects("Tabela1")

' Col_Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Column
' Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Cells(1, 1).Value

' Col_Parc = Tabela.ListColumns("Parcelas").DataBodyRange.Column
' Parcelas = Tabela.ListColumns("Parcelas").DataBodyRange.Cells(1, 1).Value

If Range("i21") > Range("k21") Then
MsgBox "O Número de Linhas é igual a " & Range("i21"), vbInformation, "QTDE"
Else
MsgBox "O Número de Linhas é igual a " & Range("k21"), vbInformation, "PARCELAS"
End If

'MsgBox "O Número de Linhas é igual a " & Num_Linhas

End Sub

Agora se não entendi a solicitação, creio que estaria faltando outro tratamento que não mapeei...
Espero ter ajudado!

OBS: Em anexo a planilha que fiz o código...

Abraços

Re: Tratamento de Erro ao retornar Maior número

Enviado: 30 Ago 2021 às 00:19
por SandroLima
Boa noite, Carlos Cirilo.

Foi um a boa alternativa e obrigado pela iniciativa em ajudar. Porém gostaria de buscar uma alternativa dentro da própria macro.

Pesquisei um pouco mais e vi que há como fazer com a Função IsNumeric mas ainda não consegui fazer.

Continuo tentando aqui.

Re: Tratamento de Erro ao retornar Maior número

Enviado: 30 Ago 2021 às 07:31
por carloscirilo77
Perfeito meu caro! Eu tentei mexer dentro do código mesmo mas não consegui tmb.. Vou acompanhar tua solicitação afim de aprender tmb!!
Abraços