• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

listbox: voorwaarden uitbreiden

Status
Niet open voor verdere reacties.

Spiesse

Gebruiker
Lid geworden
14 jul 2011
Berichten
902
beste forumisten,

onderstaande macro toont me bij het opstarten van een bestand een userform met twee listboxen. graag had ik in beide listboxen een extra voorwaarde toegevoegd, zijnde:

als in range ("p2:p3000) "ok, aangegeven" staat, dan hoeft de naam niet in de listbox te komen staan...

dus de code zou moeten aangepast worden dat deze voorwaarden vervuld worden voor verschijnen in listbox:
en kolom N = vandaag en kolom p <> ok, aangegeven...

wie kan je steuntje geven?

groeten en bedankt!
spiesse

Code:
Private Sub UserForm_Initialize()

Dim rij As Range
Dim cell As Variant

' De regels inlezen en plaatsen in de ComboBox en ListBox
' Eventuele lege regels zullen niet worden meegenomen

With Sheets("doppers")
Set rij = .Range("n2:n3000")
End With

For Each cell In rij
If cell.Value = Date Then
ListBox1.AddItem cell.Offset(0, -13).Value
End If
Next

With Sheets("doppers")
Set rij = .Range("n2:n3000")
End With

For Each cell In rij
If cell.Value = Date + 1 Then
ListBox2.AddItem cell.Offset(0, -13).Value
End If
Next

End Sub
 
Zou dit voldoende kunnen zijn?

Code:
Private Sub UserForm_Initialize()

Dim rij As Range
Dim cell As Variant

' De regels inlezen en plaatsen in de ComboBox en ListBox
' Eventuele lege regels zullen niet worden meegenomen

With Sheets("doppers")
Set rij = .Range("n2:n3000")
End With

For Each cell In rij
If cell.Value = Date  [COLOR="#FF0000"]AND cell.offset(0,2) <> "ok, aangegeven" [/COLOR]Then
ListBox1.AddItem cell.Offset(0, -13).Value
End If
Next

With Sheets("doppers")
Set rij = .Range("n2:n3000")
End With

For Each cell In rij
If cell.Value = Date + 1 [COLOR="#FF0000"]AND cell.offset(0,2) <> "ok, aangegeven" [/COLOR] Then
ListBox2.AddItem cell.Offset(0, -13).Value
End If
Next

End Sub
 
Laatst bewerkt:
Gebruik nooit additem om een listbox of combobox te vullen, maar de eigenschap .List.

bijv.

Code:
Private sub Userform_initialize()
  Listbox1.List=Application.Index([N2:N3000], Application.Transpose(Filter([transpose(if((P2:P3000)="ok","~",row(2:3000)))], "~", False)))
end sub
 
Laatst bewerkt:
hey cobbe,

bedankt voor je effort :) helaas krijg ik een object-fout...

wie doet iets mis :)

gr
spiesse
 
snb, kan het zijn dat ik dan allemaal datums krijg? :) ik zou kolom a als resultaat moeten krijgen... :s

de namen heb ik al tevoorschijn kunnen toveren door de indexverwijzing aan te passen... nu nog enkel de voorwaarden proberen integreren
 
Laatst bewerkt:
Stel geen vragen over resultaten zonder een werkboek te plaatsen....:confused:
 
snb,

ik denk dat het in principe niet nodig is om een werkboek te plaatsen... niet dat ik niet wil hoor :)
de macro die ik gepost heb omvat meer dan de helft van hetgeen ik wil... enkel moet daar nog de extra voorwaarde in bijkomen dat kolom P <> ok, aangegeven...
het resultaat dat moet verschijnen staat in kolom A

groeten,
spiesse
 
Het is altijd nodig dat je een voorbeeldbestand toevoegt. Overschat je eigen uitlegcapaciteiten niet.
 
Deze regel is genoeg:

Code:
Private Sub Userform_initialize()
  ListBox1.List = Filter([transpose(if(doppers!A2:A3000="","~",if(doppers!P2:P3000="ok","~",if(doppers!C2:C3000=today(),"~",doppers!A2:A3000))))], "~", False)
End Sub

PS. wees slim zet in plaats van "ok, aangegeven', alleen 'ok' in de cel. Even effektief, maar een stuk gemakkelijker.
Later zul je merken dat je dit gegeven niet eens meer nodig hebt.
 
Laatst bewerkt:
En wil je toch met je eigen code verderwerken kan je ook deze gebruiken:
Code:
Private Sub Userform_initialize()

Dim rij As Range
Dim cell As Variant

' De regels inlezen en plaatsen in de ComboBox en ListBox
' Eventuele lege regels zullen niet worden meegenomen

With Sheets("doppers")

For Each cell In .Range("N2:N3000")
 If cell.Value = Date And cell.Offset(0, 2) = "" Then
  ListBox1.AddItem cell.Offset(0, -13).Value
End If
Next

For Each cell In .Range("N2:N3000")
 If cell.Value = Date + 1 And cell.Offset(0, 2) <> "ok, aangegeven" Then
  ListBox2.AddItem cell.Offset(0, -13).Value
End If
Next
End With
End Sub

dan kan je de code van snb gebruiken om te leren hoe het eigenlijk zou moeten.:)
 
@Cobbe

Het gebruik van specialcells maakt ook die code al een stuk eenvoudiger; en het gebruik van .List ook een merkbaar stuk sneller.

Code:
For Each cell In .Range("P2:P3000").specialcells(4)
  If cell.Offset(, -2) = date Then c01=c01 & "|" & cell.Offset(, -13)
Next
Listbox1.list=split(mid(c01,2),"|")
 
ja jongens, da wordt ier ingewikkeld... dewelke mag of kan ik nu gebruiken? :)
 
Je kan kiezen welke, ze werken alletwee maar de efficiëntste is natuurlijk die van snb.
Maar ik denk dat de mijne beter te volgen is voor een (bijna)leek.
Voor relatief kleine bestanden maakt de keuze niet echt veel verschil.
 
bijna leek :)

af en toe kan ik iets moois uit mijn mouw schudden, en af en toe heb ik hulp nodig :)

waarbij ik voor de listbox meer hulp nodig heb dan eigen inbreng :)

ik hou jullie op de hoogte
 
guys,
even een uitbreiding:

als ik op een listitem klik, dan komt nu een userform tevoorschijn met een textbox. daar kan ik een code invoeren en een klik op een commandbutton plaatst de invoer dan in een cel.

bestaat er een manier om bij een klik op een listitem de cel in het bestand te selecteren. van daaruit kan ik dan de commandbutton aanpassen om de code in te voeren...

dus ik mankeer eigenlijk enkel de selectie van de desbetreffende cel... ter info: de naam in de listbox staat in de A-kolom

na enig diepgaand speurwerk en aanpassing deze gevonden
Code:
Private Sub ListBox3_Click()
Dim I As Long
    With Me.ListBox3
        For I = .ListCount - 1 To 0 Step -1
            If .Selected(I) Then
                Sheets("doppers").Cells(I + 3, 1).Select
            'Sheets("doppers").Rows(I + 3).Select
            End If
        Next I
    End With
UserForm2.Show
End Sub
 
Laatst bewerkt:
Vermijd het gebruik van meer dan 1 userform.
Vermijd het gebruik van Select.
Zet een textbox in het userform dat pas zichtbaar wordt als er een geldige waarde is geselecteerd in listbox3.

Code:
Private Sub ListBox3_Change()
     Textbox1.visible=listbox3.listindex>-1
     Textbox1.Text=listbox3.value
End Sub
 
Laatst bewerkt:
snb,

moet ik dan ook een listbox_click() behouden?

sorry voor de vele vragen maar ik ben echt nie goed in listboxen en koppelingen naar userforms...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan