 # Ajuda na multiplicação de valores em duas caixas de texto

## 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.

JotaPt

Edited by JotaPt

##### Share on other sites Boas,

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

depois diz se serviu...

```Private Sub Form_Load()
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

Call multiplicar
End Sub

If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 Then
KeyAscii = 0
End If
End Sub```

##### 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

##### Share on other sites Obrigado, mas o meu username não é Try-Catch assim como o teu não é null...

Experimenta fazer ao contrario, muda antes o nome das textboxs e a label na aplicação para esses do exemplo....

não tenho aqui vba, fiz em vb6 mesmo, mas penso que deveria funcionar...

##### 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
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()
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.

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

Feliz ano de 2016

JotaPt

##### Share on other sites Desejo um excelente ano de 2016 a todos...

##### 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
```

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.

JotaPt

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".

## Create an account

Register a new account

×

• #### Revista PROGRAMAR

• Wiki
• IRC
×
• Create New...