Listbox op Userform - tijdsnotatie

Status
Niet open voor verdere reacties.

Kwabbernoot1980

Gebruiker
Lid geworden
10 aug 2011
Berichten
32
Hallo iedereen

hier ben ik weer met 2 vragen:

1) ik heb op een userform 10 Listboxen waarin ik mijn gegevens oplaad vanuit een Excel werkblad.
Listbox 2 is beginuur en Listbox 3 is einduur. Ik krijg echter kommagetallen in deze listboxen. Iemand een idee hoe ik de uren correct kan weergeven zoals in mijn Excel werkblad?

2) in de combobox waarin ik allemaal datums laad staan verschillende dubbele datums. Is er een manier waarbij ik enkel unieke datums kan weergeven? Indien er ook een mogelijkheid bestaat zou ik ze ook graag op volgorde weergeven?

alvast bedankt voor de moeite

Dave


Code:
Private Sub UserForm_Initialize()

st = Sheets("NAWlijst").Range("B2:B6000")
sq = Split(String(UBound(st), "|"), "|")
For j = 1 To UBound(st)
    sq(j) = st(j, 1)
Next
ComboBox1.List = sq

ListBox1.Clear
ListBox3.Clear
ListBox4.Clear
ListBox5.Clear
ListBox6.Clear
ListBox7.Clear
ListBox8.Clear
ListBox9.Clear
ListBox10.Clear
ListBox2.Clear

End Sub

Code:
Private Sub ComboBox1_Change()




FindValue = ComboBox1.Value

With Worksheets("NAWlijst")
    Set c = .Range("B2:B6000").Find(FindValue, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            ListBox1.AddItem (.Cells(c.Row, 2))
            ListBox2.AddItem (.Cells(c.Row, 3))
            ListBox3.AddItem (.Cells(c.Row, 4))
            ListBox4.AddItem (.Cells(c.Row, 9))
            ListBox5.AddItem (.Cells(c.Row, 10))
            ListBox6.AddItem (.Cells(c.Row, 12))
            ListBox7.AddItem (.Cells(c.Row, 77))
            ListBox8.AddItem (.Cells(c.Row, 78))
            ListBox9.AddItem (.Cells(c.Row, 79))
            ListBox10.AddItem (.Cells(c.Row, 80))
            
            Set c = .Range("B2:B20").FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
 
End Sub
 
Zou het zo werken?
Code:
ListBox1.AddItem format(.Cells(c.Row, 2), "hh:mm")
Of:
Code:
ListBox1.AddItem cdate(.Cells(c.Row, 2))

De combobox in volgorde zou zo kunnen.
Code:
With Sheets(1)
    Dim cUnique As New Collection
      On Error Resume Next
        For Each cell In .Range("C2:C" & .Cells(.Rows.Count, 3).End(xlUp).Row)
          cUnique.Add cell.Value, CStr(cell.Value)
        Next cell
     On Error GoTo 0
    
    For I = 1 To cUnique.Count - 1
        For J = I + 1 To cUnique.Count
            If cUnique(I) > cUnique(J) Then
                cUnique.Add cUnique(J), , , I
                cUnique.Add cUnique(I), , , J + 1
                cUnique.Remove I
                cUnique.Remove J
            End If
        Next
    Next
        For Each cl In cUnique
          sq = sq & "|" & cl
        Next
    Me.ComboBox1.List = Split(Mid(sq, 2), "|")
  End With
End Sub
 
Laatst bewerkt:
Bedankt voor je antwoord Harry! Vraag 1 is opgelost, vraag 2 geraak ik niet zo goed uit...
'k ga wel blijven zoeken :confused:

Wat ik ook niet wegkrijg bij m'n bovenstaande code is dat ik boven mijn selectie in de combobox een witregel heb. Als ik hier op klik krijg ik in de listboxen 5 rijen witregels. Dit vind ik vreemd aangezien mijn selectie toch B2:B6000 is. Ik zou graag mijn data in de combobox inladen zonder die witregel. Heeft iemand hier ervaring mee?

alvast bedankt
Dave
 
Zet je bestandje hier eens op het forum Dave.
Zadel je de helpers niet op om iets na te bootsen.
 
Bekijk bijlage Nieuw - Microsoft Office Excel-werkblad.xlsm

Harry

hierbij het bestand. Probleem is dus dat in de combobox op het userform boven de data een witregel komt. Klik ik hier op, of op een witregel onder de data gaat het in de listboxes 5 rijen naar onder.

Wat zou ik willen bereiken: unieke data in de combobox en weergegeven op volgorde.
In een volgende fase zou ik dan de data ik in de listboxes opvraag d.m.v. de combobox wegschrijven naar de excel badges.

Dit is het laatste dat moet gebeuren aan mijn programma (veel groter dan in het bestand), maar onnodig om dit mee up te loaden. Ik geraak er alleen niet aan uit. :(

alvast bedankt voor de moeite.

groetjes
Dave
 
Dave,

Code:
Private Sub UserForm_Initialize()
With Sheets("NAWlijst")
  Set st = .Range("B2:B" & .Cells(Rows.Count, 2).End(xlUp).Row)
    Dim cUnique As New Collection
      On Error Resume Next
        For Each cell In st
          cUnique.Add cell.Value, CStr(cell.Value)
        Next cell
     On Error GoTo 0
    
    For i = 1 To cUnique.Count - 1
        For j = i + 1 To cUnique.Count
            If cUnique(i) > cUnique(j) Then
                cUnique.Add cUnique(j), , , i
                cUnique.Add cUnique(i), , , j + 1
                cUnique.Remove i
                cUnique.Remove j
            End If
        Next
    Next
        For Each cl In cUnique
          sq = sq & "|" & cl
        Next
      Me.ComboBox1.List = Split(Mid(sq, 2), "|")
    For i = 1 To 10
      Me("ListBox" & i).Clear
      Me("Label" & i + 2).Font.Bold = True
    Next i
   Label1.Font.Bold = True
 End With
End Sub
 
Harry

je bent de max! Dit is het helemaal. Hartelijk bedankt, dit had ik nooit zelf gevonden! :thumb::thumb::thumb:

vele groetjes
Dave
 
Harry,

toch nog een klein probleempje. De datum rangschikken lukt perfect, de bijhorende data in de listboxen vullen ook. Enkel wanneer ik bijvoorbeeld 1/05/2012 kies, geeft hij ook de gegevens van 11/05 & 21/05 weer. Ik moet dus op één of andere manier 01/05/2012 verkrijgen als datum.

Als ik al mijn datums omzet naar tekst rangschikt de combobox niet meer alfabetisch.

Weet jij hier nog raad mee? Het liefst zou ik natuurlijk de datums als datums behouden en niet als tekst, ik moet ze immers nog terug inladen op een ander userform.

alvast bedankt

Dave
 
Upload je recente bestand eens met de macrocode waarmee je de listboxen vult.
 
Harry

in bijlage een deel van het bestand. Het volledige bestand is te groot om up te loaden. Zoals je kan zien bij het selecteren van bijvoorbeeld 1/05/2012 krijg je ook 11/05/2012 mee in de lijst. In de Excel geeft hij wel 01/05/2012 weer, maar in de formulebalk is dit 1/05/2012. Dit zou verholpen moeten worden.

alvast bedankt!

met vriendelijke groeten
Dave
 

Bijlagen

Dave,

Code:
Private Sub ComboBox1_Change()
 FindValue = ComboBox1.Value
  With Worksheets("NAWlijst")
[COLOR="#FF0000"]    Set c = .Range("B2:B6000").Find(DateValue(FindValue), , xlFormulas, xlWhole)[/COLOR]
If Not c Is Nothing Then
 
Harry

nog een vraag, al weet in niet of dit mogelijk is.
Als ik nu een datum selecteer krijg ik mooi alle gegevens uit de sheet onder elkaar in mijn listboxen.
Is er een mogelijkheid om bij een datumkeuze in de combobox:
1) de datums in listbox 1 gerangschikt te krijgen (zo is het nu), want die zijn verbonden aan de combobox
2) daarna de zalen mooi onder elkaar gerankschikt in listbox 6
3) daarna de beginuren mooi onder elkaar in listbox 2

bedoeling is dat ik dan een mooi rapport kan trekken vanuit vba. Ik had een code om listbox 6 in alfabetische volgorde te brengen, maar dan denkt hij niet meer in rows, waardoor enkel die data gerangschikt wordt en dus mijn listboxdata niet meer juist is.

met vriendelijke groeten
Dave
 
of:
Code:
Private Sub UserForm_Initialize()
  On Error Resume Next

  Set sq = New Collection
  With sq
      For Each cl In sheets("NAWlijst").Cells(2, 2).Resize(Rows.Count - 2).SpecialCells(2)
        If .Count = 0 Then
            .Add cl, Format(cl)
        ElseIf .Count = 1 Then
            If cl < .Item(1) Then .Add cl, Format(cl), 1
            If cl > .Item(1) Then .Add cl, Format(cl)
        Else
            j = 1
            Do Until cl > .Item(j) And cl < .Item(j + 1)
              j = j + 1
              If j = .Count Then Exit Do
            Loop
            .Add cl, Format(cl), , j
        End If
      Next
      
      ReDim sn(.Count - 1)
      For j = 0 To .Count - 1
        sn(j) = Format(.Item(j + 1), "dd-mm-yyyy")
      Next
      ComboBox1.List = sn
  End With
end Sub

en

Code:
Private Sub ComboBox1_Change()
  On Error Resume Next
  With Sheets("NAWlijst").Cells(2, 2).CurrentRegion
    .AutoFilter 2, ComboBox1.Value
    .Offset(1).Copy .Cells(1).Offset(, .Columns.Count + 10)
    .AutoFilter
    For j = 1 To 10
      Me("listbox" & j).List = .Cells(1).Offset(, .Columns.Count + 9 + Choose(j, 2, 3, 4, 9, 10, 12, 60, 61, 54, 26)).EntireColumn.SpecialCells(2).Value
    Next
  End With
End Sub
 
Laatst bewerkt:
Bedankt voor de code SNB.

Echter als ik deze in het bovenstaande bestand toepas krijg ik enkel de datums in mijn combobox, maar geen gegevens in de listboxen.
Weet je wat het probleem kan zijn?

met vriendelijke groeten
Dave
 
Hellow iedereen

iemand anders een oplossing voor mijn probleempje? Ik zal nog even proberen uit te leggen wat ik wil bereiken. Ik heb meedere listboxen. Hierboven staat een combobox waarin gekozen kan worden op datum. Bij de datumkeuze worden de meerdere listboxen gevuld (o.a. contactpersoon, zaal, beginuur...) met de bijhorende rij(en) uit een excel sheet. Ik wil het nu zo voor mekaar krijgen dat hij na keuze van datum eerst rangschikt op zaal (listbox 6) en daarna op beginuur (listbox 2). Op die manier staat alles netjes gerangschikt en heb ik een mooi overzicht.

Ik had het voor mekaar gekregen om bijvoorbeeld listbox 6 te rangschikken, maar wanneer ik dan een 2e datum kies komt mijn rij in alles listboxen niet meer overeen, maar filtert hij enkel listbox 6. Dit is uiteraard niet de bedoeling.

Hopelijk heeft iemand een oplossing.

alvast bedankt

groetjes
Dave
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan