![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
クリックイベントなのに、2回クリックしないとフォー
Access(アクセス)
-
ボタン2回押しを無効にしたい
JavaScript
-
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
-
4
Excelのマクロボタンをダブルクリックされて困っています
Visual Basic(VBA)
-
5
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
6
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
7
コマンドボタンやイメージにマウスをのせるとボタン名を表示したい
Excel(エクセル)
-
8
access サブフォームにリストを表示させたいが一件しかレコードが表示されない
Access(アクセス)
-
9
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
10
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
11
最初の1回のみにボタンクリックでマクロ実行する
Visual Basic(VBA)
-
12
ACCESSでタイトルバーを非表示にする方法
Access(アクセス)
-
13
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
14
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
15
AccessのDAOでフィールド名を配列に格納して・・・
Visual Basic(VBA)
-
16
ACCESSの入力文字数の制限について
Access(アクセス)
-
17
ACCESS 直線ツールの矢印
PowerPoint(パワーポイント)
-
18
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
19
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
20
AccessのDAO.ExecuteとDoCmd.RunSqlの違いについて
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access レポート印刷するときに...
-
Accessのクエリで、replace関数...
-
アクセス レポートを開いたとき...
-
access2019の起動が遅い
-
Access VBA [リモートサーバー...
-
実行時エラー3131 FROM 句の構...
-
CSVファイルの「0落ち」にVBA
-
Access DTPickerの初期表示月を...
-
Vba Userformを前面に出すについて
-
Access で半角スペースと全角ス...
-
Microsoft365にAccessってあり...
-
Accessのスプレッドシートエク...
-
Access Error3061 パラメータが...
-
Access 複数条件検索の設定が上...
-
【Access】Dcount関数の複数条...
-
Accessレポートのチェックボッ...
-
ACCESS VBA でのエラー解決の根...
-
Access VBA を利用して、フォル...
-
【至急・画像あり】建物or住所...
-
AccessVBAで任意の複数リンクテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessフォームのボタンの二度...
-
アクセスのパラメータに既定値...
-
勘定奉行の売上削除
-
弥生会計11 現金出納帳 並び替え
-
【弥生販売】請求締切後の売上...
-
弥生販売08の請求書印刷の設...
-
弥生販売で数量や金額に0ゼロ...
-
弥生会計の印刷
-
弥生販売で売上伝票をエクスポ...
-
会社で複写式伝票を手書きで作...
-
弥生の印刷設定について
-
エクセルでシリアリナンバーを...
-
弥生販売02proの伝票印刷について
-
EXCELで選択した番号のものだけ...
-
弥生販売入金伝票について教え...
-
ヤマト運輸 宅急便の社員割引...
-
弥生販売の請求書番号を印刷し...
-
ガスト フロア バイト
-
弥生販売04プロにて仕入伝票修...
-
弥生会計の伝番
おすすめ情報