Avatar billede bambus Nybegynder
01. november 2001 - 08:22 Der 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!!
01. november 2001 - 08:43 #1
Skal det forståes således, at listeX er en almindelig variabel ?

Jeg har ikke Excel på denne maskine, så jeg kan ikke teste, men hvis jeg forstår det rigtigt, så kunne det ligne nedenstående - prøv det.

Dim listeX() As String
Dim ix As Integer
For ix = 0 To ListView1.Count - 1
    Redim Preserve listeX(ix)
    listeX(ix) = ListView.List(1)
Next ix

Mvh
Flemming
01. november 2001 - 08:46 #2
Næstsidste linie er der fejl i jeg ville have skrevet...
listeX(ix) = ListView1.List(ix)
Avatar billede bambus Nybegynder
01. november 2001 - 08:48 #3
okay prøver lige :))

Listview har ListView.Count som mulighen, men
Listview1.ListItems.Count (bare en oplysning)
Avatar billede bambus Nybegynder
01. november 2001 - 08:49 #4
hmmm glemte et ikke mellem har og Listview i første linie!
Avatar billede bambus Nybegynder
01. november 2001 - 09:06 #5
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.
01. november 2001 - 10:17 #6
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

Hjalp det - eller er jeg på vildspor !
Avatar billede bambus Nybegynder
01. november 2001 - 10:37 #7
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

problemet opstår i linien

listbox3.AddItem listeX(iz)

får følgende fejl Subscript out of range

01. november 2001 - 10:43 #8
prøv denne her for cb2

Private Sub CommandButton2_Click()
    ListBox3.Clear
    For ix = 0 To ListBox2.ListCount - 1
        ListBox3.AddItem listeX(ix)
    Next ix
End Sub

Avatar billede bambus Nybegynder
01. november 2001 - 10:49 #9
listcount på listbox2 går ikke.
listbox2 er allerede fyldt med nye data, som skal oprettes i ListeY, derfor dette krumspring med oprettelse af lister
01. november 2001 - 10:55 #10
OK

Dette bør kunne virke, hvis du ikke har brugt ix til andet i mellemtiden (fra cb1 til cb2) iz er ændret til at køre fra 0 To ix

ix skal nok defineres således i toppen af modulet
Public ix As Integer

Private Sub CommandButton2_Click()
    ListBox3.Clear
    For iz = 0 To ix
        ListBox3.AddItem listeX(iz)
    Next iz
End Sub

Avatar billede bambus Nybegynder
01. november 2001 - 11:06 #11
Fatter det ikke....
samme fejl:
Subscript out of range???
Avatar billede bambus Nybegynder
01. november 2001 - 11:10 #12
ja ok der er nok sket en fejl..
men nu får jeg kun det første item i listbox2 oprettet i listbox3...
nu sker der da noget
01. november 2001 - 11:36 #13
Kender du funktionen Debug ?

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.
Avatar billede bambus Nybegynder
01. november 2001 - 11:39 #14
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... :((
Avatar billede bambus Nybegynder
01. november 2001 - 11:48 #15
hmmm ved Dedug
ix = 2
iz = 0
Avatar billede bambus Nybegynder
01. november 2001 - 11:50 #16
ups nu går det alt for stærkt..

der er to items i listbox2
så ix, iz er vel ok .
01. november 2001 - 11:51 #17
siger du nu, at det virker !
Avatar billede bambus Nybegynder
01. november 2001 - 11:53 #18
:( ^1000

Samme fejl.!!

Sub... range
01. november 2001 - 11:55 #19
kan du sende mig noget fd@win-consult.com ?
Avatar billede bambus Nybegynder
01. november 2001 - 11:57 #20
AK ja
01. november 2001 - 12:04 #21
forstår dig.
Avatar billede bak Forsker
01. november 2001 - 12:09 #22
Prøv lige i dim redim sætning at at skrive:
ReDim Preserve listeX(ix + 1)
01. november 2001 - 12:12 #23
bak>> hvad vil det kunne ændre ?
01. november 2001 - 12:13 #24
ReDim ligger jo inden i en ForNext lykke.
Avatar billede bambus Nybegynder
01. november 2001 - 12:15 #25
virker perfekt :))
Avatar billede bak Forsker
01. november 2001 - 12:16 #26
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

Avatar billede bambus Nybegynder
01. november 2001 - 12:19 #27
ja nu har jeg jo et lille problem... jeg ville gerne dele pointene  50/50, men den går nok ikke.....?
01. november 2001 - 12:23 #28
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.
01. november 2001 - 12:31 #29
Løsningen er

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)
01. november 2001 - 12:32 #30
0,1,2,3,4,5 = 6 gange
Avatar billede bambus Nybegynder
01. november 2001 - 13:05 #31
Okay :))
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