• ベストアンサー

accessの計算エラーについて教えて下さい

accessで画面を更新、表示した値を元に計算を行う場合、タイミングによっては計算にエラ-が出ます(結果が0となる)。多分、画面が値を更新して表示するのに時間を要し、それまでは0もしくは空白となっていた数値を元に計算してしまうためだと思います。画面表示を待って計算に進むプログラミングの方法があれば教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1です。今はAccess2003です。Access2000の頃、苦肉の策で作った例です。的外れかも知れませんが参考になれば‥‥ (1)レポートをプレビューし、プレビューを閉じたら次に進む例 ≪イベントプロシージャ≫ Private Sub cmd工程表_Click()   :  DoCmd.OpenReport 工程表, acViewPreview  Do While is_ReportLoaded(工程表): DoEvents: Loop End Sub ≪モジュール≫ '指定したレポートが開かれている場合、Trueを返す。 Function Is_ReportLoaded(Optional argReportName As String = "") As Boolean  Is_ReportLoaded = False  If argReportName = "" Then   If Reports.Count <> 0 Then    Is_ReportLoaded = True    Exit Function   End If   For i = 0 To Reports.Count - 1    If Reports(i).Name = argReportName Then     Is_ReportLoaded = True     Exit Function '見つかった時点で終了する。    End If   Next End Function (2)フォームを素早く開くには‥‥  事前に「非表示」で開いておき、使う時に標準で開き直す。 (3)時間を遅らすモジュールの例 '引数の秒数になるまでDoEventsを連発する Public Function wait_Seconds(ByVal argSec As Long) As Boolean  lngSec0 = CLng(Timer)  Do   lngSec1 = CLng(Timer)   DoEvents  Loop Until Abs(lngSec1 - lngSec0) > argSec  wait_Seconds = True Exit_wait_Seconds:  Exit Function

KEN200908
質問者

お礼

再びありがとうございます。 時間を遅らすモジュールで行けそうな気がしてきました プログラムに組み込み試したいと思います。

その他の回答 (1)

回答No.1

 長年、Accessを使っていますが(今、使っているバージョンは2003)、そういう経験はありません。 Access2.0の頃の話ですが、「マクロで計算させるより、モジュールを使った方がよい」と Micorosft のサポートに言われたことがあります。  もっと具体的に書かれた方が解決が早いと思うのですが‥‥ (“元”と“基”では意味がまるっきり変わりますので、その辺も気を付けて)

KEN200908
質問者

お礼

早速ご回答ありがとうございました。こちらの操作が不慣れでお礼が遅くなりました。現在access2007ですが、質問のプログラムではモジュールを使っているのですが、やはり画面表示が遅くて(いくつかの計算をして表示更新させているため)、表示前に演算の方が先に進んでエラーが出てしまうようです。そうでない場合がほとんどですが。BASICではfor loop などを使って、一息タイミングをとることができたのですが、accessでは適当なものがないかと思って質問してみました。