Páginas

sexta-feira, 3 de dezembro de 2010

Criando Formulários Dinâmicos

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:

Ellison disse...

Preciso de uma ajuda. Como que eu consigo ver o valor preenchido na Textbox?

Postar um comentário

Related Posts Plugin for WordPress, Blogger...