まぁ、そうですね。GetObjectで参照してますからその時点でVisible=Trueなんですね。なので意図的にVisible=Falseとしたわけです。
GetObjectで参照したAccess.Applicationオブジェクトのレポートを表示させようとするならば、Visible=Falseでは当然無理で、
ゆえにアプリケーションウインドウも表示されているということだと思います。
.Visible = True ←GetObjectを用いているから、必要がない
.DoCmd.OpenReport "report01", acViewPreview, , , acDialog ←ダイアログモードだからレポートを開いて、中の人はここで待機している
.Visible = False ←レポートが閉じてから実行される
ちょっとあとから気が付いたのですが、GetObject/CreateObjectで参照した場合、UserControlプロパティをTrueにしなければ印刷中ダイアログは表示されないようです。
お手隙の時にでも、ご確認くださいな。
Win32APIでウィンドウ表示を制御することで、アプリケーションウインドウを非表示にしつつレポートウインドウを表示させるのはできたけど、ちょっと調子が悪かった。
環境によるものかも知れない。今回はSetWindow関数を使ってみました。
API使わずになんとかとした場合、プレビューは親accdbで表示させて、印刷は子accdbでさせてしまうのもありかなと思ったりして。
ただこの場合プレビューされた内容と違うものが印刷される可能性について手当をしてあげないとならないかな。
印刷中ダイアログを直接に処理できればよいのですけど、たぶんプリンタ側にすでに制御が移っていて、中の人はその時点で待機状態にあるから、
accessからの制御は難しいんじゃないかなぁと解釈中。制御に係るコストとリスクが高い気がしたので触れないことが得策ではないかと思いはじめたところ。.
Office オートメーション サーバーの GetObject および CreateObject の動作