FOR EACH
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?
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?
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"
'
'/\/\/\/\/\/\/\/\/\/\/\/\
'> 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"
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
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
Tente isso em uma módulo, e com um botão chame a sub da forma como o exemplo!
'Exemplo, no formulário:
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]
'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]
kra facim saca só
'coloque em um modulo
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
'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
Atila.. o problema é que typeof não funciona no VBA.. só etm typename
Não entendi seu problema então...
A dica do Milton não lhe serve??? ele utiliza o TypeName...
A dica do Milton não lhe serve??? ele utiliza o TypeName...
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
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
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...
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