みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessVBAの標準モジュール

標準モジュール
Public PSwMdel As Boolean
Public Function PMsgDel()
If (MsgBox("削除してよろしいですか?", 1 + 48 + 256, "削除処理確認メッセージ゛") = vbOK) Then
PSwMdel = True
Else
PSwMdel = False
End If
End Function
と作成し、削除前の確認処理を共通で使えるようにしています。
(メッセージボックスでOKを押すとPSwMdelがTrueになって削除モジュールが動くようにする)
普通は全く問題なくモジュール通りに動くのですがここ最近急に正しく動かないものが出てきました
普段フォーム内のモジュールで
Call PMsgDel
If PSwMdel = True Then 
~以下削除処理~
END IF
としているのですがメッセージボックスでOKを押しても削除が実行されなかったのです
おかしいと思いブレークポイントで確認するとOK押した後PMsgDel内ではPSwMdel = True
フォームモジュールに戻るといきなりPSwMdel = Falseに変わってしまいIF後の削除処理を通っていませんでした
また、PSwMdelをウォッチ式に入れて確認もしてみたのですがOKを押した後は
ずっとTrueのまま変わっていませんでした
今まで何年も同じようなコードを使用していますがこんな事は一度も無かったので困惑しています
どうすればOK押した後でも確実にPSwMdel = Trueを元のフォームモジュールに持って行けるのでしょうか?

投稿日時 - 2019-02-21 16:32:57

QNo.9590126

困ってます

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

グローバル変数はまれに飛ぶことがあると聞いたことがあります。
このようにしてみてはいかがでしょう。
Public Function PMsgDel()
If (MsgBox("削除してよろしいですか?", 1 + 48 + 256, "削除処理確認メッセージ゛") = vbOK) Then
PMsgDel = True
Else
PMsgDel = False
End If
End Function
Private Sub UserForm_***()
If PMsgDel = True Then
~以下削除処理~
End If
End Sub

投稿日時 - 2019-02-21 19:15:50

お礼

ありがとうございます。
戻りが一つならFunction自身に返した方が良さそうですね

投稿日時 - 2019-02-23 19:34:03

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問