Substitua pela rotina abaixo e veja se é isto, pelo que vi o erro só se dá quando textbox está vázio, ou segurando precionado o BackSpace ou selecionando e Deletando todo o valor.
Private Sub Valor_Entrada_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Or KeyCode = 46 Then
Valor_Entrada.Text = Replace(Valor_Entrada.Text, ",", "")
Valor_Entrada.Text = Replace(Valor_Entrada.Text, ".", "")
If Len(Valor_Entrada.Text) > 3 Then
Valor_Entrada.Text = Mid(Valor_Entrada.Text, 1, Len(Valor_Entrada.Text) - 2) & "," & Mid(Valor_Entrada.Text, Len(Valor_Entrada.Text) - 1, 2)
Else
If Len(Valor_Entrada.Text) = 3 Then
Valor_Entrada.Text = Mid(Valor_Entrada, 1, 1) & "," & Mid(Valor_Entrada.Text, 2, 2)
Else
If Len(Valor_Entrada.Text) = 2 Then
Valor_Entrada.Text = "0," & Mid(Valor_Entrada.Text, 1, 2)
Else
If Len(Valor_Entrada.Text) = 0 Then
Valor_Entrada.Text = "0,00" & Mid(Valor_Entrada.Text, 1, 2)
Exit Sub
End If
End If
End If
End If
a = InStr(1, Valor_Entrada.Text, ",", vbTextCompare)
b = Mid(Valor_Entrada.Text, 1, a - 1)
For x = 1 To Len(b)
cont = cont + 1
c = Mid(b, Len(b) - x + 1, 1) & c
If cont = 3 Then
If Len(b) > 3 Then
c = "." & c
cont = 0
End If
End If
Next x
If Mid(c, 1, 1) = "." Then
c = Mid(c, 2, Len(c))
End If
Valor_Entrada.Text = c & Mid(Valor_Entrada.Text, Len(Valor_Entrada.Text) - 2, 3)
End If
End Sub
Faça os testes.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 18/06/2015 7:51 am