Usuário com melhor resposta
userform indexada em variável

Pergunta
-
Tenho armazenado em uma variável o nome da userform.propriedade que desejo utilizar, como posso utilizar essa variável.
por exemplo x = "userform2.caption", e desejo fazer
x = x & "1" ( por exemplo)
x = "Nome"
Qual é o modo correto de utilizar esse comandoObrigado
Respostas
-
Obrigado, Feliz Natal pra você e todos do fórum também.
Realmente, o exemplo que te mandei é como representar vários formulários tendo apenas um formulário modelo.
Seria melhor se você postasse seu código aqui, pode ser com todos os If mesmo.
Para fazer um laço em controles de um formulário, utilize o código abaixo:
Private Sub UserForm_Click() Dim ctrl As Control For Each ctrl In Me.Controls If ctrl.Name Like "TextBox*" Then ctrl = "Benzadeus!" End If Next ctrl End Sub 'ou: Private Sub UserForm_Click() Dim ctrl As Control Dim lIndex As Long For lIndex = 1 To 20 Set ctrl = Controls("TextBox" & lIndex) ctrl = "Benzadeus!" Next lIndex End Sub
Quando se trata de formulários, não é possível fazer algo simples como esse exemplo que mostrei (e nem como você fez). Isso acontece porque formulários devem ser declarados de acordo com sua classe. Se você possui os formulários Userform1, Userform2, Userform3, etc, não pode criar simplesmente uma variável que represente cada uma dessas classes. O melhor que acredito que possa fazer é:
Sub Exemplo() Dim frm As Object Dim lIndex As Long For lIndex = 1 To 20 Set frm = GetFormulário("UserForm" & lIndex) frm.Show Next lIndex End Sub Function GetFormulário(sFormulário As String) As Object Select Case sFormulário Case "UserForm1": Set GetFormulário = New UserForm1 Case "UserForm2": Set GetFormulário = New UserForm1 Case "UserForm3": Set GetFormulário = New UserForm1 'E assim por diante End Select End Function
---
Pergunta: os formulários são muito diferentes entre si ou mudam apenas algumas coisas como texto de um rótulo, etc.?
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta vbdeantoni segunda-feira, 24 de dezembro de 2012 21:42
Todas as Respostas
-
-
Na verdade acho que não escrevi corretamente.
Tenho várias Userform (1,2,...,20)
Em uma variável tenho o nome Userform, e dependendo de outros parametros do programa eu preciso chamar uma deterinada userform, por exemplo a userform3.
O que eu tentei fazer é Variavel = "userform" & "3"
Entretanto quando eu faço variavel.optionbutton4.enable = false
Aparece um erro dizendo que é necessário o objeto.
Acredito que o problema esteja na declaração da minha variável ou como defino ela talvez usando set?
Mas agradeço sua resposta
-
Ainda não entendi muito bem o que deseja, mas aqui há um bom exemplo de se alocar formulários num vetor: http://social.msdn.microsoft.com/Forums/pt-BR/vbapt/thread/f9278f88-9932-4443-9b8c-c86a79a6a776
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta vbdeantoni segunda-feira, 24 de dezembro de 2012 20:05
- Não Marcado como Resposta vbdeantoni segunda-feira, 24 de dezembro de 2012 20:12
-
Exemplo do que preciso...
Sub procedimento()
dim x,a as string
x = "userform"
For i=1 to 20
a = x & i
' msgbox a => userform1 ,..., userform20 (para cada loop)
a.caption = "olá"
Next i
ENd Sub
Escrevi apenas para ilustrar meu exemplo, o que eu queria era uma maneira dinamica de atribuir o nome de uma userform ou propriedade em uma variavel.
O que ocorre é o erro "o objeto é necessário". na linha (a.caption= "olá")
Ele armazena o nome correto na variável porém não consigo usá-la como objeto.
Gostaria de poder fazer isso não só para o userform mas também para outras propriedades como por exemplo optionbutton (i) ...
Dei uma olhada no link que você enviou mas não verifiquei isso por lá.
Na verdade acabei usando uns 30 if's para resolver o problema, mas gostaria de saber como fazer desse modo. O problema que estava trabalhando era um questionário que dependendo de opçoes escolhidas exibiria diferentes informações a cada iteração.
Agradeço a ajuda e aproveito para desejar um feliz natal.
-
Obrigado, Feliz Natal pra você e todos do fórum também.
Realmente, o exemplo que te mandei é como representar vários formulários tendo apenas um formulário modelo.
Seria melhor se você postasse seu código aqui, pode ser com todos os If mesmo.
Para fazer um laço em controles de um formulário, utilize o código abaixo:
Private Sub UserForm_Click() Dim ctrl As Control For Each ctrl In Me.Controls If ctrl.Name Like "TextBox*" Then ctrl = "Benzadeus!" End If Next ctrl End Sub 'ou: Private Sub UserForm_Click() Dim ctrl As Control Dim lIndex As Long For lIndex = 1 To 20 Set ctrl = Controls("TextBox" & lIndex) ctrl = "Benzadeus!" Next lIndex End Sub
Quando se trata de formulários, não é possível fazer algo simples como esse exemplo que mostrei (e nem como você fez). Isso acontece porque formulários devem ser declarados de acordo com sua classe. Se você possui os formulários Userform1, Userform2, Userform3, etc, não pode criar simplesmente uma variável que represente cada uma dessas classes. O melhor que acredito que possa fazer é:
Sub Exemplo() Dim frm As Object Dim lIndex As Long For lIndex = 1 To 20 Set frm = GetFormulário("UserForm" & lIndex) frm.Show Next lIndex End Sub Function GetFormulário(sFormulário As String) As Object Select Case sFormulário Case "UserForm1": Set GetFormulário = New UserForm1 Case "UserForm2": Set GetFormulário = New UserForm1 Case "UserForm3": Set GetFormulário = New UserForm1 'E assim por diante End Select End Function
---
Pergunta: os formulários são muito diferentes entre si ou mudam apenas algumas coisas como texto de um rótulo, etc.?
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta vbdeantoni segunda-feira, 24 de dezembro de 2012 21:42
-
Os formulários são bem semelhantes, eu gostaria de colocar o código entretanto esta dividido em várias partes.
Já percebi que usando o link que enviou eu poderia ter simplificado muito o projeto, fica a dica para o próximo.
Na verdade a questão surgiu quando eu queria ativar alguns optionbutton em um mesmo FOrm.
O que eu queria fazer era que como cada conjunto de optionbutton correspondia a uma celula do excel, após ele ser preenchido (mais de 100 questões) era poder voltar com as respostas já em default
minha idéia era fazer um laço com um contador (optionbutton1, 2... até 12) e associar o contador com a célula que ele estava relacionado, a célula com a resposta recebiria1 ,2 até o 12 e então esse optionbutton receberia Enable = true.
por exemplo se a célula estivesse com 6, significava que era o optionbutton6 ficaria ativo.
Daí comecei a testar para a userform também.
O que fiz foi colocar um IF, se celula =1 then optionbutton1 = 1...........
....................
Andei dando uma lida por aqui, e realmente depois de ler sua resposta entendi que o que eu queria fazer era bem mais complexo do que simplesmente colocar um numero na frente de uma string e achar que funcionaria.
A sua solução acima funcionou, vou terminar de implantar ela e depois posto o resultado.
Agradeço a ajuda.
Feliz Natal
-
-