- ベストアンサー
ACCESS2000のレポートについて教えて下さい
ACCESS2000のレポートについて教えてください。 レポートをプレビューで開いている状態で、再度、同じレポートのプレビューを開いた時に警告メッセージを表示させたいのですが、可能でしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Access2000で既にレポートをプレビューで開いている状態で、レポートのアクティブな状態を解除した後に再度同じレポートをプレビューしても単にレポートがアクティブになるだけなので、どんな問題があってこのようなことをしたいのか疑問に感じます。もしよければ補足ねがえませんか? それはさておき、ご質問におこたえします。 >レポートをプレビューで開いている状態で、再度、同じレポートのプレビューを開いた時に警告メッセージを表示させたいのですが、可能でしょうか? 可能です。 考え方としては、 最初のプレビューでは、レポートを開く-レポートをアクティブにする順番でイベントが発生するのに対して、2回目以降はレポートを開くイベントは、発生しません。 これを踏まえて、レポートのVBAで以下のような例を作ってみました。 Option Compare Database Option Explicit Public pubレポートオープン直後 As Boolean Private Sub Report_Open(Cancel As Integer) pubレポートオープン直後 = True End Sub Private Sub Report_Activate() Dim Response If pubレポートオープン直後 = False Then Response = MsgBox("既に開いています。", vbCritical) End If pubレポートオープン直後 = False End Sub ご参考になれば幸いです。m(__)m
その他の回答 (1)
- Nii
- ベストアンサー率48% (79/162)
一度閉じて、開きなおすのでは駄目でしょうか? 私は大抵そうしていますが・・・ どうしてもというのであれば、Accessのサンプルデータベースの中に、IsLoadedという関数があり、指定したフォームが開いているかどうかを調べる事が出来ます。 これを元に、レポートが開いているかを調べる関数を作成されてはどうでしょうか? Function IsLoaded(ByVal strFormName As String) As Boolean ' 指定したフォームがフォーム ビューまたはデータシート ビューで開かれている場合 True を返します。 Const conObjStateClosed = 0 Const conDesignView = 0 If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then If Forms(strFormName).CurrentView <> conDesignView Then IsLoaded = True End If End If End Function
お礼
回答ありがとうございます。 残念ながら、教えて頂いたサンプルの『CurrentView』を使えるのはフォームの場合のみで、レポートでは使えないようです。 No.2のかたの回答の方法で試したいと思います。 またわからないことがあったら教えてください。 ありがとうございました。
お礼
変な質問にもかかわらず、親切な回答ありがとうございました。 なぜこんなことをやりたいかという件ですが・・・ データベースから読み込んだレコードを一旦、パソコン側に格納して、そのデータをレポートのレコードソースにしているのですが、同じレポートを閉じずに2回開くとレコードがロックしてしまってエラーになってしまうのです。 これを回避するために「一旦レポートを閉じてから再度開く」ようにメッセージを出したいと思ったわけです。 おかげさまで教えて頂いた方法で、うまくいきそうです。 本当にどうもありがとうございました。