Notifications
Clear all

Evento KeyPress em Modulo

5 Posts
4 Usuários
0 Reactions
1,259 Visualizações
(@redigo)
Posts: 2
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: 76
Trusted 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
Fernando Fernandes
(@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.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/06/2015 12:25 pm
(@redigo)
Posts: 2
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
(@issamu)
Posts: 605
Honorable 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!

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 01/07/2015 8:15 am