DUVIDA COM EXCEL E MACROS

WMVN 04/03/2011 16:00:25
#367266
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!!!
MSMJUDAS 04/03/2011 16:22:59
#367267
Já tentou criar os textbox como array? Tipo:

TxtCampo(0).Text
TxtCampo(1).Text
TxtCampo(2).Text
WMVN 04/03/2011 16:29:37
#367269
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.
MITSUEDA 04/03/2011 17:30:42
#367279
Resposta escolhida
Segue arquivo exemplo.

Tem que usar classes.

Abraço
WMVN 05/03/2011 18:42:49
#367343
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