Excel VBA etc.

Dexels

Well-known member
Ik ben hier een tooltje aan het maken die dummie proof moet worden, vandaar dat ik met een formulier wil werken in excel.
Heb al een en ander werkend in mijn file (niet het bijgevoegde bestand)

In bijlage heb ik alles beperkt tot het probleem.

Situatie: ik heb een Excel-bestand met een formulier (Formulier 2) waarin drie ComboBox-elementen staan:

ComboBox_verkoper
ComboBox_Sjaar
ComboBox_dossier

Je gegevens staan in het tabblad "lijsten", waar:

Kolom V de "verkopers" bevat die de ComboBox_verkoper vullen.
Kolom U de "jaren" bevat die de ComboBox_Sjaar vullen.
ik wil nu ComboBox_dossier vullen met waarden uit kolom A van het tabblad "lijsten", gefilterd op basis van de invoer in ComboBox_verkoper en ComboBox_Sjaar.

Probleem: In een vorige versie heb ik het voor elkaar gekregen om te filteren met slechts één ComboBox (bijvoorbeeld alleen "verkoper"), maar met een tweede filter en ik probeer om ook op "jaar" te filteren, blijft ComboBox_dossier leeg.
 

Bijlagen

Als je met breakpoints in je code werkt, kan je zien dat je bij het vergelijken van de jaartallen een Integer met een String vergelijkt. Die kunnen dus nooit gelijk zijn aan elkaar. Je zal 1 van de 2 dus moeten casten naar het andere type.
 
ik ben te noob om te begrijpen wat je bedoeld :p
maar ik weet nu waar het waarschijnlijk fout loopt en zal verder aanmodderen en zien of ik het werkend krijg
 
Ik heb de file die je doorstuurde aangepast. Ik heb uiteindelijk de tekst niet alleen omgezet naar een getal (zodat je twee getallen vergelijkt bij de jaartallen), maar ik heb ook de logica aangepast om iets toe te voegen aan de combobox dossier. Want nu controleerde je ook altijd het geselecteerde jaartal, terwijl die niet altijd geselecteerd was. Omgekeerd, je zou ook enkel een jaartal kunnen selecteren, maar er werd altijd gefilterd op een geselecteerde verkoper (die er misschien niet is). Bekijk het eens en heb je nog vragen --> shoot!
 

Bijlagen

ah ik zie dat jij ook iets gedaan had, ff het verschil checken

/edit

man ik moet nog veel leren. Zou misschien beter eens een cursus volgen

ik heb uiteindelijk dit gebruikt en dat lijkt ook te werken

Code:
Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim Rng As Range
    Dim cel As Range

    ' Verwijs naar het werkblad 'lijsten'
    Set ws = ThisWorkbook.Sheets("lijsten")

    ' Vul ComboBox_verkoper met gegevens uit kolom V
    Set Rng = ws.Range("V2:V" & ws.Cells(ws.Rows.Count, "V").End(xlUp).Row)
    For Each cel In Rng
        Me.ComboBox_verkoper.AddItem cel.Value
    Next cel

    ' Vul ComboBox_Sjaar met gegevens uit kolom U
    Set Rng = ws.Range("U2:U" & ws.Cells(ws.Rows.Count, "U").End(xlUp).Row)
    For Each cel In Rng
        Me.ComboBox_Sjaar.AddItem cel.Value
    Next cel
End Sub

Private Sub ComboBox_verkoper_Change()
    FilterComboBox_dossier
End Sub

Private Sub ComboBox_Sjaar_Change()
    FilterComboBox_dossier
End Sub

Private Sub FilterComboBox_dossier()
    Dim ws As Worksheet
    Dim Rng As Range
    Dim cel As Range

    ' Verwijs naar het werkblad 'lijsten'
    Set ws = ThisWorkbook.Sheets("lijsten")

    ' Controleer of ComboBox_verkoper en ComboBox_Sjaar een waarde hebben
    If Me.ComboBox_verkoper.Value = "" Or Me.ComboBox_Sjaar.Value = "" Then Exit Sub

    ' Verwijs naar de gegevens in kolom A, B en C
    Set Rng = ws.Range("A2:C" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)

    ' Leeg de ComboBox voor dossiers
    Me.ComboBox_dossier.Clear

    ' Voeg de gefilterde waarden toe aan de ComboBox voor dossiers
    For Each cel In Rng
        If Trim(cel.Offset(0, 1).Value) = Trim(Me.ComboBox_verkoper.Value) And _
           Trim(cel.Offset(0, 2).Value) = Trim(Me.ComboBox_Sjaar.Value) Then
            Me.ComboBox_dossier.AddItem cel.Value
        End If
    Next cel
End Sub
 
Laatst bewerkt:
Jouw code zorgt er wel voor dat je sowieso voor beide comboboxen een item moet selecteren voor je dossiers worden getoond. Als dat de functionaliteit is die je wenst, kan dat uiteraard geen kwaad!
En de Trim-functie lost je probleem op, maar is in essentie "verkeerd" gebruikt. Maar goed, ik ben blij dat het werkt en dat ik je kunnen helpen heb!
 
Even om te kaderen ik doe dit soort dingen in excel vooral omdat ik het leuk vind om te doen en nieuwe dingen wil leren. Ik heb 0,0 opleiding gehad in excel, laat staan in VBA. Mijn programmatie kennis is ook zeer beperkt.

Maar ik heb een weer een vraag. :p

Ik ben hier een tooltje aan het maken waarin ik mijn kilometers wil bij houden om mijn fiets vergoeding aan te vragen. Maar wil het in de toekomst ook gebruiken om zicht te hebben op mijn 'prestaties' en conditie. (vandaar de extra kolommen).

Ik gebruik in dit projectje redelijk vaak het formula.2 verhaal, maar heb het idee dat dit de boel enorm vertraagt.

Is er iemand ( @Timberwinter ;) ) die hier eens zijn licht op kan laten schijnen?

nog maals met de disclaimer dat ik ook maar iets doe en al blij ben dat het een soort van werkt :D
 

Bijlagen

inmiddels het hele "with" verhaal via een Dim statement en ook wat compacter/leesbaarder gemaakt maar het grossomodo idee blijft
Code:
Private Sub CommandButton1_Click()
    Dim AfstandHeen As String
    Dim Uurheen As String
    Dim Minheen As String
    Dim HRGM As String
    Dim laatsteRij As Long
    
' geen screenupdate tijdens verwerken gegevens
    Application.ScreenUpdating = False
    
' Haal de waarden op uit de TextBoxen
    DATUM1 = Text_DAG.Text
    DATUM2 = Text_MAAND.Text
    DATUM3 = Text_JAAR.Text
    AfstandHeen = Text_Afstand_Heen.Text
    HRGM = Text_HRM_Heen.Text
    Uurheen = Text_Tijd_UUR_Heen.Text
    Minheen = Text_Tijd_MIN_Heen.Text
    Dim wsGegevens As Worksheet

' punten naar kommas
    AfstandHeen = Replace(AfstandHeen, ",", ".")

    
' Ga naar het tabblad 'lijsten'
    Sheets("gegevens").Activate
    
        
      
' Vind de laatste rij in kolom A
    laatsteRij = Cells(Rows.Count, "A").End(xlUp).Row
    
' Voeg de nieuwe invoer toe
    With wsGegevens
    
        Cells(laatsteRij + 1, "A").Value = DATUM1 & "/" & DATUM2 & "/" & DATUM3
        
        Cells(laatsteRij + 1, "B").Formula2 = "=A" & (laatsteRij + 1) & "-26"
        Cells(laatsteRij + 1, "C").Formula2 = "=if(G" & (laatsteRij + 1) & ">0,if(F" & (laatsteRij + 1) & "=Fietsvergoeding!G$6,if(E" & (laatsteRij + 1) & "=Fietsvergoeding!G$5,max(gegevens!C$4:C" & (laatsteRij) & ")+1,""""),""""),"""")"
    
        Cells(laatsteRij + 1, "D").Formula2 = "=if(b" & (laatsteRij + 1) & ">0,Month(b" & (laatsteRij + 1) & ")+1,"""")"
    
        Cells(laatsteRij + 1, "E").Formula2 = "=XLOOKUP(D" & (laatsteRij + 1) & ",LIJSTEN!B$1:B$14,LIJSTEN!A$1:A$14)"
    
        Cells(laatsteRij + 1, "F").Formula2 = "=if(a" & (laatsteRij + 1) & ">0,year(a" & (laatsteRij + 1) & "),"""")"
    
' Heenrit
        Cells(laatsteRij + 1, "g").Value = AfstandHeen
    
        Cells(laatsteRij + 1, "J").Value = Uurheen
    
        Cells(laatsteRij + 1, "K").Value = Minheen
    
    '    Cells(laatsteRij + 1, "B").Formula2 = berekening gem snelheid
        Cells(laatsteRij + 1, "O").Value = HRGM
            
    End With

' Sluit de UserForm
       Sheets("Fietsvergoeding").Activate
    Unload Me
 
Ik wil dit weekend wel eens kijken als ik tijd vind met het mooie weer 😉. Ik ben ook geen expert VBA btw, maar wil gerust kijken.
 
Ik denk dat ik een andere manier moet zoeken om de formules te laten 'schrijven' in de nieuwe rij(en).
Of een manier dat laatsterij +1 niet iedere keer hoeven draaien
 
Terug
Bovenaan