MATRIZ

USUARIO.EXCLUIDOS 21/11/2006 11:17:57
#185526
Pessoal,
Como faço pra passar uma matriz como parà¢metro para uma sub?
Tenho várias matrizes de mesmo tamanho (50,50) e de acordo com algumas condições, a cada momento uma matriz é passada para a outra sub.
Na sub que vai receber a matriz coloquei:

Private sub NomedaSub (byval matriz as variant)

mas não dá certo!
Alguém pode me ajudar?
Obrigada
Ana
USUARIO.EXCLUIDOS 21/11/2006 11:25:49
#185528
APPAULAS,

Poderias especificar como declaraste as matrizes?

Abraços,


USUARIO.EXCLUIDOS 21/11/2006 11:30:14
#185531
Ana,

Veja este tópico
http://www.vbmania.com.br/vbmania/vbmforum.php?varMethod=Abrir&varID=173450

Discutimos o mesmo assunto... creio que lá vc encontra a resolução para seu problema.
USUARIO.EXCLUIDOS 21/11/2006 11:32:27
#185532
Private M1(50,50), M2(50,50), M3(50,50), M4(50,50) as string

OBS: os nomes das matrizes são fictícios
USUARIO.EXCLUIDOS 21/11/2006 11:39:34
#185533
Ana, vc olhou o Link que lhe passei??
Lá mostra extamente o que quer fazer...


Na verdade creio que se vc fizer assim já funciona:

Private sub NomedaSub (matriz() as variant)

USUARIO.EXCLUIDOS 21/11/2006 11:44:05
#185535
Olhei o link, como vc sugeriu Marcelo, mas foi justamente o que fiz e continua não funcinando, na verdade, acho que o problema não é na passagem da matriz, quando o programa vai executar a sub que contém a matriz ocorre o erro: ByRef argument type mismatch e seleciona o código onde utilizo os elemento da matriz
por exemplo:
for i = 0 to 49
for j = 0 to 49
x = "Nome: " & M1(i,j) 'o erro ocorre aqui
next j
next i
USUARIO.EXCLUIDOS 21/11/2006 11:59:27
#185541
Fiz assim e funcionou aqui:

Private M1(50, 50) As String

[c]Private Sub teste(Matriz() As String)
For i = LBound(Matriz) To UBound(Matriz)
For j = LBound(Matriz) To UBound(Matriz)
MsgBox Matriz(i, j)
Next
Next
End Sub


Private Sub Form_Load()
teste M1
End Sub

[/c]
USUARIO.EXCLUIDOS 21/11/2006 12:04:17
#185543
APPAULAS,

Declarasse o "x" como sendo de que tipo?

Private Sub NomeDaSub(m1() as variant)
dim x as string
for i = 1 to 49
for j = 1 to 49
x = "Nome: " & m1(i,j)
next j
next i


Deve funcionar da forma supracitada. Qualquer coisa, posta denovo que tentaremos solucionar teu problema.
Abraços,
LIONHEART 21/11/2006 12:36:42
#185552
Resposta escolhida
O seu erro é o mesmo de MUITOS aqui, Ana.

Private M1(50,50), M2(50,50), M3(50,50), M4(50,50) as string



o correto é:

Private M1(50,50) as string , M2(50,50) as string , M3(50,50) as string , M4(50,50) as string



Quando vc coloca a virgula, vc define que na mesma LINHA será feita a declaração de OUTRA variavel com um outro tipo.

não é que nem as outras linguagens que interpretam que cada item da linha é do mesmo tipo


Ou seja:

Dim a, b, c, d as string

é o mesmo que

a = variant
b = variant
c = variant
d = STRING

por isso vc ganhava um TYPE MISMATCH

M1, M2 e M3 são VARIANT e não STRING como vc esperava.
USUARIO.EXCLUIDOS 21/11/2006 12:48:06
#185553
LIONHEART,

Grande! Meus parabéns. Estávamos quebrando a cabeça, hehe! Eu estranhei, porque quando fui testar aqui no meu VB, funcionou perfeitamente. Eu costumo utilizar uma linha para cada variável... Então, descobrimos!

Abraços!
USUARIO.EXCLUIDOS 21/11/2006 13:19:15
#185554
LIONHEART,
Eu não sabia desse "detalhe", valeu!
Fiz as alterações e tá funcionando!

Muito obrigada, a todos!
Ana
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas