Ir ao conteúdo
  • Cadastre-se
Patricia Senatore Ribeiro

Excel RESOLVIDO Excel, VBA, Como executar um mesmo comando em todas as TextBox

Recommended Posts

Bom dia, mais uma vez venho pedir ajuda. Tenho uma UserForm onde insiro datas nas TextBox1 e nelas aparecem as barras automaticamente, para isso estou usando este código:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)


    If KeyAscii < 48 Or KeyAscii > 57 Then 'Não permite inserir letras
        KeyAscii = 0
    Else
        If Len(TextBox1) = 2 Then  'Len retorna a quantidade de caracteres
            TextBox1 = TextBox1 & "/"
        End If
        If Len(TextBox1) = 5 Then
            TextBox1 = TextBox1 & "/"
        End If
    End If

End Sub

 

O problema é que eu tenho 12 TextBox então teria que inserir uma sub dessa para cada um. Tem algum jeito de eu fazer somente isso somente 1 vez para funcionar em todas as TextBox?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se quer fazer isso dinamicamente falando, ou seja se de 12, aumentar a quantidade de textbox para 24, sem precisar mexer no código, segue sugestão:

 

Crie um modulo de classe, e renomeie como SuaClasse e cole o codigo abaixo:

Option Explicit

Public WithEvents TextGroup As MSForms.TextBox

Private Sub TextGroup_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    
            TextGroup.MaxLength = 10 ' limita a qtd max. de caracteres => 01/01/2018

    If KeyAscii < 48 Or KeyAscii > 57 Then 'Não permite inserir letras
    KeyAscii = 0
Else
    If Len(TextGroup) = 2 Then  'Len retorna a quantidade de caracteres
    TextGroup = TextGroup & "/"
End If
If Len(TextGroup) = 5 Then
    TextGroup = TextGroup & "/"
End If
End If

End Sub

E no seu userform que contem as textbox (data), acrescente o código abaixo:

 

Option Explicit

Public WithEvents TextGroup As MSForms.TextBox

Dim TextBoxes() As New SuaClasse

Private Sub UserForm_Initialize()
    
    Call CarregaSuaClasseTextbox ' Chama a sub que configura os textbox, adicionando a classe
    
End Sub

Sub CarregaSuaClasseTextbox()
    Dim ctl As MSForms.Control
    Dim i!
    
    i = 1
    
    For Each ctl In Me.Controls
        
        If TypeName(ctl) = "TextBox" Then
            ReDim Preserve TextBoxes(1 To i)
            Set TextBoxes(i).TextGroup = ctl
            i = i + 1
        End If
        
    Next ctl    

End Sub

 

* Desta forma em todos os textbox aparecerão as barras automaticamente, ao digitar os numeros

 

Uma outra opção seria, colocar um form/calendário, que abre como um pop-up para o usuário clicar para inserir uma data. Desta forma evitará erros na formatação ou data inválida do tipo: 30/02/2018.

 

 

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×