Notifications
Clear all

Evento KeyPress em Modulo

5 Posts
4 Usuários
0 Reactions
1,232 Visualizações
(@redigo)
Posts: 0
New Member
Topic starter
 

Boa Tarde

o meu trabalho exige a inserção de muitos dados em planilha, utilizo Userform com muitas Textbox,
e sempre faço aprimoramento no projeto

minha textbox de valor utilizo este codigo
'COLOCAR TXT EM FORMATO DE MOEDA "R$ 0,00"
'COMANDO ATIVADO DEPOIS DE SAIR DA TXT
Private Sub Txt_VALOR_AfterUpdate()
Txt_VALOR.Text = Format(Txt_VALOR.Text, "Currency")
End Sub

'LISTAGEM DE CARACTER´s PERMITIDO SER DIGITADA NA TXT
'COMANDO DE INSERÇÃO DARANTE O PREENCHIMENTO DA TXT
Private Sub Txt_VALOR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 44, 48 To 57
'48 To 57 = CARACTERS NUMERICOS
'44 = VIRGULA

Case Else
KeyAscii = 0
'TRAVADO TODO O RESTO DE CARACTERS
End Select
End Sub

Private Sub Txt_VALOR_Change()
'VAI INSERIR DADOS AO MESMO MOMENTO QUE DIGITA DA TXT, INSERÇÃO NA PLANILHA SELECIONADA E ATIVA
Sheets(ThisWorkbook.ActiveSheet.Name).Range("A1").Value = CCur(Txt_VALOR.Value)

End Sub

e em todas as text vou ter que digitar isso e editar com os nome de referencia das text

alguem pode me ajudar como por isso em um modulo, e chamar na text, assim quando for editar eu edito apenas aqui

alguem pode me ajudar com isso ?

 
Postado : 21/06/2015 11:25 am
(@adgere)
Posts: 0
New Member
 

Private Sub txt_Valor_AfterUpdate()

txt_Valor.Text = Módulo.Vr(txt_Valor.Text)

End Sub

Private Sub txt_Valor_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = Módulo.Caract(Val(KeyAscii))

End Sub

'------------------------------ MÓDULO
Function Vr(Valor As String) As String

Vr = Format(Valor, "Currency")

End Function

Function Caract(KeyAs As Integer) As Integer

Select Case KeyAs
Case 44, 48 To 57
'48 To 57 = CARACTERS NUMERICOS
'44 = VIRGULA
Caract = KeyAs
Case Else
Caract = 0
'TRAVADO TODO O RESTO DE CARACTERS
End Select

End Function

 
Postado : 21/06/2015 11:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Você pode estar utilizando o manipulador de eventos WithEvents e definir a ação para todos TextBox independente dos nomes e sem precisar digitar nada deixando em um modulo de Classe, de uma olhada no link abaixo onde cheguei a montar um modelo, foi para uma situação diferente, mas segue o mesmo principio.

Macro para tratar o campo cep (AJUDA)
http://www.tomasvasquez.com.br/forum/vi ... YgdXxZtMol

Qualquer duvida retorne.

 
Postado : 22/06/2015 12:25 pm
(@redigo)
Posts: 0
New Member
Topic starter
 

Mauro Coutinho !!!

o esquema que você montou é quase que exatamente o que preciso

as plan que faço para meu trabalho, algumas preciso de varios formularios em uma so, para automatizar e ganhar tempos em inserir os dados nela
Utilizo textbox de Texto, CNPJ, Inscr., CPF, RG, CEP, Valor de moeda, etc, e muitas textbox de telefones

o que preciso é tipo, criar uma rotina, configurando o formato que quero cada uma dessas em um modulo de alguma forma, e no formulario, eu chamar essa rotina,
assim ganhando tempo tambem de nao precisar ficar digitando novamente toda a rotina, as vez uma um detalhe de alguma rotina, nao precisar novamente buscar uma por uma e editar

o modelo que o você apresentou, é fazer com que todas as textbos recebam a mesma rotina
quero separar nesse seu modelo, cada textbox receber rotinas diferente, tipo essas que expecifiquei

tem como isso ?

 
Postado : 30/06/2015 10:27 am
(@issamu)
Posts: 0
New Member
 

Olá!
Veja se o modelo de código abaixo atende a sua necessidade:

Option Explicit
Dim KeyA As String
Dim sAddress As String

Private Sub Txt_VALOR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyA = KeyAscii
digitos_Permitidos
KeyAscii = KeyA

End Sub

Private Sub Txt_VALOR_AfterUpdate()
Digitação_Formato
End Sub

Private Sub Txt_VALOR_Change()
sAddress = "A1"
Digitação_Planilha
End Sub

Private Sub digitos_Permitidos()

Select Case KeyA
Case 44
On Error GoTo nextcase
If WorksheetFunction.Find(",", Txt_VALOR.Text, 1) > 1 Then
KeyA = 0
End If
nextcase:
Case 48 To 57
'48 To 57 = CARACTERS NUMERICOS
'44 = VIRGULA

Case Else
KeyA = 0
'TRAVADO TODO O RESTO DE CARACTERS
End Select

End Sub

Private Sub Digitação_Formato()
Me.ActiveControl.Text = Format(Me.ActiveControl.Text, "Currency")
End Sub

Private Sub Digitação_Planilha()
'VAI INSERIR DADOS AO MESMO MOMENTO QUE DIGITA DA TXT, INSERÇÃO NA PLANILHA SELECIONADA E ATIVA
ThisWorkbook.ActiveSheet.Range(sAddress).Value = CCur(Me.ActiveControl.Text)
End Sub

Para o Evento AfterUpdate é só chamar o procedimento.
Para o Evento KeyPress é necessário jogar a variável KeyPress em outra variável string para então chamar o procedimento e depois fazer o inverso.
Para o Evento Change é necessária dizer a célula de destino.
Deixe tudo no mesmo módulo.
Não sei se é a melhor maneira, mas em meus testes funcionou. Eu ainda implementei uma melhoria no seu código do Keypress para não permitir inserir duas vírgulas.
Abraços!

 
Postado : 01/07/2015 8:15 am