- ベストアンサー
accessの計算エラーについて教えて下さい
accessで画面を更新、表示した値を元に計算を行う場合、タイミングによっては計算にエラ-が出ます(結果が0となる)。多分、画面が値を更新して表示するのに時間を要し、それまでは0もしくは空白となっていた数値を元に計算してしまうためだと思います。画面表示を待って計算に進むプログラミングの方法があれば教えて下さい。
- みんなの回答 (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
その他の回答 (1)
- ogohnohito
- ベストアンサー率35% (5/14)
長年、Accessを使っていますが(今、使っているバージョンは2003)、そういう経験はありません。 Access2.0の頃の話ですが、「マクロで計算させるより、モジュールを使った方がよい」と Micorosft のサポートに言われたことがあります。 もっと具体的に書かれた方が解決が早いと思うのですが‥‥ (“元”と“基”では意味がまるっきり変わりますので、その辺も気を付けて)
お礼
早速ご回答ありがとうございました。こちらの操作が不慣れでお礼が遅くなりました。現在access2007ですが、質問のプログラムではモジュールを使っているのですが、やはり画面表示が遅くて(いくつかの計算をして表示更新させているため)、表示前に演算の方が先に進んでエラーが出てしまうようです。そうでない場合がほとんどですが。BASICではfor loop などを使って、一息タイミングをとることができたのですが、accessでは適当なものがないかと思って質問してみました。
お礼
再びありがとうございます。 時間を遅らすモジュールで行けそうな気がしてきました プログラムに組み込み試したいと思います。