Condividi:        

redim preserve array

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

redim preserve array

Postdi miko » 17/10/13 19:54

salve,
mi stavo cimentando a modificare alcune macro trova disponibili nel forum
facendo uso di arrays, ma quasi a conclusione del codice ho notato che vi è un
errore "apparente";

Codice: Seleziona tutto
Option Base 1

Sub TROVA_E_COLORA()

Dim ArTROVA()
Dim counter As Integer, i As Long

   On Error Resume Next  ' linea 1 <<<<<<<<<<
 
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual

  With Worksheets("Foglio1")
     Erase ArTROVA
     URC = .Range("C" & Rows.Count).End(xlUp).Row
    .Range("C3:H" & URC).Interior.ColorIndex = xlNone
   
    ArTROVA = .Range("M3:M" & Cells(Rows.Count, "M").End(xlUp).Row).Value
         
     URK = .Range("K" & Rows.Count).End(xlUp).Row
    .Range("K3:K" & URK).ClearContents
    counter = 0
               
        For Each cl In .Range("C3:H" & 13)
           For K = LBound(ArTROVA) To UBound(ArTROVA)
                If cl = ArTROVA(K, 1) Then
                   cl.Interior.ColorIndex = 28
                     For i = K To UBound(ArTROVA) - 1
                         ArTROVA(i, 1) = ArTROVA(i + 1, 1)
                     Next i
                  ReDim Preserve ArTROVA(UBound(ArTROVA) - 1)  ' linea 2 <<<<<<<
               
                  .Range("K3:K" & UBound(ArTROVA) + 2) .ClearContents
                     
                  .Range("K3:K" & UBound(ArTROVA) + 1).Value = ArTROVA
                   ArTROVA = .Range("K3:K" & Cells(Rows.Count, "K").End(xlUp).Row).Value
                   GoTo SALTACL
                End If
            Next K
SALTACL:
 counter = counter + 1
If counter = 6 Then
.Range("K3:K" & UBound(ArTROVA) + 2).ClearContents
ArTROVA = .Range("M3:M" & Cells(Rows.Count, "M").End(xlUp).Row).Value
counter = 0
End If
    Next cl
End With
  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
End Sub


inserisco i valori da trovare, colonna M, in un array, ArTROVA, e ricerco questi valori per ogni riga del range C-H;
se un item dell'array viene trovato elimino questo valore dall'array poichè su una stessa riga non possono esserci valori identici.
ridimensionando l'array iniziale, riporto i valori rimanenti, quelli ancora da cercare, in colonna K e successivamente ripopolo lo stesso array ArTROVA e continuo la ricerca fino alla fine della riga;
passando alla riga successiva ripristino l'array iniziale.
tutto sembra procedere correttamente ma se commento la linea 1 marcata, resume next, ho errore alla linea 2, redim preserve,
ed il messaggio recita "INDICE NON INCLUSO NELL'INTERVALLO":
capisco che il resume next fa proseguire in caso di errore, ma non capisco perchè in sua assenza vi è questo errore se le stesse linee di codice usate in altra circostanza, isolate da questo contesto, funzionano perfettamente.
saluti e grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: redim preserve array

Postdi scossa » 17/10/13 20:50

Codice: Seleziona tutto
ReDim Preserve ArTROVA(UBound(ArTROVA) - 1)  ' linea 2 <<<<<<<


Senza entrare nel merito del codice, l'errore nasce perché se usi Preserve puoi ridimensionare solo l'ultima dimensione dell'array: poiché ArTROVA è un array bidimensionale ( ArTROVA(1 to nn, 1 to 1) ) puoi ridimensionare solo la seconda dimensione
    ReDim Preserve ArTROVA(1 to nn, 1 to xx)
che ovviamente non è quello che ti serve.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona


Torna a Applicazioni Office Windows


Topic correlati a "redim preserve array":


Chi c’è in linea

Visitano il forum: Nessuno e 68 ospiti