Ir para conteúdo
Fórum Script Brasil
  • 0

NumPad não funciona - TextBox Moeda


MColucci

Pergunta

Tenho uma TextBox para digitar valores em R$

Achei esse código na internet que funcionou muito bem para a função que eu queria, mas não está aceitando digitar números do NumPad, só aceita os números que ficam em cima das letras no teclado. Se eu incluo exceção para os códigos de teclas do NumPad ele buga e não funciona direito.

Como posso consertar isso?

Private Sub txtValorCP_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Dim zTemp As String

    txtValorCP.TextAlign = fmTextAlignRight
    If IsNumeric(Chr(KeyCode)) Or KeyCode = 8 Then
     If txtValorCP.Text <> "" Then
      zTemp = txtValorCP.Text & IIf(KeyCode <> 8, Chr(KeyCode), "")
      zTemp = Right(zTemp, Len(zTemp) - 2)
      zTemp = Replace(zTemp, ".", "")
      zTemp = Replace(zTemp, ",", "")
       If KeyCode = 8 Then
        If Len(zTemp) > 3 Then
         zTemp = Left(zTemp, Len(zTemp) - 1)
        Else
         zTemp = "0" & Left(zTemp, Len(zTemp) - 1)
        End If
       End If
      zTemp = Left(zTemp, Len(zTemp) - 2) & "." & Right(zTemp, 2)
     Else
      zTemp = "0.0" & IIf(KeyCode <> 8, Chr(KeyCode), "0")
     End If
     txtValorCP.Text = Format(Val(zTemp), "R$ ###,##0.00")
     KeyCode = 0
    Else
     If KeyCode <> 13 And KeyCode <> 9 And KeyCode <> 40 And KeyCode <> 38 Then KeyCode = 0
    End If
    
End Sub
Editado por MColucci
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde. @MColucci.

Private Sub txtValorCP_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Dim zTemp As String

    txtValorCP.TextAlign = fmTextAlignRight
    If IsNumeric(Chr(KeyCode)) Or KeyCode = 8 Or (KeyCode >= 96 And KeyCode <= 105) Then
     If txtValorCP.Text <> "" Then
      zTemp = txtValorCP.Text & IIf(KeyCode <> 8, Chr(IIf(KeyCode >= 96 And KeyCode <= 105, KeyCode - 48, KeyCode)), "")
      zTemp = Right(zTemp, Len(zTemp) - 2)
      zTemp = Replace(zTemp, ".", "")
      zTemp = Replace(zTemp, ",", "")
       If KeyCode = 8 Then
        If Len(zTemp) > 3 Then
         zTemp = Left(zTemp, Len(zTemp) - 1)
        Else
         zTemp = "0" & Left(zTemp, Len(zTemp) - 1)
        End If
       End If
      zTemp = Left(zTemp, Len(zTemp) - 2) & "." & Right(zTemp, 2)
     Else
      zTemp = "0.0" & IIf(KeyCode <> 8, Chr(IIf(KeyCode >= 96 And KeyCode <= 105, KeyCode - 48, KeyCode)), "0")
     End If
     txtValorCP.Text = Format(Val(zTemp), "R$ ###,##0.00")
     KeyCode = 0
    Else
     If KeyCode <> 13 And KeyCode <> 9 And KeyCode <> 40 And KeyCode <> 38 Then KeyCode = 0
    End If
    
End Sub

Seu código foi adaptado coloca uma interpretação dos 'keycode' 96 ao 105 que são os números do teclado numério.

olha se funciona no seu código.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...