Dec 31 2021 08:01 AM
Hello Experts,
I have a form that has On Load that opens if Nz OpenArgs. The form's data tab shows its filtered to [LetterOfCreditID] = xx (whatever record the [LetterOfCreditID] was filtered to)
It works fine. Below is what the form's filter shows in design:
I also have a button on the form that overides the filter shown above and filters based on "[COID]=" (this is a macro and essentially overides the OpenArgs and shows all records based on COID:
The form's filter appears to have not changed and still says [LetterofCreditID] = 21 (but it is filtering to the "[COID]=" & [COID and so I guess the form's filter doesnt update yet and that is ok)
What I want to do is revert back to what the form's filter says in the first pic above [LetterOfCreditID] = 21 but how can I do this? I want to essentially override the "[COID]=" filter I put on the form with the macro and use the value in the form's filter, which still shows [LetterOfCreditID] = 21 (I dont want to hard code to "21"...its only an example in this case and will change based on how the form was initially filtered with OpenArgs.)
Let me know if it is not clear.
Grateful for the assistance.
Dec 31 2021 08:37 AM - edited Dec 31 2021 08:40 AM
Hi,
The order of what you want to accomplish is not very clear to me. You want to filter for the OpenArgs first, then with the ApplyFilter macro and as a third step back to the OpenArgs filter? Or differently?
With which code OnLoad do you set the filter based on the OpenArgs?
In which event do you call the macro?
Where and when do you want to "reactivate" the first filter? With a button in the form?
The right method depends on such details of your current implementation and on your concrete requirements.
Servus
Karl
************
Access News
Access DevCon
Dec 31 2021 09:30 AM
Hi Karl,
yes the order as you mention above is correct.
1. OpenArgs ([LetterofCreditID])
2. Filter ([COID]) this is a button on frmLCAmendHistory
3. How to revert back to filter ([LetterofCreditID]) is the issue.
Below is the OpenArgs on the form frmLetterOfCredit that opens the form to filter FrmLCAmendHistory:
The form where I use OpenArgs (frmLetterOfCredit):
Private Sub cmdAmendLC_Click()
If CurrentProject.AllForms("FrmLCAmendHistory").IsLoaded = False Then
DoCmd.OpenForm "FrmLCAmendHistory", , , , , , OpenArgs:=Me.txtLCID & ";" & Me.txtProjIDfk & ";" & Me.Amount & ";" & Me.txtLCNo
Else
DoCmd.Close acForm, "FrmLCAmendHistory"
DoCmd.OpenForm "FrmLCAmendHistory", , , , , , OpenArgs:=Me.txtLCID & ";" & Me.txtProjIDfk & ";" & Me.Amount & ";" & Me.txtLCNo
End If
On Load of frmLCAmendHistory (initially filters for [LetterOfCreditID]:
If Nz(Me.OpenArgs, "") <> "" Then
If Not Me.NewRecord Then
Me.Filter = "[letterofcreditID] = " & Split(Me.OpenArgs, ";")(0)
Me.FilterOn = True
Else
'/this is a new record
'MsgBox Split(Me.OpenArgs, ";")(2)
Me.letterofcreditID = Split(Me.OpenArgs, ";")(0)
End If
End If
Let me know if still not clear. Thank you
Dec 31 2021 09:57 AM - edited Dec 31 2021 10:00 AM
Hi,
It should work to get back the first filtering e.g. with the click on another button, where you simply call the OnLoad procedure again with:
Form_Load
Servus
Karl
************
Access News
Access DevCon
Dec 31 2021 10:13 AM - edited Dec 31 2021 10:14 AM
Hi Karl,
Yes, I did try that thinking the same thing but it does not filter back to the initial filter (ie LetterOfCreditID = 21 even though the form says it is filtered to LetterOfCreditID = 21 as shown in the form's data tab filter field (the first pic above).
I added a me.refresh and me.requery thinking its just a refreshing issue but it still doesnt filter back to the intial filter when I first opened the form to OpenArgs (ie LetterOfCreditID = 21).
below is the code I put on the revert back to initial filter (its the same code as the On Load)
Do you have another suggestion?
Private Sub btnRevertFilter_Click()
If Nz(Me.OpenArgs, "") <> "" Then
If Not Me.NewRecord Then 'you need this or else get error if opening form on its own 12/15/21
Me.Filter = "[letterofcreditID] = " & Split(Me.OpenArgs, ";")(0)
Me.FilterOn = True
Else
'/this is a new record
Me.letterofcreditID = Split(Me.OpenArgs, ";")(0)
End If
End If
Me.Requery
End Sub
Dec 31 2021 11:20 AM - edited Dec 31 2021 11:21 AM
SolutionHi,
I did a quick test with that setting and it works here, i.e. the ApplyFilter macro filter gets replaced by the new filter. Maybe in your case there's sth else involved. What happens when you try it? Nothing at all?
Personally I would not mix VBA mit a macro but do all filtering by code with
Me.Filter = ...
Maybe this also enables you to set back the filter as described, by just calling OnLoad again. No Requery/Refresh etc. is necessary when I do this here. I just have to change the Filter property.
Servus
Karl
************
Access News
Access DevCon
Dec 31 2021 12:31 PM
Dec 31 2021 11:20 AM - edited Dec 31 2021 11:21 AM
SolutionHi,
I did a quick test with that setting and it works here, i.e. the ApplyFilter macro filter gets replaced by the new filter. Maybe in your case there's sth else involved. What happens when you try it? Nothing at all?
Personally I would not mix VBA mit a macro but do all filtering by code with
Me.Filter = ...
Maybe this also enables you to set back the filter as described, by just calling OnLoad again. No Requery/Refresh etc. is necessary when I do this here. I just have to change the Filter property.
Servus
Karl
************
Access News
Access DevCon