Ir para conteúdo
Fórum Script Brasil
  • 0

Parametro em funçao


HighBass

Pergunta

observe esse codigo:

Sub Testa_Linhas()
    Dim Texto As Control
    Dim teste As String
    
    
    For Each Texto In t1

nesse codigo eu faço uma pesquisa nos controles do formulario e condigo pegar apenas o vetor de texboxs cujo nome é "t1", e em seguida continuo com meu filtro pegando o index de cada um.

Pois bem, eu gostaria que o t1 fosse passado como argumento para esse procedimento, pois assim eu poderia chamar esse procedimento para varios vetores de textsboxs (t1,t2,t3,...), como eu faço isso??

call Sub Testa_Linhas(t1)

call Sub Testa_Linhas(t2)

call Sub Testa_Linhas(t3)

Editado por HighBass
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

sim, mas veja bem, t1 é um array de objetos texts, ou seja, eu tenho t1(0), t1(1), t1(2),...

Trata-se de passar um array por parametro, eu quero passar t1, t2, t3 e todos são vetores

t1(0), t1(1), t1(2),...

t2(0), t2(1), t2(2),...

t3(0), t3(1), t3(2),...

em:

For Each Texto In t1

t1 é um array de textboxs.

Link para o comentário
Compartilhar em outros sites

  • 0

declare como variant pra ele poder receber o array. exemplo:

Private Sub Testa_Linhas(t As Variant)
    Dim Texto As Control
    
    For Each Texto In t
        MsgBox Texto.Text
    Next
End Sub[/code] ai você simplesmente passar o array pra chamar:
[code]Testa_Linhas t1

Link para o comentário
Compartilhar em outros sites

  • 0
declare como variant pra ele poder receber o array. exemplo:

Private Sub Testa_Linhas(t As Variant)
    Dim Texto As Control
    
    For Each Texto In t
        MsgBox Texto.Text
    Next
End Sub
ai você simplesmente passar o array pra chamar:
Testa_Linhas t1
funcionou, beleza. so que agora tenho outra duvida: esse esquema ele fez para o t1, porem preciso fazer do t1 ate o t20. to tentando isso:
Dim I As Integer
    
    I = 1
    For I = 1 To 20
        Call Verifica_Linhas("t" & I)
    Next I

mas ta dando erro run timer error 13 type mismatch no ", t & I)"

como posso fazer com que eu consiga chamar o Verifica_Linhas para passar pelos 20 arrays de textbox???

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
cara o nome na função é Testa_Linhas, você tem que dar um espaço, pois senão ele fica chamando assim Testa_Linhast1, não existe essa função

tenta chamar assim

Testa_Linhas "t" & I
fiz conforme a dica, mas agora ta dando erro na seguinte linha do procedimento:
For Each Texto In t

o erro é runtimer error 424 'object required', não entendi porque deu erro agora....

Link para o comentário
Compartilhar em outros sites

  • 0
cara o nome na função é Testa_Linhas, você tem que dar um espaço, pois senão ele fica chamando assim Testa_Linhast1, não existe essa função

tenta chamar assim

Testa_Linhas "t" & I
fiz conforme a dica, mas agora ta dando erro na seguinte linha do procedimento:
For Each Texto In t
o erro é runtimer error 424 'object required', não entendi porque deu erro agora....
o meu codigo esta assim:
Sub Verifica_Linhas(NomeControleIf As String, ArrayText As Variant)    
    Dim Texto As Control
    Dim teste As String
    

    For Each Texto In ArrayText
        If TypeOf Texto Is TextBox Then
            If Texto.Name = NomeControleIf Then
        etc,etc
chamando a funçao dessa forma, funciona beleza:
Call Verifica_Linhas("t" & I, t1)
tentando chamar o procedimento assim já da pau:
Dim I As Integer
    I = 1
        

    For I = 1 To 20
        Call Verifica_Linhas("t" & I, t & I)
    Next I

ai já não sei o que fazer.....

Editado por HighBass
Link para o comentário
Compartilhar em outros sites

  • 0

aparece escrito 'array text'

eu acho que já saquei o que acontece, é que o primeiro paramentro o 'T & I' é do tipo string, ate ai beleza.

O problema é o segundo paramentro que tem que ser do tipo array.

E se eu fizer isso:

For I = 1 To 20
        Call Verifica_Linhas("t" & I, t & I)
    Next I

o segundo parametro fica como do tipo string e assim ele da erro dizendo que precisa do objeto array, entendeu.

Mas eu não sei como faço para ir para a proxima array de textbox, porque se eu digitar t1 (sem aspas) funciona, porem não sei como fazer para ir para o t2,t3,t4... etc etc

Acho que talvez seja isso, mas se alguém puder me ajudar a fazer isso, porque ainda não consegui resolver isso

Editado por HighBass
Link para o comentário
Compartilhar em outros sites

  • 0

cara ai que eu acho que está seu erro, o T! T2 T3 ... você passa no primeiro isntante, o outro você está passando só o index, experimente colocar só o I

For I = 1 To 20
        Call Verifica_Linhas "t" & I,  I
Next I

nisso ele vai chamar a função com o T2 e indice 2

Link para o comentário
Compartilhar em outros sites

  • 0

então, olha so, a funçao é assim:

Sub Verifica_Linhas(NomeControleIf As String, ArrayText As Variant)    
    Dim Texto As Control
    Dim teste As String
    

    For Each Texto In ArrayText
        If TypeOf Texto Is TextBox Then
            If Texto.Name = NomeControleIf Then
        etc,etc
logo, eu tenho dois parametros, um diferente do outro, um é do tipo string que faz uma comparaçao no codigo e o outro é do tipo variant, ou seja, é um array de textboxs. Cada array é uma linha, ou seja, t1,t2,t3... ate 20, logo, t20 é a ultima linha. O que eu gostaria de fazer era chamar a funçao:
~
For I = 1 To 20
        Call Verifica_Linhas("t" & I, t & I)
    Next I

mas ou menos desse tipo, porem, nesse codigo acima, no segundo parametro eu to passando um string, mas tem que ser do tipo array, e isso eu não to conseguindo fazer.

Link para o comentário
Compartilhar em outros sites

  • 0

Ao invés de utilizar 20 arrays diferentes, utilize um array bidimensional !

Exemplo:

Dim t(20, 20) as string
Aí ficaria assim:
For i = 1 To ubound(t, 1)
    For z=1 to ubound(t, 2)
        Call Verifica_Linhas(i, z)
    Next
Next

Qualquer coisa, posta aí !

Link para o comentário
Compartilhar em outros sites

  • 0
como posso fazer com que eu consiga chamar o Verifica_Linhas para passar pelos 20 arrays de textbox???

a se você quer espicificar os numeros tem q passar os indices, não pode ser com for each. tipo assim:

Private Sub Testa_Linhas(t As Variant)
    Dim i As Integer
    
    For i = 1 To 20
        MsgBox t(i).Text
    Next
End Sub[/code]

ai se os numeros são variaveis, você passa por parametro.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...