Notifications
Clear all

Criar Variáveis em um Loop - VBA

2 Posts
1 Usuários
0 Reactions
1,215 Visualizações
(@heittor)
Posts: 13
Active Member
Topic starter
 

Olá a todos!

Bem, eu sou iniciante na parte de VBA e a minha dúvida é a seguinte:

Eu tenho um userform com um Textbox tbxQtdeQuest de controle de quantidade e um botão Ok btnOk. Após o usuário inserir a quantidade desejada e clicar no botão Ok, o programa deverá criar a quantidade de Labels e Textbox desejados pelo usuário. (Ex.: Quantidade 5: Deverá criar 5 labels e 5 TextBoxes).

O problema é que eu preciso criar os labels e combobox dinamicamente e a única solução que eu vejo que talvez seja possível é criar os labels e textbox através de um Array, ou seja, criar um loop e dentro do loop criar os objetos.

Abaixo segue o código:

Private Sub btnOk_Click()
  
  ' Cria a variável de controle do loop
  Dim i As Integer
  
  ' Cria a variável de controle da quantidade
  Dim vQtde As Integer
     
  ' Verifica se foi digitada uma quantidade no Textbox Quantidade
  If tbxQtdeQuest.Value = "" Then
    MsgBox ("O campo Quantidade de questões é obrigatório!")
    tbxQtdeQuest.SetFocus
    Exit Sub
  End If
  
  ' Pega o valor digitado no campo Quantidade
  vQtde = tbxQtdeQuest.Value
    
  ' Cria os campos de acordo com a quantidade no campo quantidade
  For i = 1 To vQtde
  
    ' Adicionando um novo controle
    Dim lblTeste As MSForms.Label ' *Preciso de um modo para que possa criar mais de um label aqui de acordo com o campo Qtde*
    
    ' Seta o label Teste
    Set lblTeste = Me.Controls.Add("Forms.Label.1", lbl1 & i, True)
  
    ' Cria o nome do Label e adiciona + i
    lblTeste.Name = "lblTeste" & i
    
    ' Propriedades do Label
    lblTeste.Width = 336
    lblTeste.Height = 12
    lblTeste.Left = 6
   
    ' Aumentar a altura de acordo com o contador
    lblTeste.Top = 10 + 20 * i
       
    lblTeste.Caption = "Questão " & i
  
    Set lblTeste = Nothing
    
  Next i
  
End Sub
 
Postado : 04/02/2015 8:41 am
(@heittor)
Posts: 13
Active Member
Topic starter
 

Pessoal, agradeço a todos, ams já encontrei a solução.

Criei um "array" de objetos e dentro do for atualizei os labels e textbox. No mais, agora só falta eu posicionar os elementos na tela de maneira correta. Segue o código abaixo pra quem estiver com o mesmo problema:

Private Sub btnOk_Click()
  
  ' Cria a variável de controle do loop
  Dim i As Integer
  
  ' Cria a variável de controle da quantidade
  Dim vQtde As Integer
  
  ' Cria um array de Labels
  Dim TLabell(1 To 10) As Control
  
  ' Controla o topo
  Dim intTopL, intTopT As Integer
     
  ' Cria o frame para questão
  Dim fraQuestao As MSForms.Frame
  
  ' Cria um array de Textbox
  Dim TTextbox(1 To 10) As Control
  
    ' Verifica se foi digitada uma quantidade no Textbox Quantidade
  If tbxQtdeQuest.Value = "" Then
    MsgBox ("O campo Quantidade de questões é obrigatório!")
    tbxQtdeQuest.SetFocus
    Exit Sub
  End If
  
  ' Cria o frame
  Set fraQuestao = Me.Controls.Add("Forms.Frame.1")
  
  ' Propriedades do frame
  fraQuestao.Top = 138
  fraQuestao.Left = 6
                 
  ' Pega o valor digitado no campo Quantidade
  vQtde = tbxQtdeQuest.Value
    
  ' Cria os campos de acordo com a quantidade no campo quantidade
  For i = 1 To vQtde
               
    ' Cria os labels de acordo com o índice
    Set TLabell(i) = fraQuestao.Controls.Add("Forms.Label.1", "lblQuestao" & i)
    
    ' Cria os textbos de acordo com o índice
    Set TTextbox(i) = fraQuestao.Controls.Add("Forms.Label.1", "tbxQuestao" & i)
    
    ' Propriedades do Label
    TLabell(i).Top = intTopL + 20
    TLabell(i).Left = 6
    TLabell(i).Caption = "Questão " & i
    
    ' Propriedades do Textbox
    
    
      
    intTopL = intTopL + 20
  Next i
  
End Sub
 
Postado : 04/02/2015 10:37 am