none
Inserir TextBox dinamicamente em Userform e Salvar seu conteúdo RRS feed

  • Pergunta

  • Boa tarde a todos.
    Após algumas pesquisas no fórum consegui um ótimo material para dar andamento em um projeto que tenho, porém algumas dúvidas ficaram e meu pequeno conhecimento em VBA não tem me ajudado a resolver.

    Neste tópico eu consegui alguns dados que preciso - viewtopic.php?f=20&t=3901&start=10&hilit=inserir+textbox+dinamicamente+vba

    Porém as dúvidas que fiquei são:
    1º - Como faço para que cada clique no botão ImageAddTextBox, adicione um novo TextBox em meu UserForm?
    2ª - Como faço para que estes novos elementos sejam salvos em meu UserForm, bem como as informações que nele serão inseridas?

    Eu utilizo o modelo de aplicativo disponibilizado pelo Tomas aqui no fórum.

    Abaixo seguem os códigos que estou usando.

    'Instrução para inserção de novos TextBox
    Private Sub ImageAddTextBox_Click()

    'declara no novo controle
    Dim novoTextBox As Control
    'instancia o novo controle do tipo textbox e o adiciona ao UserForm
    Set novoTextBox = Frame6.Controls.Add("Forms.TextBox.1", "NovoTextBox", True)
    'seta algumas propriedades
    With novoTextBox
    .Width = 546
    .Height = 66
    .Top = 12
    .Left = 12
    .ZOrder (0)
    .SpecialEffect = 3
    .Text = Now()
    .MultiLine = True
    .EnterKeyBehavior = True
    .ScrollBars = 2

    End With
    End Sub
    '=====================================================================================

    Eu vou deixar um link do projeto caso alguém puder me auxiliar.
    Obrigado e já agradeço de antemão todos os apoios que me foram dados aqui.

    Abraço.

    Inserir Textbox em UserForm Dinamicamente



    segunda-feira, 29 de agosto de 2016 21:34

Respostas

  • Valderei, boa tarde.

    Tive alguns problemas para abrir sua planilha.

    Sendo assim fiz um código mais genérico para você adaptar na sua planilha.

    Neste código você consegue adicionar e remover TextBoxes e, ainda, armazenar seus valores em células no Excel.

    Segue link:

    https://www.dropbox.com/s/ont45gx0us2vq26/VBA_Adicionar%20TextBox%20dinamicamente.xlsm?dl=0

    Acredito que seja isso que você precise. Qualquer coisa é só falar!

    Abraços

    • Sugerido como Resposta Gustavo S. Gomes sábado, 10 de setembro de 2016 18:41
    • Marcado como Resposta Valderei Antunes terça-feira, 13 de setembro de 2016 12:28
    sábado, 10 de setembro de 2016 18:41
  • Valderei, boa noite.

    Primeiramente desculpa pela demora em respondê-lo.

    Vão aí os passos para correção do código:

    1. Você alterou o nome no lugar correto. Só peço que ao invés de Prontuário (com acento) você use Prontuario (sem acento)
    2. Altere o nome daquele primeiro textbox que abre junto com a userform para Prontuario1
    3. Nessa célula que ocorreu o erro troque o valor 7 por 10.

    Para entender essa linha que deu erro:

    Nessa linha eu pego o valor daquela textbox. Como o nome da textbox será Prontuario3, por exemplo, uso a função right para pegar o último caracter no nome do textbox. O valor 7 é porque a palavra "textbox" tem 7 letras, já agora mudaremos para 10 porque a palavra "Prontuario" tem 10 letras.

    Esse número que retiro do textbox uso apenas para referenciar em qual célula irei inserir o valor presente no textbox, faço isso usando o método Cells.

    Agora, para deixar o código certinho, não esquece de alterar essa parte do código também. É a parte associada ao botão de remover as textboxes. Ele tem que ficar conforme mostrado abaixo.

    SOBRE CHAMAR OS VALORES SALVOS NA PLANILHA:

    Isso mesmo, você usará o método initialize.

    Dentro do método você terá que contar quantos prontuários já foram cadastrados para aquele cliente (pode ser através de um While que irá percorrer as células que constam os prontuários).

    Após a contagem você deverá fazer um For para inserir as textboxes e puxar os valores da planilha.

    Segue link de uma planilha com todas as alterações que pediu e também puxando os prontuários cadastrados na primeira linha.

    https://www.dropbox.com/s/uao9pbkpa4ci6aa/VBA_Adicionar%20TextBox%20dinamicamente_R01.xlsm?dl=0

    Qualquer dúvida é só falar. Espero que resolva!

    segunda-feira, 26 de setembro de 2016 21:45

Todas as Respostas

  • Valderei, boa tarde.

    Poderia postar o projeto de novo? Gostaria de olhar direitinho o que você deseja para tentar te ajudar.

    Abraços!

    quarta-feira, 7 de setembro de 2016 17:28
  • Olá Gustavo.

    Estou recolocando o arquivo novamente.

    Obrigado pela disposição em ajudar.

    https://www.dropbox.com/s/ds1hnvnj4mltkkk/ConsultControl.xlsm?dl=0


    • Editado Valderei Antunes quinta-feira, 8 de setembro de 2016 11:47 Reupar Arquivo
    quinta-feira, 8 de setembro de 2016 11:46
  • Valderei, boa tarde.

    Tive alguns problemas para abrir sua planilha.

    Sendo assim fiz um código mais genérico para você adaptar na sua planilha.

    Neste código você consegue adicionar e remover TextBoxes e, ainda, armazenar seus valores em células no Excel.

    Segue link:

    https://www.dropbox.com/s/ont45gx0us2vq26/VBA_Adicionar%20TextBox%20dinamicamente.xlsm?dl=0

    Acredito que seja isso que você precise. Qualquer coisa é só falar!

    Abraços

    • Sugerido como Resposta Gustavo S. Gomes sábado, 10 de setembro de 2016 18:41
    • Marcado como Resposta Valderei Antunes terça-feira, 13 de setembro de 2016 12:28
    sábado, 10 de setembro de 2016 18:41
  • Olá Gustavo.

    Obrigado pelo seu retorno.

    Vou conferir os seus códigos e as ações que estão fazendo e depois te retorno.

    Abraço.

    terça-feira, 13 de setembro de 2016 12:27
  • Por nada Valderei!

    E o código? Conseguiu te atender?

    Abraços

    segunda-feira, 19 de setembro de 2016 04:42
  • Olá Gustavo.

    Então, estou quebrando a cabeça com seu código, pois ele faz aquilo que eu pretendia (criar um textbox a cada clique no botão), porém, não consigo alterar o nome dele de "TextBox..."

    Alterei o nome para "Prontuário", porém a linha de armazenamento fica dando erro e só aceita o nome como sendo "TextBox".

    A outra dúvida é de como chamo os valores que estão salvos na planilha quando o UserForm for iniciado, imagino que seja no Evento Initialize do formulário, mas não tenho ideia de como fazer.

    Abaixo a linha de código original:

    Seu código original

    Linha com o nome prontuário:

    Imagem do erro que ocorre quando o nome "Textbox" é alterado.

    Como não entendi a tua instrução:  Cells(1, Right(C.Name, Len(C.Name) - 7) + 0) = C.Value - não consegui resolver o problema.

    segunda-feira, 19 de setembro de 2016 17:31
  • Valderei, boa noite.

    Primeiramente desculpa pela demora em respondê-lo.

    Vão aí os passos para correção do código:

    1. Você alterou o nome no lugar correto. Só peço que ao invés de Prontuário (com acento) você use Prontuario (sem acento)
    2. Altere o nome daquele primeiro textbox que abre junto com a userform para Prontuario1
    3. Nessa célula que ocorreu o erro troque o valor 7 por 10.

    Para entender essa linha que deu erro:

    Nessa linha eu pego o valor daquela textbox. Como o nome da textbox será Prontuario3, por exemplo, uso a função right para pegar o último caracter no nome do textbox. O valor 7 é porque a palavra "textbox" tem 7 letras, já agora mudaremos para 10 porque a palavra "Prontuario" tem 10 letras.

    Esse número que retiro do textbox uso apenas para referenciar em qual célula irei inserir o valor presente no textbox, faço isso usando o método Cells.

    Agora, para deixar o código certinho, não esquece de alterar essa parte do código também. É a parte associada ao botão de remover as textboxes. Ele tem que ficar conforme mostrado abaixo.

    SOBRE CHAMAR OS VALORES SALVOS NA PLANILHA:

    Isso mesmo, você usará o método initialize.

    Dentro do método você terá que contar quantos prontuários já foram cadastrados para aquele cliente (pode ser através de um While que irá percorrer as células que constam os prontuários).

    Após a contagem você deverá fazer um For para inserir as textboxes e puxar os valores da planilha.

    Segue link de uma planilha com todas as alterações que pediu e também puxando os prontuários cadastrados na primeira linha.

    https://www.dropbox.com/s/uao9pbkpa4ci6aa/VBA_Adicionar%20TextBox%20dinamicamente_R01.xlsm?dl=0

    Qualquer dúvida é só falar. Espero que resolva!

    segunda-feira, 26 de setembro de 2016 21:45
  • Olá Gustavo, agora foi minha vez de ficar fora um bom tempo.

    Agradeço muito sua ajuda, vejo que ainda tenho uma longa caminhada no aprendizado de VBA.

    Aparentemente seus códigos são exatamente o que preciso, creio que os ajustes agora sejam mais fáceis.

    Novamente, muito obrigado por tirar um tempo seu para nos ajudar.

    Abraço e qualquer coisa eu te dou um grito.

    domingo, 7 de maio de 2017 14:08
  • Boa tarde Gustavo, tudo bem?

    O tópico é antigo, mas consegui resolver muitas coisas com a sua ajuda.

    Mas tem um detalhe que estou precisando resolver e não encontrei uma lógica para fazer.

    Para cada nova TextBox, preciso restringir a digitação de números apenas.

    Como eu poderia fazer isso?

    Obrigado!

    sábado, 1 de janeiro de 2022 18:17