ARRAY DINAMICO

SOARESDIVIS 30/04/2012 14:56:56
#401059
Pessoal, um array dinâmico é declarado assim : Dim arrayQualquer() As long, certo ? estou falando em vba 2010. Mas porque dá erro ? porque só funciona se declarar o tamanho deste array, isto é, colocar o índice que ele pode chegar ?
Alguém sabe me dizer ?
LLAIA 30/04/2012 16:05:30
#401060
Não conheço o VBA 2010, mas supondo que seja parecido co o VB6, pergunto: Vc está declarando ele na seção General?
ROBIU 30/04/2012 16:42:52
#401061
Declara a array:
Dim arrayQualquer() As long


E define a quantidade de elementos com redim:

Redim arrayQualquer(10) As long


Veja este tópico

e este aqui:Redim
FILMAN 30/04/2012 18:11:48
#401067
Cara um array dinâmico é assim mesmo

[ô]Declarando o array dinamico
Dim ArrayDinamico() as Long

[ô]Para que o array começe da posição 1 utilize como abaixo e tera 10 posições iniciando de 1
Dim ArrayValores(1 to 10) as Long

[ô]Se declarado assim tera 10 posições mais iniciando de zero
Dim ArrayValores(9) as Long

[ô]Carregar ArrayValores
ArrayValores(1) = 100000
ArrayValores(2) = 200000
ArrayValores(3) = 300000
ArrayValores(4) = 400000
ArrayValores(5) = 500000
ArrayValores(6) = 600000
ArrayValores(7) = 700000
ArrayValores(8) = 800000
ArrayValores(9) = 900000
ArrayValores(10) = 1000000

[ô]Como utilizar em um estrutura de repetição
For i = 1 to Ubound(ArrayValores)
Redim Preserve ArrayDinamico(i-1)
ArrayDinamico(i-1) = ArrayValores(i)
Next i



http://www.macoratti.net/arrays.htm

espero ter ajudado
SOARESDIVIS 30/04/2012 18:47:34
#401068
POis é, eu sei disso da declaração e do min e max com o Redim, mas por incrível que pareça está me retornando um erro 9 de subscrito fora do intervalo, que não tem nada haver com a realidade dos registros, abaixo o código
rs.Open [Ô]SELECT idCliente FROM pedidos [Ô], cn, adOpenDynamic, adLockOptimistic
While rs.EOF <> True
arrayClientes(cont) = rs([Ô]idCliente[Ô])
cont = cont + 1
rs.MoveNext
Wend
super simples e não funciona, já fiz a declaração dentro da Sub e também acima de tudo de forma Global, mas só funciona se dimensiono a array, e não posso fazer isso desta vez, isto é, nesta parte do código.
FILMAN 30/04/2012 19:38:56
#401070
A variavel cont deve estar iniciada com o valor zero

cont = 0
rs.Open [Ô]SELECT idCliente FROM pedidos[Ô], cn, adOpenStatic, adLockReadOnly
While not rs.EOF
ReDim Preserve arrayClientes(cont) = rs!idCliente
cont = cont + 1
rs.MoveNext
Wend



vê ai
GANDA.NICK 30/04/2012 20:55:10
#401073
outra opção é usar o metodo [txt-color=#e80000].Getrows[/txt-color]


dê uma olhada aqui
SOARESDIVIS 30/04/2012 21:00:14
#401074
Filman, valeu, mas deu erri de syntaxe aqui:
ReDim Preserve arrayClientes(cont) = [ô]rs!idCliente
será que preciso habilitar alguma referência ? acho que não tem nada haver, mas...
FILMAN 30/04/2012 21:24:24
#401076
Tenta assim

cont = 0
rs.Open [Ô]SELECT idCliente FROM pedidos[Ô], cn, adOpenStatic, adLockReadOnly
While not rs.EOF
ReDim Preserve arrayClientes(cont)
arrayClientes(cont) = rs!idCliente
cont = cont + 1
rs.MoveNext
Wend
SOARESDIVIS 30/04/2012 23:51:24
#401094
Cara!!!!!! que legal, deu certo, valeu mesmo, passou pela linha só deu erro fora de subscrito novamente mais abaixo no decorrer do código nesta linha:
While cont > 0
unico = arrayClientes(cont) [ô] ERRO AQUI
quant = contUnico
Na verdade acho que estou comendo bola em alguma operação com array, pois está dando erro na linha unico = arrayClientes(cont). A rotina irá buscar todos os idClientes que já fizeram algum pedido, e depois apresentar apenas a última data do mais recente pedido destes clientes para que eu possa calcular quando será a próxima visita neste cliente.
Ainda não escrevi a parte das datas, pois tenho que acertar estes detalhes dos arrays, Abaixo o que escrevi desta Sub. Se você puder me ajudar te agradeço demais.

Sub Home_Grupo11_Clique() [ô] DA HOME ir para COMPRAS PLAN 27
Plan27.Activate
Dim linha As Integer
Dim idCliente As Integer

Dim cont As Integer

Dim contUnico As Integer
Dim unico As Integer
Dim cliente As Integer
Dim flag As Boolean
Dim quant As Integer

linha = 2
unico = 0
flag = False
[ô]ReDim arrayClientes(1) As Long
[ô]ReDim arrayUnico(1) As Long
Call Abre_Banco
cont = 0
rs.Open [Ô]SELECT idCliente FROM pedidos[Ô], cn, adOpenStatic, adLockReadOnly
While Not rs.EOF
ReDim Preserve arrayClientes(cont)
arrayClientes(cont) = rs!idCliente
cont = cont + 1
rs.MoveNext
Wend
[ô]rs.Open [Ô]SELECT idCliente FROM pedidos [Ô], cn, adOpenDynamic, adLockOptimistic
[ô] While rs.EOF <> True
[ô] cliente = rs([Ô]idCliente[Ô])
[ô] arrayClientes(cont) = cliente
[ô] cont = cont + 1
[ô] rs.MoveNext
[ô] Wend
[ô]unico = arrayCliente(cont)
[ô]arrayUnico(contUnico) = unico
[ô]MsgBox [Ô]O valor do cont é:[Ô] & cont & vbCr & vbCr
While cont > 0
unico = arrayClientes(cont)
quant = contUnico

If contUnico = 0 Then
arrayUnico(contUnico) = unico
contUnico = contUnico + 1
Else
While contUnico > 0
If unico = arrayUnico(contUnico) Then
flag = True
End If
contUnico = contUnico - 1
Wend
If flag = False Then
contUnico = quant
contUnico = contUnico + 1
arrayUnico(contUnico) = unico
End If
End If
cont = cont - 1
Wend
MsgBox [Ô]O valor do contUnico é: [Ô] & contUnico & vbCr & vbCr
While contUnico > 0
Plan27.Cells(linha, 1) = arrayUnico(contUnico)
contUnico = contUnico - 1
linha = linha + 1
Wend


[ô]rs.Close
[ô] rs.Open [Ô]SELECT * FROM pedidos WHERE ORDER By dataPedido ASC[Ô], cn, adOpenDynamic, adLockOptimistic
[ô]WHERE idCliente = [Ô] & codigo & [Ô] And idEmpresa = [Ô] & empresa & [Ô] ORDER By idProduto ASC [Ô], cn,
[ô] While rs.EOF <> True
[ô] Plan27.Cells(linha, 1) = rs([Ô]idCliente[Ô])
[ô] Plan27.Cells(linha, 2) = rs([Ô]fantasia[Ô])
[ô] Plan27.Cells(linha, 3) = rs([Ô]dataPedido[Ô])
[ô] linha = linha + 1
[ô] rs.MoveNext
[ô] Wend
End Sub
FILMAN 01/05/2012 00:21:55
#401099
Que erro ta dando
Página 1 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas