none
Como gerar labels e textbox em um form a partir de uma lista em uma planilha?

    Question

  • Olá,
        Em minha pasta de trabalho, cada planilha se refere a um nome (ex: cidade) e, dentro das planilhas, há propriedades sobre esse nome. Como um banco de dados em excel, de fácil entendimento pelos usuários).
       Eu criei um formulário em que posso inserir novas planilhas com novas propriedades usando "labels" e "textbox" fixos. (Uma nova planilha é criada com o nome escolhido e algumas propriedades digitadas em textbox são coladas na nova planilha).
       Acontece que pediram para eu fazer mais do que isso: preciso de um formulário que seja capaz de inserir não só novos nomes (planilhas), mas novas propriedades, isto é, quando o usuário inserir uma nova propriedade, uma nova linha aparece em cada planilha tratando de tal propriedade.
       Problema: quando eu quiser inserir um novo cadastro, essa nova propriedade não estará lá no form, pois os labels e textbox são fixos. Assim, preciso de um form em que labels e textbox variem de acordo como que estiver em uma lista (sem saber quantas palavras há nessa lista) e, finalmente, ao apertar enter, o que foi digitado nos textbos aparecerão na nova planilha, à frente dos nomes das propriedades.
    Saturday, May 14, 2011 5:57 PM

Answers

  • Olá Marlon,

    veja este exemplo de como criar um label em tempo de execução e crie sua lógica:

    Private Sub UserForm_Click()
    Dim ctl As Control
    Set ctl = Me.Controls.Add("Forms.Label.1", "lblLabel1", True)
    ctl.Caption = "Teste"
    ctl.Left = 20
    ctl.Top = 30
    End Sub
    

    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br - Access FAQ: www.accessfaq.com.br
    • Proposed as answer by BrunodeSousa Monday, May 16, 2011 12:24 AM
    • Marked as answer by Marlon Saveri Saturday, May 21, 2011 3:46 PM
    Sunday, May 15, 2011 1:02 AM

  • Private
    Sub UserForm_Click() Dim ctl As Control Set ctl = Me.MultiPage1.Pages(0).Controls.Add("Forms.Image.1", "Image1", True) ctl.Left = 20 ctl.Top = 30 End Sub

    Para que o exemplo funcione, crie num formulário um MultiPage chamado MultiPage1. Pages(0) é a primeira página. Pages(1) é a segunda e assim por diante.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marked as answer by Marlon Saveri Saturday, May 21, 2011 3:46 PM
    Friday, May 20, 2011 2:07 PM

All replies

  • Olá Marlon,

    veja este exemplo de como criar um label em tempo de execução e crie sua lógica:

    Private Sub UserForm_Click()
    Dim ctl As Control
    Set ctl = Me.Controls.Add("Forms.Label.1", "lblLabel1", True)
    ctl.Caption = "Teste"
    ctl.Left = 20
    ctl.Top = 30
    End Sub
    

    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br - Access FAQ: www.accessfaq.com.br
    • Proposed as answer by BrunodeSousa Monday, May 16, 2011 12:24 AM
    • Marked as answer by Marlon Saveri Saturday, May 21, 2011 3:46 PM
    Sunday, May 15, 2011 1:02 AM
  • Muito obrigado, Luiz Cláudio; no entanto acredito que o uso de um listbox (que eu desconhecia) resolverá o problema.

    Aproveitando esses novos controles (me.controls.add()), como fazemos se quisermos inserir uma nova página em um Multipage1?

    Assim, gostaria de inserir uma imagem em cada página, de acordo com o que for selecionado no listbox.

    Imagem é:

    Set novaimagem = Me.Controls.add("forms.image.1", "image" & i, True)

    Certo? Confesso que não entendi bem como funciona esse comando.

    Monday, May 16, 2011 5:55 PM

  • Private
    Sub UserForm_Click() Dim ctl As Control Set ctl = Me.MultiPage1.Pages(0).Controls.Add("Forms.Image.1", "Image1", True) ctl.Left = 20 ctl.Top = 30 End Sub

    Para que o exemplo funcione, crie num formulário um MultiPage chamado MultiPage1. Pages(0) é a primeira página. Pages(1) é a segunda e assim por diante.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marked as answer by Marlon Saveri Saturday, May 21, 2011 3:46 PM
    Friday, May 20, 2011 2:07 PM