Filter vanaf hoofdForm toepassen in SubForm

Status
Niet open voor verdere reacties.

klablabla

Gebruiker
Lid geworden
28 apr 2008
Berichten
116
In mijn hoofd Form heb ik een start en eind datum staan.
"FrmWork" "txtstartdatum"
"FrmWork" "txteinddatum"

Graag zou ik dan in mijn 2 subforms deze datums gebruiken om te filteren.
"subfrm1" "Order Date"
"subfrm2" "Complete Date"


Hiervoor had ik 1 form waaronder de data stond deze filterde ik met de volgende code.

Code:
Private Sub SeqFiltersInQuery()


On Error GoTo Err_SeqFiltersInQuery

    Dim strFilter As String, strOldFilter As String
    strOldFilter = Me.Filter
    If Me!TxtEindData > "" Then _
        strFilter = strFilter & _
                    " AND ([Order Date] >= " & Format(Me![TxtStartData], "\#mm\/dd\/yy\#") & _
                         ") AND ([Order Date] <= " & Format(Me![TxtEindData], "\#mm\/dd\/yy\#") & ")"
    If strFilter > "" Then strFilter = Mid(strFilter, 6)
    If strFilter <> strOldFilter Then
        Me.Filter = strFilter
        Me.FilterOn = (strFilter > "")
    End If

Exit_SeqFiltersInQuery:
    Exit Sub

Err_SeqFiltersInQuery:
    MsgBox Err.Description
    Resume Exit_SeqFiltersInQuery

End Sub



Een ander Idee is dat ik in mijn hoofd form twee apparte filters zet.
Als ik nu de query bekijk ziet hij er zo uit.
[Order Date]
>=#01/03/2012# And <=#31/03/2012#
[Complete Date]
>=#01/03/2012# And <=#31/03/2012#

Het nadeel is dat hij nu beide als voorwaarde ziet.
Wat ik wil is dat hij appart kijkt naar deze kolommen en appart filtered.

Het is namelijk mogelijk dat de order date op 01/02/2012 valt en Complete Date op 05/03/2012. Deze record wordt nu niet weer gegeven.
 
Laatst bewerkt:
Ik snap eigenlijk niet precies wat er aan de hand is; je hebt een hoofdformulier met subformulieren, zover snap ik het nog. Op het hoofdformulier zet je een selectie. Kan ik ook nog bijkomen. Maar dan? Als je op het hoofdformulier bijvoorbeeld bestellingen hebt, en op het subformulier de bestelde artikelen, dan is het subformulier toch automatisch meegefilterd? Of, je hoofdformulier bevat personeelsgegevens (gezien de formuliernaam frmWork), wat selecteer je dan? De werkgegevens in het subformulier zijn gekoppeld aan een persoon, niet aan datums. Het subformulier dan weer wel, maar je moet dan filteren op het subformulier, en niet op het hoofdformulier. Dus ik snap niet wat je aan het filteren bent.
Wat je tweede probleem betreft: als je op twee datumvelden een criterium zet in dezelfde criteriumregel, dan moeten de datums aan beide voorwaarden voldoen. Wil je dat ze onafhankelijk worden verwerkt, dan zet je elk criterium in een eigen regel.
 
Ik wil op de Subform's sorteren op datum die ik in het hooftform invoer.
Het nadeel is dat ik 2 subforms heb met dezelfde data. Die ik op verschillend datum veld wil sorteren.

Wat ik nu gedaan heb is in het hooft formulier de datums invullen. Die worden gekopieerd naar de subformulieren.
Het nadeel is dat ik de filters niet gelijk geactiveerd krijg.

In de subforms staat nu code die gaat filteren op de datums. Die ik op het hoofdformulier invul.
Vul ik de datums in het subform in filterd hij gelijk. Als ik ze invul in het hoofdformulier niet.

Dus hoe kan ik nu vanuit het hoofd form de code (Call SeqFiltersInQuery) in het subform activeren.

Dit is de code in het hoofdform die hem naar de subform stuurt.

Private Sub TxtEindData_AfterUpdate()
Me.SubFrm1.Form.TxtEindData1.Value = Me.TxtEindData.Value
End Sub
 
Geef mij één goede reden waarom je de datums op het hoofdformulier wilt selecteren waar het niet werkt, en niet op de subformulieren waar het wel werkt...
 
Omdat ik twee subforms heb die, die datums moeten gebruiken.
Anders moeten we het twee keer doen.
En ik wil er nog 5 criteria aan koppelen.
 
Ondertussen heb ik aardig doorgezocht maar kan er weinig over vinden.
In mijn hoofd form wil ik tussen twee datums zoeken. Die dan het filter in de Subform's activeren.
Ik heb al voor elkaar dat de zoek criteria vanuit het hoofdform in de subforms komen.
Code:
Me.SubFrm1.Form.TxtEindData1.Value = Me.TxtEindData.Value
Me.SubFrm2.Form.TxtEindData2.Value = Me.TxtEindData.Value
Maar als ik nu in het subform bijvoorbeeld after update de VB code invul die het filter oproept werkt dit niet.

Als tijdelijke oplossing heb ik een knop gemaakt die zegt activeer filter. (in de subform's)

Het mooiste is dat in in het hoofd form de functie "Call SeqFiltersInQuery" in het subform kan aanroepen. (after update)
 
Laatst bewerkt:
Ik heb een testje gedaan met een datumfilter op een subformulier vanuit een hoofdformulier, en deze opzet zou moeten werken:

Code:
Private Sub TxtEindData_AfterUpdate()
If IsDate(Me.TxtEindData) Then
    Me.SubFrm1.Form.Filter = "[TxtEindData1] = #" & CDate(Me.TxtEindData.Value) & "#"
    Me.SubFrm1.Form.FilterOn = True
    Me.SubFrm1.Form.Requery
    Me.SubFrm2.Form.Filter = "[TxtEindData2] = #" & CDate(Me.TxtEindData.Value) & "#"
    Me.SubFrm2.Form.FilterOn = True
    Me.SubFrm2.Form.Requery
End If
End Sub

Heb je twee datums, en wil je op een reeks filteren, dan moet je de filterstring uiteraard nog aanpassen.
 
Oke bedankt, ik ben een heel stuk opweg.

Met jou code loopt het goed. Maar wil iets meer filteren.

Ook als ik mijn code erin zit (alleen Subfrm1) werkt het. Maar samen :(.

Het volgende probleem komt nu naar voren.

Nu probeer ik natuurlijk een dubbele "strFilter" te maken.
Daar gaat het fout. Noem ik hem anders loopt hij vast.

Met de volgende code:
Code:
    Dim strFilter As String, strOldFilter As String
    strOldFilter = Me.SubFrm1.Form.Filter
    If Me!CmbBranch > "" Then _
        strFilter = strFilter & _
                    " AND ([Branch] Like '" & _
                    Me!CmbBranch & "*')"
    If Me!TxtEindData > "" Then _
        strFilter = strFilter & _
                    " AND ([Order Date] >= " & Format(Me![TxtStartData], "\#mm\/dd\/yy\#") & _
                         ") AND ([Order Date] <= " & Format(Me![TxtEindData], "\#mm\/dd\/yy\#") & ")"
    If Me!CmbLeadCraft > "" Then _
    strFilter = strFilter & _
                    " AND ([Lead Craft] Like '" & _
                    Me!CmbLeadCraft & "*')"
    If Me!CmbSupervisor > "" Then _
        strFilter = strFilter & _
                    " AND ([Supervisor Description] Like '" & _
                    Me!CmbSupervisor & "*')"
    If Me!CmbAssigned > "" Then _
        strFilter = strFilter & _
                    " AND ([Assigned to Description] Like '" & _
                    Me!CmbAssigned & "*')"
    If strFilter > "" Then strFilter = Mid(strFilter, 6)
    If strFilter <> strOldFilter Then
        Me.SubFrm1.Form.Filter = strFilter
        Me.SubFrm1.Form.FilterOn = (strFilter > "")
    End If

    Dim strFilter As String, strOldFilter As String
    strOldFilter = Me.SubFrm2.Form.Filter
    If Me!CmbBranch > "" Then _
        strFilter = strFilter & _
                    " AND ([Branch] Like '" & _
                    Me!CmbBranch & "*')"
    If Me!TxtEindData > "" Then _
        strFilter = strFilter & _
                    " AND ([CompleteDate] >= " & Format(Me![TxtStartData], "\#mm\/dd\/yy\#") & _
                         ") AND ([Complete Date] <= " & Format(Me![TxtEindData], "\#mm\/dd\/yy\#") & ")"
    If Me!CmbLeadCraft > "" Then _
    strFilter = strFilter & _
                    " AND ([Lead Craft] Like '" & _
                    Me!CmbLeadCraft & "*')"
    If Me!CmbSupervisor > "" Then _
        strFilter = strFilter & _
                    " AND ([Supervisor Description] Like '" & _
                    Me!CmbSupervisor & "*')"
    If Me!CmbAssigned > "" Then _
        strFilter = strFilter & _
                    " AND ([Assigned to Description] Like '" & _
                    Me!CmbAssigned & "*')"
    If strFilter > "" Then strFilter = Mid(strFilter, 6)
    If strFilter <> strOldFilter Then
        Me.SubFrm2.Form.Filter = strFilter
        Me.SubFrm2.Form.FilterOn = (strFilter > "")
    End If
 
Laatst bewerkt:
Op een paar technische dingetjes na die ik zelf anders zou doen, zou de code wel moeten werken. Wat is het probleem, en waar begint het?
 
Compile error:
Duplicate declaration in current scope
Hij wijst dan naar
Code:
Dim strFilter As String,

Dit is bij Subfrm2, hij gaat helemaal door Subfrm1 code heen zonder problemen.
 
Ja, dat was één van die technische dingetjes :)
Je kunt een variabele maar één keer declareren, en meer hoeft natuurlijk ook niet. Vervang die regel door:
Code:
strFilter=""
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan