我设置了以下简单代码,以选择报告是否应显示“已排除”的组。
Private Sub cmdRptWorktypesByGroups_Click()
Dim rptExclYN As String
rptExclYN = MsgBox("Would you like this report with excluded groups (Yes)" & vbclrf & " or without excluded practice groups (No)?", vbYesNo, "Choose Report With or Without excluded groups")
If rptExclYN = Yes Then
DoCmd.OpenReport "rptWorkTypebyGroups", acViewReport
Else
DoCmd.OpenReport "rptWorkTypebyGroupsNoExcl", acViewReport
End If
End Sub
这是我的代码。它应该是完全直截了当的。问题是,当用户单击“是”时,它会打开rptWorkTypebyGroupsNoExcl报告。当我单击否时,它仍会打开相同的报告。谁能说出我可能做错了什么?
我最初拥有rptWorkTypebyGroups报告,带有查询记录源。我复制了该报告,将副本重命名为rptWorkTypebyGroupsNoExcl,并将其保存为Record Source查询,因为它是自己的名称。我不知道为什么消息框没有打开正确的报告。有人可以帮忙吗?
感谢!
答案 0 :(得分:2)
MsgBox()
函数返回VbMsgBoxResult
值(整数),而不是字符串。
由于您显然没有启用Option Explicit,因此Yes
被创建为新的空Variant,因此无论您选择什么,您的If条件将始终为false。
将Option Explicit
放在每个模块的顶部。
它强制执行变量声明,并在编译时报告未声明或拼写错误的变量/常量。
要在新模块中自动执行此操作,请在VBA编辑器中设置Require Variable Declaration选项。
正确的代码:
Private Sub cmdRptWorktypesByGroups_Click()
Dim rptExclYN As VbMsgBoxResult
rptExclYN = MsgBox("Would you like this report with excluded groups (Yes)" & vbCrLf & " or without excluded practice groups (No)?", vbYesNo, "Choose Report With or Without excluded groups")
If rptExclYN = vbYes Then
DoCmd.OpenReport "rptWorkTypebyGroups", acViewReport
Else
DoCmd.OpenReport "rptWorkTypebyGroupsNoExcl", acViewReport
End If
End Sub
修改:vbCrLf
,而不是vbclrf
另外一个Option Explicit会抓住它。
答案 1 :(得分:0)
Dim rptExclYN As Variant
rptExclYN = MsgBox("Would you like this report with excluded groups (Yes)" & vbCrLf & _
" or without excluded groups (No)?", vbYesNo, "Choose Report With or Without Excluded Groups")
If rptExclYN = vbYes Then
DoCmd.OpenReport "rptWorkTypebyGroups", acViewReport
ElseIf rptExclYN = vbNo Then
DoCmd.OpenReport "rptWorkTypebyGroupsNoExcl", acViewReport
End If
希望这有助于其他人,因为这意味着我不是唯一一个缺少简单事物的人。