Avatar billede bluestrike Nybegynder
09. oktober 2003 - 16:21 Der er 9 kommentarer og
1 løsning

Dynamisk array problem?

Her er den kode jeg har problemer med.
 
Dim MyArray()
 
    sidsterække = Worksheets("data").UsedRange.Rows.Count
 
    række = 1
   
    While sidsterække + 1 > række
        MyArray(række - 1, 0) =
        Worksheets("data").Cells(række, 1).Value

Hvorfor får jeg en subscript out of range error på denne tilskrivning til mit array. Jeg har fundet ud af så meget så det må have noget at gøre med mit dynamiske array, for definere jeg en fast størrelse på arrayet virker det fint. Nu er det bare sådan at jeg ikke ved hvormange data jeg skal have ind i arrayet, og derfor kan jeg ikke definere størrelsen på forhånd. Håber I kan hjælpe.
Avatar billede bennytordrup Nybegynder
09. oktober 2003 - 16:31 #1
Dim MyArray()
 
    sidsterække = Worksheets("data").UsedRange.Rows.Count

    redim MyArray(sidsterække-1)
 
    række = 1
   
    While sidsterække + 1 > række
        MyArray(række - 1, 0) =
        Worksheets("data").Cells(række, 1).Value
Avatar billede bluestrike Nybegynder
09. oktober 2003 - 16:33 #2
Så kører den sku, takker mange gane!!
Avatar billede bluestrike Nybegynder
09. oktober 2003 - 16:33 #3
*gange ;-)
Avatar billede martin_moth Mester
14. oktober 2003 - 12:32 #4
brug redim PRESERVE hvis du en gang vil redimme et array, men vil beholde det der allerede står i arrayet. Bruger du ikke Preserve, overskrives alle data... Blot et tip
Avatar billede bennytordrup Nybegynder
14. oktober 2003 - 12:41 #5
martin_moth > hvis du lægger mærke til det, så redimmer jeg arrayet til final størrelse inden, jeg hælder data i. Det er nemlig mindre krævende at redimme an gang til endelig størrelse i forhold til at redim preserve for hvert nyt element.
Avatar billede martin_moth Mester
14. oktober 2003 - 12:56 #6
Yep - det var også blot et tip til bluestrike, hvis han selv ville til at redimme alverdens arrayer :o)
Avatar billede bak Forsker
14. oktober 2003 - 14:09 #7
Jeg kan egentlig ikke forstå at den kører. Benny dimensionerer den endimensionel men bruger den todimensionel senere i koden :-)

En lidt lettere version, hvor man slet ikke behøver at dimensionere:

Dim vaMyArray as variant
vaMyArray=range(cells(1,1), cells(65536,1).End(xlup))
Avatar billede bennytordrup Nybegynder
14. oktober 2003 - 14:12 #8
bak > Det er faktisk rigtigt. Godt set :-)
Avatar billede martin_moth Mester
14. oktober 2003 - 14:13 #9
Nå ja - der gør han da også.
Men den 2. dimension har konstant index = 0 - og det er sikkert default index, hvis der ikke eksisterer en 2. dimension. Hmmm. Der burde dog komme en fejlmeddelse, ville jeg mene. Nok om det - spørgsmålet er jo lukket :o)

PS: ja - mere elegant kan det vel ikke gøres, end du viser her ovenfor (med range...)
Avatar billede martin_moth Mester
14. oktober 2003 - 14:17 #10
Sjovt - jeg får "Subscript out of range" når jeg tilføjer et index til en dimension der ikke eksisterer, som bluestrike gør det. Det burde bluestrike vel også få så. Hmmm. En af de ting jeg ikke forstår, og som jeg accepterer, at jeg bare ikke fatter :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester