Jump to content

Multiplicação de valores em duas caixas de texto


JotaPt
 Share

Recommended Posts

Boas festas para todos:

Trago aqui um pedido de ajuda para resolver uma questão que já muito tentei resolvê-la, mas ainda não o consegui.

Eu quero fazer um recibo, onde se introduz, numa caixa de texto, um número que representa uma quantidade de um produto comprado (quero que nesta "TextBox" o formato de saída seja moeda número com duas casas decimais), noutra caixa de texto digita-se o preço unitário desse produto (quero que nesta "TextBox" o formato de saída, seja moeda em €), e por fim o valor da multiplicação da quantidade pelo preço seja apresentado numa Label (cujo formato de saída, seja moeda em €).

Visitem este link, onde tenho uma imagem do que pretendo e a folha de cálculo Excel com o código que fiz até agora.

Antecipadamente agradeço a vossa atenção e desejo-vos um excelente ano de 2016.

Obrigado

JotaPt

Link to comment
Share on other sites

Boas,

Tá um bocado confuso mas parece funcionar bem...

depois diz se serviu...

Private Sub Form_Load()
   Me.txtQuantidade.Text = Empty
   Me.txtPreco.Text = Empty
   Me.lblCusto.Caption = Empty
End Sub

Private Function multiplicar()
   Dim sPreco As String, dPreco As Double
   sPreco = Replace(txtPreco.Text, "€", "")
   sPreco = Replace(sPreco, ".", "")
   dPreco = CDbl(Val(Replace(sPreco, ",", ".")))

   lblCusto.Caption = Format$(dPreco * Val(txtQuantidade.Text), "€ ###,##0.00")
End Function

Private Sub txtPreco_Change()
   Call multiplicar
End Sub

Private Sub txtPreco_KeyPress(KeyAscii As Integer)

   Select Case KeyAscii

   Case 48 To 57, 8:
    KeyAscii = KeyAscii
   Case 44, 46:
    If InStr(txtPreco.Text, ",") <> 0 Or InStr(txtPreco.Text, ".") <> 0 Then
	    KeyAscii = 0
    Else
	    KeyAscii = 44
    End If
   Case Else:
    KeyAscii = 0
   End Select

End Sub

Private Sub txtPreco_LostFocus()
   txtPreco.Text = Format$(txtPreco.Text, "€ ###,##0.00")
End Sub

Private Sub txtQuantidade_Change()
   Call multiplicar
End Sub

Private Sub txtQuantidade_KeyPress(KeyAscii As Integer)
   If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 Then
    KeyAscii = 0
   End If
End Sub
Link to comment
Share on other sites

Boas, amigo Try-Catch...

Desejo-te para ti e para os teus, festas felizes.

Já fiz a cópia do teu código e fiz alguns ajustes (principalmente no nome das caixas de texto e do lbael).

Quando pressione F5, dá erro de compilação ("Procedure declaration does not match description of event or procedure having same name" e para na linha "Private Sub TextBox2_KeyPress(KeyAscii As Integer", onde: TextBox2 <=> txtPreco

Será que podes descarregar o ficheiro que disponibilizo na minha DropBox e assim poderes verificar o funcionamento da minha folha de cálculo?

Mais uma vez obrigado e Boas Festas e um feliz ano novo.

JotaPt

Link to comment
Share on other sites

Desculpa-me a "troca2 de username, vikcch...

Já dei conta do entrave no teu código, (algumas declarações em VBA são ligeiramente diferentes do vb6)

A linha:

Private Sub TextBox2_KeyPress(KeyAscii As Integer)

tem de ser escrita:

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Mas, mesmo com o teu código, os cálculos não são bem executados.

Deixo aqui o meu código inicial:

Private Sub TextBox1_Change()
   If Me.TextBox1 = "" Then
    Exit Sub
   End If
   If TextBox1.Value <> "" And TextBox2.Value <> "" Then
    Label1 = FormatCurrency(CCur(Val(TextBox1.Text) * Val(TextBox2.Text)))
   End If
End Sub
Private Sub TextBox2_Change()
   If Me.TextBox2 = "" Then
    Exit Sub
   End If
   If TextBox1.Value <> "" And TextBox2.Value <> "" Then
    Label1 = FormatCurrency(CCur(Val(TextBox1.Text) * Val(TextBox2.Text)))
   End If
End Sub
Sub buscar_recibo()
   If Me.lbl_Recibo = "" Then
    Exit Sub
   End If

Dim plan As Worksheet
Dim linha As Integer
Dim recibo As Integer
Set plan = Sheets("Dados")
   recibo = lbl_Recibo
   plan.Select
   linha = plan.Range("A:A").Find(recibo).Row
   TextBox1 = plan.Cells(linha, 2)
   txtDscr = plan.Cells(linha, 3)
   TextBox2 = FormatCurrency(plan.Cells(linha, 4))
   Label1 = FormatCurrency(plan.Cells(linha, 5))

End Sub
Private Sub UserForm_Initialize()
Sheets("Dados").Select
Dim quantidade As Integer
   quantidade = (Sheets("Dados").Range("A" & Rows.Count).End(xlUp).Row) - 1
   Sheets("Dados").Range("A2").Select
   Me.lbl_Recibo = ActiveCell
   Call buscar_recibo
End Sub

Com este código, os cálculos são bem efetuados, mas as caixas de texto não têm quaisquer formatações e assim que eu as formate para que o preço seja em €, os cálculos passam a ser efetuados erradamente.

Agradeço, desde já a tua atenção, obrigado...

Aguardo a vossa ajuda e desejo-vos boas saídas e excelentes entradas para 2016.

Feliz ano de 2016

JotaPt

Link to comment
Share on other sites

Ao escreveres FormatCurrency, no final tens que inserir o formato que pretendes, por exemplo "###,##0.00".

Agora na linha:

Label1 = FormatCurrency(CCur(Val(TextBox1.Text) * Val(TextBox2.Text)))

o que significa CCur?

Porque não retiras "Val" e em vez de "TextBox1.Text", não colocas "TextBox1.Value"?

Atenção que as variáveis que quiseres exibir em €, devem ser declaradas como double, eventualmente como "Variant".

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.