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.
1 comentários:
Preciso de uma ajuda. Como que eu consigo ver o valor preenchido na Textbox?
Postar um comentário