解決済み

AccessVBAの標準モジュール

  • 困ってます
  • 質問No.9590126
  • 閲覧数117
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 79% (149/187)

標準モジュール
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を元のフォームモジュールに持って行けるのでしょうか?

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

  • 回答No.1

ベストアンサー率 54% (466/857)

グローバル変数はまれに飛ぶことがあると聞いたことがあります。
このようにしてみてはいかがでしょう。
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
お礼コメント
tetsusi

お礼率 79% (149/187)

ありがとうございます。
戻りが一つならFunction自身に返した方が良さそうですね
投稿日時 - 2019-02-23 19:34:03
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集

ピックアップ

ページ先頭へ