COMO CRIAR UMA MASCARA DE MOEDA R EM UM TEXTBOX

HENRYMARQUES 22/08/2011 19:44:43
#382274
Boa noite, gostaria de uma dica de como criar uma máscara de moeda em Real R$ em um textbox.
Estou desenvolvendo em excel vba e tem um text que preciso que funcione apresentando o R$ (cifrão) e ao mesmo tempo não aceite valores que não sejam moeda e quando eu digitar por engano possa apagar sem dar erro, pois o que eu tenho se eu acrescentar uma virgula a mais por engano (R$ 3,0,) ele dá um erro.
obg,
FILMAN 22/08/2011 22:42:12
#382283
Private Sub Text1_LostFocus()
Text1.Text = FormatCurrency(Text1.Text, , , vbTrue, vbTrue)
End Sub


Vê se é isso que você quer
HENRYMARQUES 23/08/2011 09:26:45
#382298
Agradeço as respostas aqui citadas, mas não adiantou quanto ao erro, somente funcionou com relação a máscara. se digitar por exemplo 50,0, (erro ao digitar uma virgula a mais por acidente) ai dá um erro em tempo de execução [ô]13[ô] tipos incompatíveis.
Aguardo respostas...
obg,
MARCELO.TREZE 23/08/2011 11:15:18
#382304
olha a melhor mascara de moeda que encontrei até hoje foi esta:

em um módulo cole:

Public Sub MascMoeda(ByVal Controle As TextBox)
Dim i As Integer, T As String
With Controle
[ô]Armazena o Text, para nao causar o evento change a toa
T = .Text
[ô]Armazena o SelStart da Dir. para Esq., pois o alinhamento é esq.
i = Len(T) - .SelStart
[ô]Tira a virgula da var T
T = Replace(.Text, [Ô],[Ô], [Ô][Ô])
[ô]Acrescenta zeros
If Len(T) < 3 Then T = String(3 - Len(T), [Ô]0[Ô]) & T
[ô]Monta o nr separando as casas
T = Mid(T, 1, Len(T) - 2) & [Ô],[Ô] & Mid(T, Len(T) - 1)
[ô]Formata o nr para tirar os zeros a mais q podem ficar no começo
T = Format(T, [Ô]R$ #,##0.00[Ô])
[ô]Verifica se o valor do Text é <> da Var. T (para nao travar no evento Change)
If .Text <> T Then .Text = T
[ô]Como mudou o valor do TextBox, tem q voltar o SelStart ao q era antes
.SelStart = Len(T) - i
End With
End Sub


Public Sub ApenasNrs(ByRef KeyAscii As Integer)
Select Case KeyAscii
[ô]Se a tecla for numérica (0 - 9) ou o backspace (8)
Case Asc([Ô]0[Ô]) To Asc([Ô]9[Ô]), 8
[ô]Se não for numérica
Case Else
Beep [ô]Som de erro, nao é necessário
KeyAscii = 0 [ô]Cancela a entrada
End Select
End Sub


Public Sub SelTudo(ByVal Controle As TextBox)
[ô]Posiciona o cursor no começo
Controle.SelStart = 0
[ô]Seleciona todo o TextBox
Controle.SelLength = Len(Controle.Text)
End Sub


agora no form cole

Private Sub Text1_Change()
MascMoeda Text1 [ô]Para criar a máscara de moeda
End Sub


Private Sub Text1_GotFocus()
SelTudo Text1 [ô]Para selecionar todo TextBox
End Sub


Private Sub Text1_KeyPress(KeyAscii As Integer)
ApenasNrs KeyAscii [ô]Para aceitar apenas nrs
End Sub


e verá o resultado formidavel desta função

um abraço

GNCNET 23/08/2011 12:33:50
#382319
Em VB use o componente maskedbox
HENRYMARQUES 23/08/2011 19:37:40
#382364
Tentei fazer o que o amigo Marcelo-treze me descreveu mas não funcionou. dá um erro quando digito qualquer coisa.
SISSO775 02/09/2011 00:36:32
#383152
Private Sub Text1_LostFocus( )
Text1.Text = Format(Text1.Text, [Ô]currency[Ô])
End Sub
Tópico encerrado , respostas não são mais permitidas