none
Dificuldade em somar valores em Textbox - VBA (quando algum textbox esta vazio)

    Question

  • Pessoal me ajudem por favor!

    Tenho 3 textbox, necessito somar seus valores e o resultado aparecer em outro textbox, uso este coamndo:

    TextBox4.Text = CDbl(TextBox1.Text) + CDbl(TextBox2.Text) + CDbl(TextBox3.Text), o meu problema é o seginte: quando um dos textbox esta vazio, retorna uma mensagem de erro, necessito fazer esta soma mesmo que alguns dos textbox esteja vazio.

    Desde ja agradeço a colaboração de todos!

    Um forte abraço.

    • Edited by Robspierre Sunday, June 27, 2010 4:57 PM
    Saturday, June 26, 2010 4:27 AM

Answers

  • Pierre faça o seguinte

    Num módulo crie a seguinte rotina

     

    Function Soma(frm As UserForm) As Long
    Dim ctl As Control
    
    For Each ctl In frm.Controls
    
      If TypeName(ctl) = "TextBox" Then
        If ctl.Text <> vbNullString Then
          Soma = CLng(ctl.Text) + Soma
        End If
      End If
    Next ctl
    MsgBox Soma
    End Function

    No código do seu botão , coloque o seguinte código
    Private Sub CommandButton1_Click()
      Soma Me
    End Sub
    Com isto a função irá somar os valores de todos os controles e retornar através da função Soma
    
    Teste ai e qqer coisa fale.



    Bruno Silva Leite Office Developer
    • Marked as answer by Robspierre Tuesday, June 29, 2010 9:30 AM
    Monday, June 28, 2010 1:40 PM

All replies

  • Faça o uso de IF p/ condição de cada TextBox vazio.
    jose
    Saturday, June 26, 2010 5:28 PM
  • OI José!

     

    Sua idéia foi boa porem agora no meu projeto, tive que acrescentar mais 7 textbox,  sendo que estou com 10 textbox e esta ocorrendo, que 4 ou 5 textbox ficam vazios aleatoriamente, para cobrir todas as possibilidades, terei que fazer uma combinação de todas possibilidades de textbox vazios e textbox contendo numeros,  vc conhece uma forma mais fácil, pensei em uma condição que ao verificar o textbox vazio "pulasse" automaticamente e somando os restantes, mas ja "quebrei" a cabeça e ainda não consegui.

     

    Desde já agradeço sua atenção

    Pierre

    Sunday, June 27, 2010 4:55 PM
  • Pierre faça o seguinte

    Num módulo crie a seguinte rotina

     

    Function Soma(frm As UserForm) As Long
    Dim ctl As Control
    
    For Each ctl In frm.Controls
    
      If TypeName(ctl) = "TextBox" Then
        If ctl.Text <> vbNullString Then
          Soma = CLng(ctl.Text) + Soma
        End If
      End If
    Next ctl
    MsgBox Soma
    End Function

    No código do seu botão , coloque o seguinte código
    Private Sub CommandButton1_Click()
      Soma Me
    End Sub
    Com isto a função irá somar os valores de todos os controles e retornar através da função Soma
    
    Teste ai e qqer coisa fale.



    Bruno Silva Leite Office Developer
    • Marked as answer by Robspierre Tuesday, June 29, 2010 9:30 AM
    Monday, June 28, 2010 1:40 PM
  • Olá,

     

    se estiver no Access, pode usar a função Nz: Nz(Textbox1)+Nz(Textbox2)+ ... + Nz(TextboxN)

     

    No Excel, pode usar a função IIF para ter uma sintaxe mais enxuta:

    IIF(IsNull(Textbox1)=true,0,Textbox1)+ ...


    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    Tuesday, June 29, 2010 1:03 AM
    Moderator
  • Luiz Cláudio e Bruno S. Leite as duas opções resolveram meu problema, para questão de aprendizado salvei as 02 respostas...

    Desde já agradeço a ajuda que vocês me forneceram!

    Um forte abraço!

     

    Tuesday, June 29, 2010 9:29 AM