DUVIDA COM EXCEL E MACROS
Amigos, tenho um formulário feito com VBA no Excel com um botão de comando. Quando clico no botão de comando, acrescento 3 caixas de texto virtuais em tempo de execução. Preciso limitar a digitação dos usuários, nessas caixas de texto, de maneira que seja permitido somente números e o backspace. Se fossem caixas de texto elaboradas em tempo de design, seria fácil! Bastaria acessar os eventos KeyPress das caixas de texto e colocar o código para bloquear os caracteres não permitidos. Todavia, as caixas de texto precisam ser virtuais pois elas serão criadas em tempo de execução e de acordo com a quantidade que o usuário desejar prestar informações (limitadas ao máximo de 100 caixas de texto). [txt-color=#e80000]A PERGUNTA é: COMO POSSO ACESSAR O EVENTO KEYPRESS DAS CAIXAS DE TEXTO VIRTUAL EM TEMPO DE EXECUÇÃO???[/txt-color]
Estou anexando o arquivo para ajudar.Segue, abaixo, o código que usei nesse pequeno exemplo comentado acima:
[ô]Declaração da variável (com o comando WithEvents)OBJETO no campo de Decalarações fo Form
Dim WithEvents CaixaDeTexto As MSForms.TextBox
[ô]Código, dentro do evento click do botão de comando, para criar _
as caixas de texto virtuais
Private Sub CommandButton1_Click()
Topinicial = 20
For i = 1 To 3
Set CaixaDeTexto = UserForm1.Controls.Add([Ô]Forms.TextBox.1[Ô], [Ô]CaixaDeTexto[Ô] & i)
With CaixaDeTexto
.Height = 20
.Visible = True
.Width = 105
.Top = Topinicial
.Left = 30
.TabIndex = 0
.SetFocus
End With
Topinicial = CaixaDeTexto.Top + 40
Next
End Sub
[ô]Código usado no evento KeyPress do objeto criado
[ô]ESSE CÓDIGO NÃO DEU CERTO POIS SÓ BLOQUEIA A ÚLTIMA CAIXA DE TEXTO CRIADA
Private Sub CaixaDeTexto_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
[ô]Verifica qual é o caracter digitado na caixa de texto virtual. Aceita somente _
números e o backspace
If Not (KeyAscii >= 48 And KeyAscii <= 57 Or KeyAscii = 8) Then
KeyAscii = 0
End If
End Sub
ME AJUDEM PELO AMOR DE DEUS! PRECISO RESOLVER ISSO URGENTE!!!
Estou anexando o arquivo para ajudar.Segue, abaixo, o código que usei nesse pequeno exemplo comentado acima:
[ô]Declaração da variável (com o comando WithEvents)OBJETO no campo de Decalarações fo Form
Dim WithEvents CaixaDeTexto As MSForms.TextBox
[ô]Código, dentro do evento click do botão de comando, para criar _
as caixas de texto virtuais
Private Sub CommandButton1_Click()
Topinicial = 20
For i = 1 To 3
Set CaixaDeTexto = UserForm1.Controls.Add([Ô]Forms.TextBox.1[Ô], [Ô]CaixaDeTexto[Ô] & i)
With CaixaDeTexto
.Height = 20
.Visible = True
.Width = 105
.Top = Topinicial
.Left = 30
.TabIndex = 0
.SetFocus
End With
Topinicial = CaixaDeTexto.Top + 40
Next
End Sub
[ô]Código usado no evento KeyPress do objeto criado
[ô]ESSE CÓDIGO NÃO DEU CERTO POIS SÓ BLOQUEIA A ÚLTIMA CAIXA DE TEXTO CRIADA
Private Sub CaixaDeTexto_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
[ô]Verifica qual é o caracter digitado na caixa de texto virtual. Aceita somente _
números e o backspace
If Not (KeyAscii >= 48 And KeyAscii <= 57 Or KeyAscii = 8) Then
KeyAscii = 0
End If
End Sub
ME AJUDEM PELO AMOR DE DEUS! PRECISO RESOLVER ISSO URGENTE!!!
Já tentou criar os textbox como array? Tipo:
TxtCampo(0).Text
TxtCampo(1).Text
TxtCampo(2).Text
TxtCampo(0).Text
TxtCampo(1).Text
TxtCampo(2).Text
Isso foi a primeira coisa que tentei. Todavia, só se pode criar objetos virtuais utilizando o comando WithEvents. Com esse comando não é permitida a criação de Array.
Valeu, MSMJUDAS. Obrigado.
Valeu, MSMJUDAS. Obrigado.
Segue arquivo exemplo.
Tem que usar classes.
Abraço
Tem que usar classes.
Abraço
Cara, MITSUEDA!!! Fantástico!!! Era exatamente isso que eu estava querendo!! Muito obrigado, meu irmão. Valeu mesmo.
Tópico encerrado , respostas não são mais permitidas