Ir para conteúdo
Fórum Script Brasil
  • 0

Como colocar uma condicional para executar o cálculo após o preenchimento de todas as varáveis?


Anderson Aragão

Pergunta

Estou com problemas na execução de um código no VBA, pois quando o divisor de uma fórmula não é preenchido primeiro é mostrado "erro em tempo de execução 11 - divisão por zero". Daí gostaria de colocar uma condicional para que a execução do cálculo só seja realizada quando a caixa estiver preenchida. 

 

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Sub calcular()

    Dim vazia As Double
    Dim cheia As Double
    Dim pesomedio As Double
    Dim maximocaixa As Double
    Dim preforma As Double
   
   
   
    If txtpreforma.Text <> "" Then preforma = txtpreforma.Text
    If txtvazia.Text <> "" Then vazia = txtvazia.Text
    If txtcheia.Text <> "" Then cheia = txtcheia.Text
    If txtpesomedio.Text <> "" Then pesomedio = txtpesomedio.Text
    If txtmaximocaixa.Text <> "" Then maximocaixa = txtmaximocaixa.Text
       

   
   
    txtesperado.Text = (preforma * maximocaixa)
   
    txtcalculada.Text = ((cheia - vazia) / pesomedio)
   
    txtdiferença.Text = (maximocaixa - calculada)
   
   
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite @Anderson Aragão

Eu fiz um simulei seu código e vi que estava com erro justamente no, código abaixo, na teste que fiz não pode ter o divisor com o numero zero.

txtcalculada.Text = ((cheia - vazia) / pesomedio)

 

Para solucionar fiz uma "IIF" (mesma coisa que "SE") e troquei o "" para 1 quando não tiver nada:

Sub calcular()
Dim vazia           As Double
Dim cheia           As Double
Dim pesomedio       As Double
Dim maximocaixa     As Double
Dim preforma        As Double

With frmAnderson
    preforma = IIf(.txtpreforma.Text = "", 0, .txtpreforma.Text)
    vazia = IIf(.txtvazia.Text = "", 0, .txtvazia.Text)
    cheio = IIf(.txtcheia.Text = "", 0, .txtcheia.Text)
    pesomedio = IIf(.txtpesomedio.Text = "", 1, .txtpesomedio.Text)
    maximocaixa = IIf(.txtmaximocaixa.Text = "", 0, .txtmaximocaixa.Text)
    
    'If .txtpreforma.Text <> "" Then preforma = .txtpreforma.Text
    'If .txtvazia.Text <> "" Then vazia = .txtvazia.Text
    'If .txtcheia.Text <> "" Then cheia = .txtcheia.Text
    'If .txtpesomedio.Text <> "" Then pesomedio = .txtpesomedio.Text
    'If .txtmaximocaixa.Text <> "" Then maximocaixa = .txtmaximocaixa.Text
       
    .txtesperado.Text = (preforma * maximocaixa)
    .txtcalculada.Text = ((cheia - vazia) / pesomedio)
    .txtdiferença.Text = (maximocaixa - calculada)
End With
End Sub

 

Link Planilha com o exemplo

Link para o comentário
Compartilhar em outros sites

  • 0

Alyson, valeu mesmo!

Se puder, me ajuda neste outro ítem.

No cbb que cadastrei para salvar os dados novos ele só ta direcionando para mesma linha. Ou seja, o dado que tá é apagado para substituir o novo. estou usando este código.

Private Sub cmdgravar_Click()
    If llinha = 0 Then
    llinha = validadores.Cells(validadores.Rows.Count, 1).End(xlUp).Row
       If llinha <> 4 Then
          llinha = llinha + 1
        
        End If
    End If
    
    lscadastrar llinha
    lslimpar
    
End Sub

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...