Notifications
Clear all

ERRO NA MACRO DE AUTO SOMA EM TEXTBOXES

9 Posts
1 Usuários
0 Reactions
2,183 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá pessoal estou com problemas em fazer auto soma dos textboxes(txtDiaria, txtAlimentacao, txtHotel, txtPedagio, txtCombustivel, txtGExtra) que será somado automaticamente no textbox(txtTDespesas) e fazer a subtração do total do textbox(txtDeposito) com o textbox(txtTDespesas) que será subtraido automaticamente no textbox(txtSaldo). Esta aparecendo a mensangem abaixo:

Erro em tempo de excecução '438:
O objeto não aceita esta propriedade ou método. Fim Depurar
Erro em destaque em amarelo:
If c.Name <> "txtTDespesas" And IsNumeric(c.Text) Then

Segue o código abaixo:

Private Sub txtDiaria_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtDiaria.Text = Format(txtDiaria.Text, "R$ #.00")
End Sub

Private Sub txtAlimentacao_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtAlimentacao.Text = Format(txtAlimentacao.Text, "R$ #.00")
End Sub

Private Sub txtHotel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtHotel.Text = Format(txtHotel.Text, "R$ #.00")
End Sub

Private Sub txtPedagio_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtPedagio.Text = Format(txtPedagio.Text, "R$ #.00")
End Sub

Private Sub txtCombustivel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtCombustivel.Text = Format(txtCombustivel.Text, "R$ #.00")
End Sub

Private Sub txtGExtra_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtGExtra.Text = Format(txtGExtra.Text, "R$ #.00")
End Sub

Private Sub txtSaldo_Change()
    txtSaldo.Text = Format(txtSaldo.Text, "R$ #.00")
End Sub
Private Sub txtTDespesas_Change()
    txtTDespesas.Text = Format(txtTDespesas.Text, "R$ #.00")
End Sub
Private Sub txtDeposito_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo1
    txtDeposito.Text = Format(txtDeposito.Text, "R$ #.00")
End Sub

Sub Calculo()

        Dim Valor As Double
        Valor = 0
        For Each c In Controls
            If c.Name <> "txtTDespesas" And IsNumeric(c.Text) Then
                If Right(c.Name, 1) < 7 Then
                    Valor = Valor + CDbl(c.Text)
                End If
            End If
        Next
        txtTDespesas.Text = Format(Valor, "R$ #.00")
    End Sub

Sub Calculo1()
    Dim valor1 As Double
    Valor = 0
    For Each a In Controls
        If a.Name <> "txtSaldo" And IsNumeric(a.Text) Then
            If Right(a.Name, 1) < 3 Then
                Valor = Valor + CDbl(a.Text)
            End If
        End If
    Next
    txtSaldo.Text = Format(Valor, "R$ #.00")
End Sub

silva_jmp

 
Postado : 11/01/2013 2:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Só para constar, no seu formulario existem varios controles (Frame, label entre outros) que não tem a propriedade Text, motivo do erro.
Então experimente assim:

Sub Calculo()
Dim Valor As Double
    Valor = 0
For Each c In Controls
    If TypeName(c) = "TextBox" Then
        If c.Name <> "txtTDespesas" And IsNumeric(c.Text) Then
            If Right(c.Name, 1) < 7 Then
                Valor = Valor + CDbl(c.Text)
            End If
        End If
    End If
Next
    txtTDespesas.Text = Format(Valor, "R$ #.00")
End Sub

Nota: Não testei a soma, então ...

 
Postado : 11/01/2013 2:48 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo obrigado por me atender, pois testei com a sua dica, não esta dando mais o erro, mas o textbox(txtTDespesas) local do resultado da somatória esta aparecendo este resultado "R$ ,00".

Private Sub txtDiaria_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtDiaria.Text = Format(txtDiaria.Text, "R$ #.00")
End Sub

Private Sub txtAlimentacao_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtAlimentacao.Text = Format(txtAlimentacao.Text, "R$ #.00")
End Sub

Private Sub txtHotel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtHotel.Text = Format(txtHotel.Text, "R$ #.00")
End Sub

Private Sub txtPedagio_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtPedagio.Text = Format(txtPedagio.Text, "R$ #.00")
End Sub

Private Sub txtCombustivel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtCombustivel.Text = Format(txtCombustivel.Text, "R$ #.00")
End Sub

Private Sub txtGExtra_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Calculo
    txtGExtra.Text = Format(txtGExtra.Text, "R$ #.00")
End Sub

Private Sub txtSaldo_Change()
    txtSaldo.Text = Format(txtSaldo.Text, "R$ #.00")
End Sub
Private Sub txtDeposito_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    txtDeposito.Text = Format(txtDeposito.Text, "R$ #.00")
End Sub
Sub Calculo()
Dim Valor As Double
    Valor = 0
For Each c In Controls
    If TypeName(c) = "TextBox" Then
        If c.Name <> "txtTDespesas" And IsNumeric(c.Text) Then
            If Right(c.Name, 1) < 7 Then
                Valor = Valor + CDbl(c.Text)
            End If
        End If
    End If
Next
txtTDespesas.Text = Format(Valor, "R$ #.00")

End Sub

silva_jmp

 
Postado : 11/01/2013 3:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Como disse não testei a soma, pois tambem não entendi a logica em "If Right(c.Name, 1) < 7 Then",pois nenhum dos text objetos tem numero no final.
Creio que, se eliminar esse if creio que funcionará

If TypeName(c) = "TextBox" Then
        If c.Name <> "txtTDespesas" And IsNumeric(c.Text) Then
            'If Right(c.Name, 1) < 7 Then
                Valor = Valor + CDbl(c.Text)
            'End If
        End If
    End If
 
Postado : 11/01/2013 4:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo deu certo, porém como faço para subtrair o txtDeposito - o resultado txtTDespesas que acabamos de somar e aparecer o resultado no txtSaldo.

silva_jmp

 
Postado : 11/01/2013 4:37 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Revendo, não esta certo nâo. Pois se for revisar os valores apos inclusão do deposito ou saldo, os valores são somados tambem.
Fiz algumas alterações, faça os testes e veja se realmente está atendendo

 
Postado : 11/01/2013 6:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, parcialmente deu certo, pois quando faço o teste sem digitar os valores nos textbox(Distancia Guia, km inicial, km final) e digito nos textboxes em pauta, os valores tão certo, mas quando digito os valores nos textboxes(Distancia Guia, km inicial, km final) e o resultado automativo total percorrido, nos textboxes em pauta estão fazendo a soma de todos os textboxes, coisa de doido pois não encontrei nenhuma ligação entre eles.

Faz um teste com mesmo arquivo que você postou...

Observei que se eu digito primeiro os textboxes financeiros e depois nos textboxes dos registros dos eventos fica perfeito, mas não é esta ordem que deve andar.
Analisando melhor eu acho que esta função que esta fazendo que todas as texboxes soma-se no txtTDespesas:
If TypeName(c) = "TextBox" Then

O que você acha?

silva_jmp

 
Postado : 11/01/2013 9:35 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pois é, o formulario tem muitos controles txt, então o codigo da soma tambem está somanto kminicial, kmfinal, distancia.. e percorrido; então a soma, havendo valores nesses campos, ficará completamente maluca.
Segue no anexo uma proposta (em Calculo) que creio irá corrigir isso.

 
Postado : 12/01/2013 7:14 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, valeu agora esta perfeito, obrigado.

silva_jmp

 
Postado : 12/01/2013 9:27 am