Dependendo da situação, precisamos criar formulários dinamicamente no VBA. Nestas situações , muitas vezes, precisamos validar as informações inseridas,mas como fazer isto se os controles não existem? Uma forma seria percorrer todos os controles do formulário verificando o seu valor e o validando.
Uma outra maneira é a que descrevo a seguir, criando eventos para os controles criados dinamicamente.
Para a criação deste projeto, precisaremos:
1 UserForm (deixarei com o nome padrão de UserForm1)
1 Módulo de Classe (Também com o nome padrão de Classe1)
No UserForm crie um textbox (TextBox1)
No formulário coloque o seguinte código
'Array de controle da nova classe
Private MyCtlArray() As New Classe1
Private Sub UserForm_Initialize()
'Criando o formulário Dinâmico
Dim L As Integer, T As Integer
Dim ctl As Control
T = 150
L = 5
j = 0
For i = j + 97 To 122
'adicionando controles para o teclado
Set ctl = Me.Controls.Add("Forms.CommandButton.1", "Ctl" & i)
ctl.Caption = Chr(i)
ctl.Top = T
ctl.Left = L
ctl.Width = 20
ctl.Height = 20
ReDim Preserve MyCtlArray(j)
Set MyCtlArray(j).MyCtl = ctl
j = j + 1
L = L + 22
If (L + 22) > Me.Width Then
T = T + 22
L = 5
End If
Next i
'Criando o cotrole de espaço
Set ctl = Me.Controls.Add("Forms.CommandButton.1", "Ctl" & i)
ctl.Caption = Chr(160)
ctl.Top = T
ctl.Left = L
ctl.Width = 120
ctl.Height = 20
ctl.Caption = "ESPAÇO"
j = j + 1
ReDim Preserve MyCtlArray(j)
Set MyCtlArray(j).MyCtl = ctl
j = j + 1
'Adicionando o OK
Set ctl = Me.Controls.Add("Forms.CommandButton.1", "Ctl" & i)
ctl.Caption = Chr(160)
ctl.Top = T
ctl.Left = L + 125
ctl.Width = 20
ctl.Height = 20
ctl.Caption = "OK"
ReDim Preserve MyCtlArray(j)
Set MyCtlArray(j).MyCtl = ctl
End Sub
No módulo de Classe o seguinte código
Public WithEvents MyCtl As MSForms.CommandButton
Private Sub MyCtl_Click()
If MyCtl.Caption = "ESPAÇO" Then
UserForm1.TextBox1.Text = UserForm1.TextBox1.Text & Chr(160)
ElseIf MyCtl.Caption = "OK" Then
ActiveSheet.[A1] = UserForm1.TextBox1.Text
Else
UserForm1.TextBox1.Text = UserForm1.TextBox1.Text & MyCtl.Caption
End If
End Sub
Com este código será criado um teclado virtual, conforme a seguinte imagem, para exibi-lo execute o formulário.
Perceba que cada clique no teclado é reproduzido no TextBox como um teclado.
Em breve disponibilizarei aqui o arquivo com este código.
14:48
Bruno Leite


1 comentários:
Preciso de uma ajuda. Como que eu consigo ver o valor preenchido na Textbox?
Postar um comentário