2017-07-11 4 views
0

MSアクセスのいくつかのフォームで同じメッセージ(つまりエラーノート)を使用することが多いため、テーブル内のすべてのメッセージを整理し、機能:MsアクセスVBA - モジュール関数からMsgBoxでケースを選択

Public Function message(msg_name As String, Optional msg_type As VbMsgBoxStyle) 

output = MsgBox DLookup("Msg_Text", "vba_msg", "Msg_Name='" & msg_name & "'"), _ 
      msg_type, _ 
      DLookup("Msg_Caption", "vba_msg", "Msg_Name='" & msg_name & "'") 

プレーンでシンプルです。簡単な通知( "ouput ="と括弧はもちろんこのためには必要ありません)のためにうまく動作します。しかし、私のSelect Caseコンテキストでこれらのメッセージを使用することはできません。

Select Case message("test_message_name", vbYesNo) 
    Case vbYes 
    MsgBox "Yes" 
    Case vbNo 
    MsgBox "No" 
End Select 

「はい」を押しどちらも「いいえ」などとして認識されています。私は "Case Else"も定義しておけば回答が得られます。 私は1つ同じサブ以内に同じ手順を行うと、すべてが正常に動作します:

output = MsgBox DLookup("Msg_Text", "vba_msg", "Msg_Name='" & "test_message_name" & "'"), _ 
      msg_type, _ 
      DLookup("Msg_Caption", "vba_msg", "Msg_Name='" & "test_message_name" & "'") 

Select Case output 
    Case vbYes 
    MsgBox "Yes" 
    Case vbNo 
    MsgBox "No" 
End Select 

私は何かが足りないのですか?

+0

ああ、ほとんどあなたも命名で少し矛盾しているしている、忘れてしまった: 'オプションms_type'は' MSG_TYPE '後で' output'は決して宣言されません。これらのエラーをより簡単に発見するには、 'Option Explicit'をオンにしてください(両方でコンパイルエラーが発生します)。 –

+0

ああ、ありがとう。 "ms_type"は実際にはタイプミスです。私はAccessからコピー貼り付けはしなかったが、もう一度コードを書いた。 –

答えて

2

ファンクションリターンパラメータタイプを割り当てておき、ファンクションにoutputを割り当てるのを忘れてしまいました。

Public Function message(msg_name As String, Optional ms_type As VbMsgBoxStyle) As MsgBoxResult

そして

message = output

か、単に

message = MsgBox DLookup("Msg_Text", "vba_msg", "Msg_Name='" & msg_name & "'"), _ 
      msg_type, _ 
      DLookup("Msg_Caption", "vba_msg", "Msg_Name='" & msg_name & "'") 
関連する問題