i tried a few things and have to conclude enabling remote errors is the best choice given how inexpensive a solution it is if you introduce a raise error in your proc. but see caveat in last paragraph,
before coming to that conclusion, i tried introducing the vb expression based func you see below and then finding available real estate for a new textbox. And returning no rows (new predicate) in the proc in this situation. This is what zoehui has been recommending. My biggest problem with this is finding the available real estate for a new text box and not upsetting the delicate balance we often have with merge cells when saving to excel.
the only surprise i've seen so far with enabling remote errors and raising your own error (even sev 18) in the proc is that if you don't also introduce the predicate in your proc's select to basically return nothing (like zoehui recommended), your proc actually runs thru the data anyway even though no resultset shows on your report. i dont think this was true before i enabled remote errors and raised sev 18 but i could be wrong. i think before, the raise error halted execution of the proc immediately.
Function CheckBalanceParameters(p1 as Double, p2 as Double)
Dim msg as String
msg = ""
If (p1 =0 or p2=0) Then
msg="INVALID BALANCE RANGE"
End If
Return msg
End Function