Avatar billede bambus Nybegynder
13. november 2001 - 09:21 Der er 17 kommentarer og
1 løsning

Ændringer af et to dimensionalt områdei vba

Jeg har som sagt et to dimensionalt område i vab, mit problem er bare, at alt data slettes når jeg  bruger ReDim jeg medsender lige en kodestump for bedere beskrivelse!!

With ListView2.ListItems.Add(, , moDragItem1)
End With
 
Listnr = TextBox1.Text
For i = 0 To ListView2.ListItems.Count
    ReDim MyMatrix(Listnr, i)
    MyMatrix(Listnr, i) = moDragItem1
Next i
   
End Sub

Private Sub Commandbutton1_Click()
ListView2.ListItems.Clear
Listnr = TextBox1.Text
    For i = 0 To UBound(MyMatrix, 2)
        With ListView2.ListItems.Add(, , MyMatrix(Listnr, i))
        End With
    Next i
End Sub
???? et problem jeg er ret træt af!, hvis jeg opretter er område på (100,100) er mine problemer for så vidt løst... men alligevel..
Avatar billede bak Forsker
13. november 2001 - 09:59 #1
prøv at flytte dim redim ud af løkken:
listnr=textbox1.text
antal=listview2.ListItem.count
redim MyMatrix(listnr, Antal)
for i = 0 to Antal
MyMatrix(listnr, i)=moDragItem1
next i
13. november 2001 - 10:04 #2
Redim - sletter alle data
Redim Preserve - beholder de værdier, som allerede findes i dit array.

Redim Preserve MyMatrix(Listnr, i)
Avatar billede bak Forsker
13. november 2001 - 11:53 #3
Nåååh, det er det preserve gør. Tak for det, Flemming
13. november 2001 - 11:55 #4
:-) ingen årsag :-)
Avatar billede bambus Nybegynder
13. november 2001 - 11:56 #5
Ja men med ReDim Preserve er det kun muligt, at ænder i en et et-dimensionalt array..
13. november 2001 - 12:02 #6
Ja, men du kan godt ændre den sidste dimention med Redim Preserve

Alternativt er at smide indeholdet at MyMatrix over i et midlertidigt matrix - Redim MyMatrix(listnr, listview2.ListItem.count), og så smide data tilbage.
Avatar billede bak Forsker
13. november 2001 - 12:02 #7
Bambus>har du prøvet at flytte redim ud?
Avatar billede bambus Nybegynder
13. november 2001 - 12:09 #8
Ja det er muligt, at ændre den sidste dimension, mit problem(står ikke i koden) er, at jeg ændre i 8 rækker åp en gang
Listnr1, listnr2, list......
mit problem er som sagt løst med MyMatrix(100,100), her kan jeg frit skrive og hente data uden problemer(indtil min matrix overskrider 100,100)
Hvorfor SKAL msva slette mine data, hvis jeg bruger ReDim?????
Den som svare får point!!!!
Det bliver totalt umuligt, at finde rundt i to matriser at denne størrelse på samme tid..... har jeg ret???
13. november 2001 - 12:12 #9
ja, det har du ret i. Jeg synes nu også, at du skal forsøge BAK\'s forslag, med mindre der allerede er data i inden du skal gøre din ForNext løkke, så hjælper den ikke.

Jeg kan ikke forklare dig hvorfor.
Avatar billede bambus Nybegynder
13. november 2001 - 12:18 #10
Og det er der... jeg gir´lige min løsning:

Listnr = TextBox1.Text
Rownr = 0
    For i = 0 To 100
        If MyMatrix(Listnr, i) <> \"\" Then
            With ListView2.ListItems.Add(, , MyMatrix(Listnr, i), 1, 1)
            .SubItems(1) = MyMatrix(Listnr + 1, i)
            .SubItems(2) = MyMatrix(Listnr + 2, i)
            .SubItems(3) = MyMatrix(Listnr + 3, i)
            .SubItems(4) = MyMatrix(Listnr + 4, i)
            End With
        End If
    Next i
End Sub

Virker som sagt indtil (100,100) overskrides ØV

IDE:

MyMatrix(1000,1000) osv osv..... = dum løsning
jeg lader dog spørgsmålet forblive åbent en tid
Avatar billede bak Forsker
13. november 2001 - 14:07 #11
hvis du altid har 8 listnr, så kan du jo redim sådan her:

redim MyMatrix(8, listview2.ListItem.count)
ind du kører løkken
Avatar billede bambus Nybegynder
13. november 2001 - 14:17 #12
nej jeg har altid 8, 16, 24, 32 osv osv listnr´s
og til tider også 8, 24, 32 osv altså ingen mønster
13. november 2001 - 14:22 #13
Her er et svar fra en australier:
You can\'t redim preserve a matrix except in its last dimension. Why probably is because of the way Excel stores the array.  Alan Beban has
written the code to do it in his utilities.  Otherwise, you would need to create a new array and transfer the data.

Another approach would be to have a single dimension array and use your own logic to manage it as a two dimensional array - that might give you some insight as to why you can\'t redim preserve the first dimension.

------------------------------
Det kan med andre ord ikke lade sig gøre, men som han skriver, så kan du køre to sideløbende et-dimensioners array\'s, som du så selv skal holde lidt styr på.
Avatar billede bambus Nybegynder
13. november 2001 - 14:33 #14
Ja jeg ser problemet...
Avatar billede bambus Nybegynder
13. november 2001 - 14:36 #15
dog kan det stadig virke med en (100,100) matrix..
problemer er så, at slette data i denne (det giver efterhånden en hel del kode)
13. november 2001 - 14:47 #16
For iX = 0 to 100
    For iY = 0 To 100
        MyMatrix(iX,iY)=\"\"  \'Hvis MyMatrix er at typen String
    Next iY
Next iX
Avatar billede bambus Nybegynder
14. november 2001 - 08:37 #17
Ja :-))
14. november 2001 - 08:39 #18
Godt :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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