【问题标题】:Ms access VBA - Select Case with MsgBox from module functionMs access VBA - 从模块函数中选择带有 MsgBox 的案例
【发布时间】:2017-07-11 08:19:45
【问题描述】:

由于在 MS access 中的多个表单上经常使用同一个消息(即错误注释),我考虑将所有消息组织在一个表中并使用公共函数调用它们:

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 & "'")

简单明了。很好地处理简单的通知(当然,“输出=”和括号不是必需的)。但是,我不能在 Select Case 上下文中使用这些消息:

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

按“是”或“否”都不会被识别为这样。如果我也定义“Case Else”,我只会得到回应。 如果我在同一个 Sub 中执行相同的程序,一切正常:

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

我错过了什么吗?

【问题讨论】:

  • 哦,差点忘了,你的命名也有点不一致:Optional ms_typemsg_type,而output 从未被声明过。尝试打开Option Explicit 以更轻松地发现这些错误(打开它,您将得到它们的编译错误)。
  • 啊,谢谢。 “ms_type”实际上是一个错字。我没有从 Access 复制粘贴,而是再次将代码写下来。

标签: vba function ms-access select msgbox


【解决方案1】:

您刚刚忘记将函数返回参数类型和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 & "'")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多