FOR EACH

USUARIO.EXCLUIDOS 23/08/2007 21:28:46
#232459
Boa noite...

O laço for each funciona somente com a procura de controles pelo nome? Por exemplo:

Estou tentando fazer com que se o tipo de um controle for textbox ele altere determinado valor...

Dim controle as control

for each controle in me.controls

if typeof control is textbox then
controle.text = ""
end if

next controle

porém, ele não aprente typeof na lista e sim typename. E quando coloco typeof ele não faz nada e também não da erro..

Como funciona par o VBA?
DIOGENES.DIAS 23/08/2007 21:45:49
#232460
Tente isto!
'
'/\/\/\/\/\/\/\/\/\/\/\/\
'> DECLARAÇÃO VARIÁVEIS <
'/\/\/\/\/\/\/\/\/\/\/\/\
'
Dim Ctrl As Control
'
For Each Ctrl In Controls
If TypeOf Ctrl Is TextBox Then
If UCase(Ctrl.Name) = "TEXT2" Then
Ctrl.Text = "Valor Alterado!"
End If
End If
'
Next

That's All"
USUARIO.EXCLUIDOS 23/08/2007 21:51:37
#232461
tudo bem...
mas imagine que eu quero limpar os valores de todos os controles textbox...
e como vou utilizar isso em vários formulários vou ciar uma sub que faz isso para mim... eu não posso sempre ir pelo nome do controle, tenho que ir pelo tipo... tenho que percorrer todos os controles e limpar os textbox
USUARIO.EXCLUIDOS 24/08/2007 00:07:12
#232469
Tente isso em uma módulo, e com um botão chame a sub da forma como o exemplo!
'No módulo
[c]Public Sub zeraValores(frmForm As Form)
Dim Ctrl As Control
For Each Ctrl In frmForm.Controls
If TypeOf Ctrl Is TextBox Then
Ctrl.Text = "" 'Valor zerado
End If
Next
End Sub

'Exemplo, no formulário:
Private Sub Command1_Click()
zeraValores Me
End Sub


Private Sub Command2_Click()
zeraValores Form1
zeraValores Form2
zeraValores Form3
End Sub

Claro que você tem outras saidas, como criar um outro "For Each" para percorrer os formulários abertos e em usar a sub "zeraValores" no escopo do "For Each", mas aí vai do que você achar mais conveniente, ou seja, se forem poucos formulários como está no exemplo ele serve, mas se forem muitos é melhor fazer uma rotina que percorra os forms abertos e alteres seus textbox.
[/c]
USUARIO.EXCLUIDOS 24/08/2007 01:31:01
#232471
kra facim saca só

'coloque em um modulo
public sub limpa_text()
Dim obj As object
For Each obj In Screen.ActiveForm.Controls
If TypeName(obj) = "TextBox" Then
obj.text =""
End If
Next
end Sub



para chamar

limpa_text


desse jeito vc num precisa fica passando para a func em qual form vc tah

espero q ajude

falo kra

qualquer coisa, tamo ai

USUARIO.EXCLUIDOS 24/08/2007 10:01:37
#232500
Atila.. o problema é que typeof não funciona no VBA.. só etm typename
USUARIO.EXCLUIDOS 24/08/2007 10:04:34
#232503
Não entendi seu problema então...

A dica do Milton não lhe serve??? ele utiliza o TypeName...
USUARIO.EXCLUIDOS 24/08/2007 10:08:23
#232505
Então...

Mas com o typename vou ter que por exemplo ficar renomeando os controles como por exemplo os textbox colocando um T_ mp nos controles combo C_ para eu ler essa substring e saber que tipo de controle... isso va tomar um tempo grande..
com typeof eu percorria os controles e faria o que tem que ser feito sem me preocupar em ter que ficar renomenando
USUARIO.EXCLUIDOS 24/08/2007 11:49:44
#232563
Não amigo...

TypeName = Nome do Tipo.

Ex.:
Sua caixa de texto chama txtAAAA... o TypeName vai retornar TextBox.
Sua caixa de texto chama T_AAAAA... o TypeName vai retornar TextBox.


Entendeu??? o TypeName retorna uma string com o nome do Tipo do objeto... e não o nome do Objeto em si que vc definiu... o que retorna o nome do Objeto seria Obj.Name...
Tópico encerrado , respostas não são mais permitidas