Hi haoose - I might have something.
The approach of opening a form from the report isn't my favourite either, but there are some tweaks that might apply.
First: The form needs to be opened in dialog mode, and the form opening must be placed in the reports on open event. From this event, one might cancel the report opening.
Next, how to prevent the opening of the report: Use an "IsLoaded" function, for instance the one in the Northwind sample database, or from Rohdems faq (faq181-320). Copy the function to a module (not a forms/report module but from the VBE Insert | Module).
Then use for instance the two lines below in the reports on open event.
[tt]docmd.openform "Criteriaform",,,,,acDialog
Cancel = Not Isloaded("Criteriaform"
' cancel opening if form not open[/tt]
Then, to have the possibility of both opening the report or closing the report, simply:
In the close buttons on click (Cancel):
[tt]docmd.close acform, me.name
' closes the form[/tt]
In the "open report" buttons on click (Ok):
[tt]me.visible = false
' hides the form, which "removes" the dialog state
'of the form, thus letting the report continue opening [/tt]
Then, to close the criteria form, I'd recommend using the reports on close event (again, for safety, using the IsLoaded function):
[tt]If IsLoaded("Criteriaform"

Then
DoCmd.Close acForm, "Criteriaform"
End If[/tt]
- so I think what you heard somewhere, concerning visible, probably was a reference to the criteriaform, not the report
One final note:
If you later decide to open this report from a button on another form, you'll probably have to deal with a runtime error 2501 - operation cancelled. To trap for this, here's a sample routine
only opening the report and some errorhandling:
[tt]Private Sub MyOpenReport()
on error goto MyErr
docmd.openreport "MyReport", acViewPreview
MyExit:
exit sub
MyErr:
if err.number<>2501 then
msgbox err.description
end if
resume MyExit
End Sub[/tt]
Report back if problems.
HTH Roy-Vidar