ARRAY DE MUITOS TEXTBOX

THIAGOM 16/04/2010 15:24:47
#339606
Uso VBA 6.3. Como faço para fazer um array que define a visibilidade de 75 textbox: TextBox1, TextBox2, ..., TextBox75.

Eu gostaria de definí-las sem ter que digitar uma a uma. Tentei isto aqui, mas não consegui:

[txt-color=#0000f0]
Dim TextBox(i) As TextBox
Dim i As Byte

For i = 1 To 75
If TextBox(i).Text <>[Ô][Ô]Then
TextBox(i).Visible = False
Else
TextBox(i).Visible = True
End If
Next i

End Sub
[/txt-color]

Como os dados são carregados após uma ordem de classificação, nuca vai ocorrer de aparecerem salteadas na form
ASHKATCHUP 16/04/2010 15:32:12
#339608
Resposta escolhida
O código teria que funcionar... só não entendi pq vc declarou as variáveis como textboxes.
THIAGOM 16/04/2010 15:57:11
#339610
O código tem que funcionar quando ativo o form, isto não é problema. Teve uma falha na edição, já corrigi!.

Tentei... adaptar um exemplo que encontrei...

Fazer um array citando os textboxes um a um, eu consigo fazer, mas desse outro jeito, não consigo.

Se souber como, fico muito agradecido...

ASHKATCHUP 16/04/2010 16:29:52
#339611
Os textboxes são um array no form? Ou são controles com nomes diferentes? Você pode tentar:


Dim objControle As Control
[ô]
For Each objControle In Me.Controls
If LCase(TypeName(objControle)) = [Ô]textbox[Ô] Then
objControle.Visible = False
End If
Next
[ô]
THIAGOM 16/04/2010 17:01:46
#339614
Esse comando funciona legal , mas so devem [Ô]desaparecer[Ô] as texboxes que não são preenchidas, pois elas são carregadas junto com o form..., vc consegue?
ASHKATCHUP 16/04/2010 17:05:26
#339615
é só colocar o teu [Ô]IF[Ô] ali...


Dim objControle As Control
[ô]
For Each objControle In Me.Controls
[ô]
If LCase(TypeName(objControle)) = [Ô]textbox[Ô] Then
[ô]
If objControle.Text = [Ô][Ô] Then
objControle.Visible = False
Else
objControle.Visible = True
End If
[ô]
End If
[ô]
Next
[ô]
THIAGOM 16/04/2010 17:19:10
#339618
BELEZA!..., Consegui assim:

[txt-color=#0000f0]Dim objControle As Control

For Each objControle In Me.Controls
If LCase(TypeName(objControle)) = [Ô]textbox[Ô] And objControle = [Ô][Ô] Then
objControle.Visible = False
End If
Next[/txt-color]

Valeu mesmo...!

Agora, isso tbm vale para labels?, por exemplo, labels com caption=[Ô]+[Ô], ficarem invisiveis...

Tentei isto mas não funcionou:

[txt-color=#0000f0]For Each objControle2 In Me.Controls
If LCase(TypeName(objControle2)) = [Ô]Label[Ô] And objControle2.Tag = [Ô]+[Ô] Then
objControle2.Visible = False
End If
Next[/txt-color]
THIAGOM 16/04/2010 17:23:04
#339620
Beleza!!!!!

[txt-color=#0000f0] For Each objControle2 In Me.Controls
[ô]
If LCase(TypeName(objControle2)) = [Ô]label[Ô] Then
[ô]
If objControle2.Caption = [Ô]+[Ô] Then
objControle2.Visible = False
Else
objControle2.Visible = True
End If
[ô]
End If
[ô]
Next[/txt-color]

Adaptei tua ajuda, Valeu mesmo, RESOLVIDO!.
ASHKATCHUP 16/04/2010 17:23:05
#339621
Não funcionou pq a função [Ô]LCASE[Ô] retorna a string passada em MINUSCULO.
Ou seja, você precisa testar


if lcase([Ô]LABEL[Ô]) = [Ô]label[Ô] then
endif
THIAGOM 16/04/2010 17:33:26
#339625
Deu certinho mesmo, este que te informei antes, tá perfeito...

Mas por curiosidade vou testar depois como vc falou agora... até mais!.
ASHKATCHUP 16/04/2010 17:40:40
#339629
O [Ô]IF[Ô] que eu coloquei foi metafórico... você precisa testar o resultado do LCASE com uma string minúscula.
Tópico encerrado , respostas não são mais permitidas