こんにちは!つむぎです。
前回の更新から、かなり時間があいてしまってすみません。(^_^;)
つむぎでは、この3週間くらいの間に、複数のAccessによる業務システムの納品と運用テストを行ないました。
納品やテストをお客さまのところで行うと、それぞれの環境で思いもしなかった問題が発生することがあります。
今回も、お客さまの環境でしかおこらなかった、レアな「困った事例」が複数発生しました。
今回は2回にわけて、その「困った事例」と「解決策」を覚書きしたいと思います。
では、今回発生した事例①からです。
お客さまからの連絡は、下記のようなものでした。
お客さまの環境:Accessのファイルをサーバーに置き、7~8名でファイルを共有
問題の起こったPCの台数:3台のPCのみで発生
起こった困った問題:
フォーム上の[レポート印刷ボタン]を押すと、レポートがプレビューされる。→ここまではOK!
リボンにある[印刷プレビュータブ]の[印刷]のボタンを押すと、なぜかフォームが印刷される。
ちなみに、リボンの[印刷ボタン]とは、こちらですね!
さて、困りました。
というのも、わたしの環境では、まったく発生しなかったからです。
これは、現場を見に行ったほうが早いということで、早速お客さまのところへ!
お客さまのお話されていた通りの現象が起こってました。
この事例は、リボンの[印刷ボタン]を押して印刷する時にだけ発生していました。
ということは、何らかのタイミングで、「アクティブなオブジェクト」が「レポート」から、「フォーム」に移っているのかも?
なぜ、そんな風になるのかはわかりませんが、とにもかくにもレポートを印刷できるようにしないといけません。
ということで、早速対応を!
下記の2点の対策を実施しました。
①レポートのプロパティで、「作業ウィンドウ固定」を「はい」に変更。
→これを行うことで、最前面に「作業ウィンドウ」(この場合は、レポート)が固定されるので、「アクティブなオブジェクト」は「レポート」になるはず。
②レポートをプレビューする時、開いているフォームを非表示にして、「レポートの閉じる時」のイベントで、非表示にしたフォームを再表示。
上記を実施するため、下記のプログラムを追加。
・「フォームA」の[レポート印刷]ボタンの「クリック時イベント」にプログラムを追加
→現在開かれているフォームがある時は、開いているフォームを非表示にする
'「メインメニュー」フォームが開いていたら、非表示 If SysCmd(acSysCmdGetObjectState, acForm, "メインメニュー") = 1 Then Forms!メインメニュー.Visible = False End If '「フォームA」フォームが開いていたら、非表示 If SysCmd(acSysCmdGetObjectState, acForm, "フォームA") = 1 Then Forms!フォームA.Visible = False End If 'レポートをプレビュー DoCmd.OpenReport "レポート", acViewPreview DoCmd.Maximize
・「レポート」の「閉じる時イベント」にプログラムを追加
→現在非表示になっているフォームがある時は、非表示のフォームを再表示
'「メインメニュー」フォームが非表示だったら、表示 If SysCmd(acSysCmdGetObjectState, acForm, "メインメニュー") = 1 Then Forms!メインメニュー.Visible = True End If '「フォームA」フォームが非表示だったら、表示 If SysCmd(acSysCmdGetObjectState, acForm, "フォームA") = 1 Then Forms!フォームA.Visible = True End If
以上で、リボンの[印刷ボタン]から印刷をしても、ちゃんとレポートが印刷されるようになりました。
めでたしめでたし♪ヾ(*´∀`*)ノ
それにしても、ときたま起こる摩訶不思議なAccessの問題現象!
同じ問題で困られた方がもしおられたら、上記をお試しくださいませ。