
アクセスの帳票フォームで入力用チェックボックスが84個(ck1からck84)あります。表示データは10個程度ですが、このチェックマークの更新前処理で、同じ場所へのダブリが発生しないような処理をしています。フォームフッターにテキストボックスを84個配し(Text1~Text84)、Text1はCk1の合計を、Text2はCk2の合計を出すようにしておき、CK1の更新前処理に
Select Case Me![Text1]
Case ""
If (Me![ck1]) = -1 Then
MsgBox "Please wait"
Cancel = True
Me.Undo
End If
Case "-1"
If (Me![ck1]) = -1 Then
MsgBox "Already used."
Cancel = True
Me.Undo
End If
End Select
またチェックマークを入れることにより、計算処理をして結果をチェックボックスの下に表示しているためme.Refreshを更新後処理に入れております。アクセス2003+Office2003SP3では問題なく動きますが、アクセス2003+Office2003SP1、アクセス2010+Office2010SP1では次のチェックボックスにチェックを入れるのに5~6秒程掛かります。(アクセス2003+OfficeSP3ではチェックマークをつけて次のチェックマークを付けるのに待ち時間はありません。)したがって使い物になりません。何か考えられることはありますでしょうか。
No.4ベストアンサー
- 回答日時:
以上と言いつつ、
最初の質問の Me.Refresh を見逃していました。
Me でフォーム全体のRefreshを行うのではなく
個々のコントロールのRefresh、Recalc、Requeryを行えませんかね?
Me!コントロール名.Re…
ただ、Me.Refresh を外しても若干の改善となると。。。
実際にファイルを見られればもう少し何とかなるかも?ですが
やり取りはこのサイトではご法度なのでゴメン。
ありがとうございます。計算を全部更新するためフォーム全体を行わないといけないと思っておりましたが、CK1だけをRequeryしてやればCK1が確定し全ての計算をやり直してくれました。2003,SP3に比べればまだまだ遅いですが、Me.CKXX,Requeryでずいぶん速くなりました。(.accdbに変更致しました)VB7.0のレジストリ値が怪しいと友人が言っておりましたので、このへんも見てみたいと思っておりますが、随分と改善致しました。ありがとうございます。
No.3
- 回答日時:
一つのチェックボックスを変えるだけで、
全てのチェックボックスの値が再更新されるような動きは?
何処かにイベント連鎖的なモノがあって
SP3 だとAccess が気を廻してくれるのが速くて無駄な連鎖を遮断して・・かもです。
ステップ実行してみると何かが見えてくるかも?
私からは以上です。
ありがとうございます。2010で更新後処理からme.refreshを外すと少し速くなりました。しかしRefreshしないと値を確定できないため同じ場所へのダブリ予防ができませんし、下のフィールドにある計算結果も出て来ません。チェックマークのチェックを付けた時に値を確定させるのにはMe.refreshだけですよね。Requeryでは恐らくもっと遅くなると思います。色々教えて頂きどうもありがとうございました。
No.2
- 回答日時:
ん~
個々のPCに置いてあるという事ですか。。
ネットワークの設定の違いから・・かなと踏んでたのですが違ったようですね。
となるとAccessの内部的な問題になる?ので心当たりはありません。
全体的に遅くなるのか、ある一部(一行)の処理だけに時間が掛かっているのか
経過処理時間をイミディエイトウィンドウに出力するようなのを
数か所おいておいて検証する事くらいしか思いつきません。
後は、Access2010ならACCDB形式にしたら変わるかとか
Decompile して再コンパイル・最適化で変わるかなど。
連絡ありがとうございます。
動きで少し見えるのですが、チェックマークをオンにすると、全てのチェックマークが1つづつ色が変わって元に戻る動きが見えました。恐らくSelect caseを見ているのではないのでしょうか。VBAの問題かな、、と思いました。おっしゃるとおり一部の問題かと思います。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付処理
-
データ型でFloatとreal の計算...
-
カーソル0件の時にエラーを発生...
-
カーソルを使って、最終行レコ...
-
動的SQLの処理件数
-
複数レコードを1変数にセット...
-
処理件数を非表示にしたい
-
SQL-LOADERの逆のもの
-
差し込み後、元データを変更し...
-
for whichの使い方
-
エクセルの関数について教えて...
-
EXISTSを使ったDELETE文
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
フィルターかけた後、重複を除...
-
誰か教えてください
-
python random.choice について
-
テーブルの内容とテーブルのカ...
-
SQLServerで文字列の末尾からあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
処理件数を非表示にしたい
-
カーソルを使って、最終行レコ...
-
NVLとDECODEのスピード差
-
(x 行処理されました)を表示さ...
-
データ型でFloatとreal の計算...
-
カーソル宣言をIFで分けられま...
-
カーソルオープンの処理について
-
動的SQLの処理件数
-
Accessで処理経過を表示したい...
-
クエリの実行時間の目安
-
ストアドプロシージャ_カーソル...
-
ACCESSで一括処理する方法
-
テーブルの項目が異なるテーブ...
-
カーソルがコミットするとクロ...
-
SQL-LOADERの逆のもの
-
複数レコードを1変数にセット...
-
わり算の結果が整数でも小数点...
-
SQL plus で改行
-
PL/SQLのエラー処理について
おすすめ情報