Manipulação de Formulários por Variáveis
Enviado: 01 Out 2020 às 15:00
por LeonardoFerrari
Bom dia/tarde/noite a todos.
Antes de tudo, agradeço pela atenção.
Minha dúvida seria em relação à manipulação de formulários no excel utilizando variáveis.
Estou trabalhando em uma aplicação em que possuo alguns formulários com nomes parecidos (como: UserFormR1 / UserFormR2 / UserFormR3) e hora preciso esconder alguns, hora preciso mostrar outros.
Sei que para mostrar e esconder é fácil, basta colocar o nome do formulário e em seguida ".show" ou ".hide"
Ex.: UserFormR1.show
Porém para fins de aplicação eu gostaria de lidar com o nome desses formulários utilizando variáveis, assim a variável teria o nome do formulário gravado e eu utilizaria o ".show" ou ".hide" direto na variável. É possível? Deixarei um exemplo abaixo:
Método atual:
UserFormR1.show
UserFormR2.show
UserFormR3.show
Método desejado: (algo parecido com isso)
Dim form as String
form = "UserFormR1"
form.show
(obs: tentei o método acima, porém não funcionou)
Agradeço desde já a quem puder ajudar.
Re: Manipulação de Formulários por Variáveis
Enviado: 01 Out 2020 às 17:28
por babdallas
Não entendi muito bem por qual motivo colocar o nome do userform em uma variável String e como isso poderia ajudar. Poderia explicar melhor qual a real intenção disso, por favor?
Manipulação de Formulários por Variáveis
Enviado: 01 Out 2020 às 19:51
por LeonardoFerrari
Olá, babdallas, tudo bem?
Então, basicamente, eu preciso lidar com muitos formulários (algo entre 13 formulários, porém a unica coisa que muda é o numero final dele, ex: UserForm1, UserForm2, UserForm3, UserForm4....) e sempre preciso abri-los em ordens e momentos diferentes.
Porém seguindo da forma convencional, eu teria que ter várias linhas, cada uma abrindo um dos formularios.
Agora vamos supor que eu faça isso, porém dentro de diversas planilhas:
Sub teste()
UserForm1.show
UserForm2.Show
UserForm3.Show
UserForm4.show
End Sub
Vamos supor que um belo dia eu decida troca o nome dos formulários para: UserFormA, UserFormB, UserFormC...
Eu teria que ir em cada uma das planilhas e alterar manualmente o nome de todos os Forms.
Não necessariamente eu preciso armazenar o nome dele dentro de uma string, mas preciso que seja numa variável que eu possa manipular.
Sei que posso estar sendo um pouco confuso em minha explicação quanto a minha aplicação, porém, acredite ou não tenho tudo esquematizado na cabeça, para o caso disso funcionar hahahaha.
Você acha que existe alguma possibilidade de eu abrir o formulario, usando uma variavel para guardar o nome dele?
Agradeço pela atenção.
Manipulação de Formulários por Variáveis
Enviado: 03 Out 2020 às 12:32
por Raygsson
Acho mais fácil você fazer uma rotina separada para abrir ou fechar os formulários, cria uma Sub ou Function pra isso. Depois basta chamar nas suas planilhas, Call AbrirForms , Call FecharForms, algo assim. No seu exemplo de atribuir o form a uma variável está errado a forma de atribuição , como esta lidando com um objeto deve atribuir com a palavra "Set", exemplo:
Re: Manipulação de Formulários por Variáveis
Enviado: 03 Out 2020 às 17:47
por osvaldomp
LeonardoFerrari escreveu: ... eu preciso lidar com muitos formulários (algo entre 13 formulários, porém a unica coisa que muda é o numero final dele, ex: UserForm1, UserForm2, UserForm3, UserForm4....) e sempre preciso abri-los em ordens e momentos diferentes.
Veja se ajuda.
Código: Selecionar todosSub CarregaCertoForm()
Dim frm As Object, i As Long
i = 3 'coloque aqui alguma instrução para atribuir um valor à variável "i"
Set frm = VBA.UserForms.Add("UserForm" & i)
frm.Show
End Sub
dica:
este comando ~~~>
form = "UserFormR1" ~~~> está sim correto, pois
form não se refere ao objeto e sim ao seu nome, que é um
String
Re: Manipulação de Formulários por Variáveis
Enviado: 05 Out 2020 às 07:45
por LeonardoFerrari
osvaldomp escreveu:LeonardoFerrari escreveu: ... eu preciso lidar com muitos formulários (algo entre 13 formulários, porém a unica coisa que muda é o numero final dele, ex: UserForm1, UserForm2, UserForm3, UserForm4....) e sempre preciso abri-los em ordens e momentos diferentes.
Veja se ajuda.
Código: Selecionar todosSub CarregaCertoForm()
Dim frm As Object, i As Long
i = 3 'coloque aqui alguma instrução para atribuir um valor à variável "i"
Set frm = VBA.UserForms.Add("UserForm" & i)
frm.Show
End Sub
dica:
este comando ~~~> form = "UserFormR1" ~~~> está sim correto, pois form não se refere ao objeto e sim ao seu nome, que é um String
Muito obrigado Osvaldo, funcionou perfeito, e é um código bem didático para tal.
Agraço pela ajuda.