
Access2000において、長い処理をさせる時、
ボタンを押した後に再びボタンを押してしまい処理が走ってしまうのを防ぐため、
以下のようなコードを考えましたが、エラーが発生します。
(以下のコードは簡略化しています)
Private Sub cmd売上伝票変更_Click()
strMsg = MsgBox("更新します。よろしいですか?", vbYesNo)
If strMsg = vbNo Then
MsgBox "中止しました。", vbOKOnly
Exit Sub
End If
'ボタンを無効にしようとしましたがここでエラー
Me.cmd売上伝票変更.Enabled = False
Do Until 条件
~ここに処理が入る~
'ステータスバーに進捗状況表示
Application.SysCmd acSysCmdSetStatus, lngCount & "件 / " & lngTotal & "件 完了"
DoEvents
Loop
End Sub
進捗状況をステータスバーに表示させるために、DoEventsを入れていますが、
これがモトで再びボタンが押せてしまいます。
入れない場合、どこかクリックするだけで画面がフリーズしたようになってしまいます。
ボタンを押せなくする方法、またはボタンを押した後、画面だけ更新できる方法で、
何かよい方法は無いでしょうか?
No.3ベストアンサー
- 回答日時:
1.同じフォームに「cmd売上伝票変更ダミー」と言う名前のコマンドボタンを置く。
2.そのコマンドボタンのプロパティを
使用可能:いいえ
左位置:0cm
上位置:0cm
幅:0cm
高さ:0cm
にする
3.コードを以下のように修正する
Private Sub cmd売上伝票変更_Click()
strMsg = MsgBox("更新します。よろしいですか?", vbYesNo)
If strMsg = vbNo Then
MsgBox "中止しました。", vbOKOnly
Exit Sub
End If
Me.cmd売上伝票変更ダミー.Enabled = True
Me.cmd売上伝票変更ダミー.SetFocus
Me.cmd売上伝票変更.Enabled = False
Do Until 条件
~ここに処理が入る~
'ステータスバーに進捗状況表示
Application.SysCmd acSysCmdSetStatus, lngCount & "件 / " & lngTotal & "件 完了"
DoEvents
Loop
Me.cmd売上伝票変更.Enabled = True
Me.cmd売上伝票変更.SetFocus
Me.cmd売上伝票変更ダミー.Enabled = False
End Sub
ボタンを無効に出来ない理由は「ボタンにフォーカスがあるから」なので、フォーカスを他の物に動かしてからなら、ボタンを無効にする事が出来る。
上記では、ダミーのボタンを用意したが、もし、フォーム上に、他に「フォーカスを受け取れる、テキストボックスか何か」があるなら、上記1、2の手順は省き、以下のコード修正のみで大丈夫です。
Private Sub cmd売上伝票変更_Click()
strMsg = MsgBox("更新します。よろしいですか?", vbYesNo)
If strMsg = vbNo Then
MsgBox "中止しました。", vbOKOnly
Exit Sub
End If
Me.Text対象年月.SetFocus '同じフォーム上にある適当なテキストボックス
Me.cmd売上伝票変更.Enabled = False
Do Until 条件
~ここに処理が入る~
'ステータスバーに進捗状況表示
Application.SysCmd acSysCmdSetStatus, lngCount & "件 / " & lngTotal & "件 完了"
DoEvents
Loop
Me.cmd売上伝票変更.Enabled = True
Me.cmd売上伝票変更.SetFocus
End Sub
ソースコードつきでご丁寧にありがとうございました!
今回は同じフォームにグループボックスがあったので、
それにフォーカスを一時的に移動させることにしました。
No.4
- 回答日時:
補足:模擬的無効化。
Private Sub コマンド6_Click()
Static isClick As Boolean
If Not isClick Then
isClick = True
Me.コマンド6.ForeColor = RGB(128, 128, 128)
Pause 10
Me.コマンド6.ForeColor = RGB(0, 0, 0)
isClick = False
End If
End Sub
で、一応、無効化されたのを視認できます。
Public Sub Pause(ByVal PauseTime As Single)
Dim Finish As Single
Finish = Timer + PauseTime
Do
DoEvents
Loop Until Timer > Finish
End Sub
No.1
- 回答日時:
Private Sub XXXX_Click()
Static isClick As Boolean
Dim StopNow As Boolean
If Not isClick Then
isClick = True
StopNow = CBool(MsgBox("更新します。よろしいですか?", vbYesNo) = vbNo)
If StopNow Then
MsgBox "中止しました。", vbOKOnly
Else
Do Until 条件
・・・・・
DoEvents
Loop
End If
isClick = False
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで新規にレコードを追...
-
弥生販売で数量や金額に0ゼロ...
-
アクセスのパラメータに既定値...
-
勘定奉行での伝票の追加方法
-
弥生会計11 現金出納帳 並び替え
-
中華風の月の呼び方
-
何か言い方ある?「毎月最終水...
-
コクヨの売上帳に合わせた印刷
-
弥生販売 データのインポート
-
弥生販売の商品台帳で・・
-
「弥生会計」は毎年買い替える...
-
弥生会計の予算データインポー...
-
弥生販売 データのインポート
-
数量・会社ごとに異なる単価表...
-
弥生販売04 セット商品台帳が...
-
弥生販売 請求明細書の消費税...
-
弥生販売で備考をいれられる??
-
PCA商魂 エクスポートについて
-
「弥生・会計」の導入に関して...
-
弥生シリーズ 弥生販売 のネ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスのパラメータに既定値...
-
【弥生販売】請求締切後の売上...
-
勘定奉行の売上削除
-
Accessフォームのボタンの二度...
-
弥生販売で数量や金額に0ゼロ...
-
Word差し込み印刷
-
エクセルでシリアリナンバーを...
-
PCA会計で入力した伝票が帳...
-
勘定奉行での伝票の追加方法
-
弥生会計11 現金出納帳 並び替え
-
弥生販売
-
アクセスで新規にレコードを追...
-
会社で複写式伝票を手書きで作...
-
プリンターで印刷できる、複写...
-
弥生の印刷設定について
-
伝票のプリンタはレーザーかド...
-
ヤマト運輸 宅急便の社員割引...
-
excel VBAで納品書の雛形から納...
-
エクセルにて伝票番号ごとに小...
-
弥生販売請求書について
おすすめ情報