Avatar billede rotroc Nybegynder
08. marts 2007 - 19:37 Der er 8 kommentarer og
1 løsning

VBA UserForm - Hvordan flyttes fra ListBox1 til ListBox2

Hej Eksperter
Har lavet en User Form kaldet ”Selection Form” med to List Boxe. Ved at markere en linie i ListBox1 og efterfølgende tryk på knappen AddButton skal denne linie kopieres fra ListBox1 over i ListBox2. (altså en List Box transfér).

- Valgmulighederne i ListBox1 skal hentes fra et Excel Ark kaldet ”Certificates” hvori
de forskellige valg er angivet i kolonne A1:A12. For nemhedens skyld  regner jeg med at navngive disse celler ”AvailableCertificates”. 

Idet jeg i VBA Editor ser på Properties for ListBox1 ser jeg en celle kaldet RowSource – jeg antager at det er her at man kan angive kildecellerne som jo var det navngivne område AvailableCertificates på arket Certificates.

Spørgsmål:
-    I cellen RowSource hvordan angiver jeg her korrekt hvorfra ListBox1 skal finde  valgmulighederne ?

- Med hvilken VBA kode kan jeg få kopieret den valgte linie i ListBox1 til ListBox2 ved tryk på knappen AddButton ?

-    Kilde cellerne (navngivet område AvailableCertificates) A1:A12 kan i fremtiden ske at udvide sig til A1:A20. Kan jeg i min VBA kode tage højde for dette ved at RowSource i ListBox1 properties altid søger og medtager sidste linie i det navngivne område AvailableCertificates ?

-    Kan kildearket Certificates være et skjult ark i samme dokument som indeholder min SelectionForm ?

-    I stedet for at angive RowSource i cellen for ListBox1 properties kunne det så være muligt
At angive dette dette i alm VBA kode som feks:
Sub ShowDialog()
      SelectionForm.ListBox1.RowSource = ???????
End Sub

Mvh rotroc
Avatar billede kabbak Professor
08. marts 2007 - 19:45 #1
det sidste først:
ListBox1.RowSource = AvailableCertificates

der kommer mere
Avatar billede kabbak Professor
08. marts 2007 - 19:51 #2
Private Sub AddButton_Click()
Dim X As Integer
ListBox2.Clear ' tømmer boksen
' Jeg går ud far at du har multiselect på listbox1
For X = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(X) Then ListBox2.AddItem ListBox1
Next
End Sub
Avatar billede rotroc Nybegynder
09. marts 2007 - 22:37 #3
kabbak

Yes - mine valgmuligheder fremkommer nu i ListBox1 når SelectionForm vises.
Jeg kan samtidigt vælge en (og kun en) mulighed fra ListBox1 og når knappen Add trykkes kopiers den over i ListBox2. Perfekt.
Dog er problemet nu at jeg skal kunne vælge og kopiere flere liner end blot en.
Hvis jeg ønsker at kopiere endnu en linie fra ListBox1 til ListBox2 sker der  det at den først kopierede i ListBox2 bare skifter navn istedet for at der i ListBox2 bliver tilføjet endnu en linie.  Endnu en overvejelse er at det skal være muligt at kopiere den samme linie flere gange så den hver gang fremkommer i ListBox2.
Avatar billede kabbak Professor
09. marts 2007 - 22:44 #4
Prøv at kikke på Multiselect i properties for Listbox1, den står normalt til single, sæt den til multi, så kan du vælge flere ad gangen
Avatar billede rotroc Nybegynder
12. marts 2007 - 07:55 #5
Æv  - hvis Mulitselect vælges kommer fejlmelding: Run time Error - type mismatch. Ved ikke hvad det betyder og hvad der trigger denne fejl, men den fremkommer kun hvis jeg vælger Multiselect i properties for ListBox1. Har derfor slået tilbage til SingleSelect. Hmm - der må være noget galt med min kode..
Jeg har mistanke om at det er relateret til hvorledes jeg angiver min
RowSource. Se lige på neteksemplet her, hvor der i en ListBox1 angives valgbare måneder MEN med koden AddItem:

Sub ShowDialog()
    UserForm1.ListBox1.RowSource = ""
'  Add some items to the ListBox
    With UserForm1.ListBox1
        .RowSource = ""
        .AddItem "January"
        .AddItem "February"
        .AddItem "March"
        .AddItem "April"
        .AddItem "May"
        .AddItem "June"
        .AddItem "July"
        .AddItem "August"
        .AddItem "September"
        .AddItem "October"
        .AddItem "November"
        .AddItem "December"
    End With
    UserForm1.Show
End Sub

Også i dette eksempel kan der flyttes fra ListBox1 til ListBox2 ved tryk på knappen Add. Her er koden for dette:
Private Sub AddButton_Click()
    Dim i As Integer
   
    If ListBox1.ListIndex = -1 Then Exit Sub
    If Not cbDuplicates Then
'      See if item already exists
        For i = 0 To ListBox2.ListCount - 1
            If ListBox1.Value = ListBox2.List(i) Then
                Beep
                Exit Sub
            End If
        Next i
    End If
    ListBox2.AddItem ListBox1.Value
End Sub

Ovenstående kode virker som den skal, og det er også muligt at kopiere flere items, også af samme type, fra ListBox1 såfremt der er tikket af for accept af for dette med et flueben. (ListBox1 properties er desuden sat til Single)

Min kode med kildedata afviger fra neteksemplet idet jeg ikke angiver RowSource med .AddItem linier,  men med flg enkelte linie:
Sub ShowDialog()
'  Tilføjer items til ListBox1
        SelectionForm.ListBox1.RowSource = "AvailableCertificates"
               
End Sub

Årsagen er at jeg ønsker en navngiven Range som jeg skal have på et ark.

Samtidig har jeg flg kode for knappen Add:
Private Sub AddButton_Click()
Dim X As Integer
ListBox2.Clear ' tømmer boksen
' Jeg går ud far at du har multiselect på listbox1
For X = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(X) Then ListBox2.AddItem ListBox1
Next

End Sub

Desværre er mit problem stadigvæk at der kun kan kopieres en linie til ListBox2. Hvis der vælges en ny linie i ListBox1 og der trykkes Add knap sker der kun det at linien i ListBox2 bare skifter navn.

Har forsøgt alt muligt men kan ikke komme videre. Forslag til løsning modtages meget gerne.
Avatar billede kabbak Professor
12. marts 2007 - 19:12 #6
Prøv at sende et eksempel ark, så kikker jeg på det.
Skriv gerne i arket hvad du ønsker.

kabbak snabela tiscali dot dk
Avatar billede kabbak Professor
12. marts 2007 - 22:21 #7
løsningen er retuneret
Avatar billede rotroc Nybegynder
13. marts 2007 - 19:38 #8
Perfekt - det var lige sådan. Øøhh hvordan er det nu mht pointgivning.
Avatar billede kabbak Professor
13. marts 2007 - 19:39 #9
jeg skal svare først ;-))
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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