ARRAY DINAMICO
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 ?
Alguém sabe me dizer ?
Não conheço o VBA 2010, mas supondo que seja parecido co o VB6, pergunto: Vc está declarando ele na seção General?
Declara a array:
E define a quantidade de elementos com redim:
Veja este tópico
e este aqui:Redim
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
Cara um array dinâmico é assim mesmo
http://www.macoratti.net/arrays.htm
espero ter ajudado
[ô]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
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.
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.
A variavel cont deve estar iniciada com o valor zero
vê ai
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
outra opção é usar o metodo [txt-color=#e80000].Getrows[/txt-color]
dê uma olhada aqui
dê uma olhada aqui
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...
ReDim Preserve arrayClientes(cont) = [ô]rs!idCliente
será que preciso habilitar alguma referência ? acho que não tem nada haver, mas...
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
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
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
Que erro ta dando
Tópico encerrado , respostas não são mais permitidas