Notifications
Clear all

Tratamento de erro - if aninhado

10 Posts
3 Usuários
0 Reactions
1,804 Visualizações
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Prezados, bom dia.

No código abaixo, antes de executar uma macro, eu gostaria de verificar algumas condições conforme abaixo.
Em cada aba, eu verifico se a célula A1 está preenchida com a base de dados (futuramente eu vou automatizar para o usuario abrir direto o arquivo).
Eu não quero que a macro execute se alguma dessas condições for satisfeita (erro), e no final, exiba ao usuário quais bases ele precisa carregar para continuar.
Não consegui bolar um jeito de fazer isso, mas esses Ifs aninhados não ficaram bons.
Alguem pode dar o caminho das pedras?

'Procedimento Checar todas as bases
If WsBaseSmart.Range("A1") = "" Then
    Msgbox = "Carregue a base de Estações na Aba: (BASE Estações) antes de executar sua macro."
Else
    If WsBaseComp.Range("A1") = "" Then
        MsgBox = "Carregue a base de Compartilhados na Aba: (BASE Compartilhamento) antes de executar sua macro."
    Else
        If WsBasePN.Range("A1") = "" Then
            MsgBox = "Carregue a base atualizada do PN na Aba: (BASE PN) antes de executar sua macro."
        Else
            If WsBaseMulta.Range("A1") = "" Then
                MsgBox = "Carregue a base de Multas na Aba: (BASE Multa) antes de executar sua macro."
            End If
        End If
    End If
End If

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 26/05/2017 8:06 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

jonascruz,

Bom dia!

Não ficaram bons porque? Tá funcionando normalmente?

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 26/05/2017 8:29 am
leandroxtr
(@leandroxtr)
Posts: 447
Reputable Member
 

Anexe a planilha ou um modelo igual para ajudarmos melhor,amigo.

Mas já adianto que este processo que você quer pode ser resolvido com a estrutura For Each, juntamente com condições que gravam os Erros em variáveis, estes(erros/variáveis) concatenados e retornados em uma msgbox no final.

Se te ajudou, não se esqueça de dar um like na resposta e marcar o tópico como finalizado.

Abraços!
Leandro Cordeiro

 
Postado : 26/05/2017 8:39 am
leandroxtr
(@leandroxtr)
Posts: 447
Reputable Member
 

wagner, a estrutura dele não está perfeita porque ela analisa uma condição. Se ela atende a condição, retorna o valor verdadeiro e não percorre pelas demais. Ele quer que a estrutura verifique todas as situações e retorne os erros em uma só mensagem no final para o usuário.

Pelo menos foi o que entendi.

Se te ajudou, não se esqueça de dar um like na resposta e marcar o tópico como finalizado.

Abraços!
Leandro Cordeiro

 
Postado : 26/05/2017 8:42 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Entendi Leandro...

É... vamos aguardar para ver o que ele diz ou se anexa o arquivo.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 26/05/2017 8:45 am
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Obrigado.

Tanto o arquivo quanto a macro está gigante, mas vou tentar postar aqui essa parte dela.

O que eu quero é fazer as 4 verificações (1 verificação em cada aba), independente do resultado.
No final, se alguma condição de erro foi atendida, exibir a mensagem (dentro do If) ou exibir mais de 1 erro.
E principalmente, não deve seguir com o código, deve abortar, para o usuário ir lá na aba e inserir os dados.
Se nenhuma condição de erro for atendida, significa que está tudo ok e aí sim o código segue normalmente.

Quando eu disse que não está bom é porque do jeito que escrevi, assim que ele achar alguma condição de erro, vai sair do laço, e eu quero que percorra as 4 verificações e apenas no final exiba um msgbox com o que deve ser feito.

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 26/05/2017 8:54 am
leandroxtr
(@leandroxtr)
Posts: 447
Reputable Member
 

Boa tarde

Veja se esse modelo te atende. (Verificar se a célula "A1" de cada Worksheet está preenchida e retorna uma msg box das que estão vazias)

att

Se te ajudou, não se esqueça de dar um like na resposta e marcar o tópico como finalizado.

Abraços!
Leandro Cordeiro

 
Postado : 26/05/2017 9:18 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

jonascruz,

Veja se assim fica melhor para você.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 26/05/2017 9:22 am
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

@wagner, @leandroxtr
Muito obrigado pela ajuda.
Olhei as macros de vocês e ambas me ajudaram.

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 26/05/2017 11:47 am
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Permitam-me postar a adaptação que fiz.

Dim Erro1       As String
Dim Erro2       As String
Dim Erro3       As String
Dim Erro4       As String
Dim PossuiErro  As Boolean

PossuiErro = False

If WsBaseSmart.Range("A1").Value = Empty Then
Erro1 = "Estações Smartplan" & CARACT(10)
PossuiErro = True
Else
Erro1 = ""
End If

If WsBaseComp.Range("a1").Value = Empty Then
Erro2 = "Sites Compartilhados" & CARACT(10)
PossuiErro = True
Else
Erro2 = ""
End If

If WsBasePN.Range("a1").Value = Empty Then
Erro3 = "Plano Nominal (PN)" & CARACT(10)
PossuiErro = True
Else
Erro3 = ""
End If

If WsBaseMulta.Range("a1").Value = Empty Then
Erro4 = "Multas" & CARACT(10)
PossuiErro = True
Else
Erro4 = ""
End If

If PossuiErro Then
    MsgBox = "Antes de executar sua macro, carregue as bases: " & Erro1 & Erro2 & Erro3 & Erro4
    Set WsBase = Nothing
    Set WsBaseSmart = Nothing
    Set WsBasePN = Nothing
    Set WsBasePNok = Nothing
    Set WsBaseComp = Nothing
    Set WsBaseCompOK = Nothing
    Set WsBaseMulta = Nothing
    Set WsBaseMultaOK = Nothing
    Exit Sub
End If

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 26/05/2017 1:21 pm