01. november 2001 - 08:22Der er
30 kommentarer og 1 løsning
Problemer med at skrive til en liste…
Jeg har et problem … jeg kan ikke rigtig få VBA til at skrive en liste, forstået sådanne : Jeg har en listbox eller listview1 jeg fylder items fra en anden listbox/listview2, denne liste af valg vil jeg gerne kalde listeX, så jeg senere i afviklingen af userformen kan kalde dem frem i listebox/listview2 igen. Jeg har prøvet, at oprette et array, men det lykkes ikke rigtig for mig. Så har jeg prøvet, at oprette en ny listbox/listviewX, der knytter sig til listeX, men afviklingen af userformen bliver meget langsom!!
Ja X er variabel, som binder sig til en entrycount, så listeX bliver unik. som jeg forstår kodestumpen, indlæses en lisetX, med antal items som i listView1. så langt så godt. men listeX skal også kunne fremkaldes i listbox/listview igen (runtime) og her er mit store problem.. :)) håber jeg har forståer korrekt.
Jeg forstår det således. Du dobbeltklikker på et Item i dit listview, hvorefter Item\'et skal tilføjes listeX ((((jeg har stadig ikke Excel - så dette er lidt frihånds))))
Øverst i kodemodulet for Userformen har du: Dim listeX() As String Dim ix As Integer, iz As Integer
Private Sub ListView1_DoubleClick() ix = ix +1 Redim Preserve listeX(ix) listeX(ix) = ListView1.(kan ikke huske hvad det hedder, men det item der bliver klikket på) End Sub
Når nu ix er en modul variabel, så kan du lave følgende
For iz = 1 To ix NyListBox.AddItem listeX(iz) Next iz
Tak for din hjælp, men jeg støder igen ind i samme problem...
Jeg har følgende
Private Sub Commandbutton1_Click For ix = 0 To ListBox2.ListCount - 1 ReDim Preserve listeX(ix) listeX(ix) = ListBox2.list(ix) Next ix End Sub
Private Sub CommandButton2_Click() ListBox3.Clear For iz = 1 To ix ListBox3.AddItem listeX(iz) Next iz End Sub
(eks. opstilling) som du ser skal listeX oprettelsen (af Items i listbox2) først ske ved aktivering af cb1. nu er listen oprettet, og ved aktivering af cb2 skal den indlæses i listbox3
Efter linien For iz = 0 To ix skriver du Debug.Print listeX(iz) på en linie for sig selv. Tryk Ctrl+G for at få vist debug informationsbilledet, således du kan se hvilke værdier der bude komme i din listbox Inden FOR linien kan du f.eks. skrive Debug.Print ix så du kan aflæse hvilken værdi ix antager.
ix og iz antager begge de rigtige værdier... grunden til jeg kun fik den første værdi var, at jeg fik erklæringen af ix, iz slettet. nu får jeg igen Subscript out of range... :((
Jeg er heller ikke på sikker grund, men jeg mener at redim(ix) angiver at listX kan indeholde ix elementer, og første redim vil så redimme til 0 elementer. dvs at hvis der er 2 elementer vil der kun være redim til 1 For ix = 0 To ListBox2.ListCount - 1 ReDim Preserve listeX(ix) listeX(ix) = ListBox2.list(ix) Next ix
redim plejer at hænge tæt sammen med den måde, som du dim\'er din variabel, altså har du skrevet Dim x(1 To 5), så får du fejl på på ReDim i dette interval, men vi har defineret variablem som Public listeX() - altså intet redim problem.
Fejlen opstår et andet sted, nemlig der hvor listeX() skal indsættes i en anden listbox - der lyder noget underligt for mig.
Private Sub CommandButton2_Click() ListBox3.Clear For iz = 0 To ix -1 ListBox3.AddItem listeX(iz) Next iz End Sub
Når f.eks. antager ix = 0 to 5 så bliver ix faktisk = 6 - sjovt nok, og så får du Sub....range ved For iz=0 To ix derfor skal du have -1 efter ix (som vist)
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.