【问题标题】:Microsoft Access VBA: Button to Filter ReportMicrosoft Access VBA:过滤报告的按钮
【发布时间】:2017-05-04 01:11:53
【问题描述】:

我在 Microsoft Access 中创建了一个报告,它为用户提供了数据,包括识别号、位置、注释等,这些数据存储在一个名为 Report Data 的数据表中。当我单击打开报告时,它将加载所有 2000+ 1 页报告(每个 IDENT NO 1 个)。但是,我只想加载/显示用户通过输入 IDENT NO 选择的 1 个报告。

我用下面的代码创建了一个按钮,我想通过点击时用户输入的 IDENT NO 过滤我的报告(当用户点击按钮时,弹出窗口会询问 IDENT NO,并且那么我只想打开与该 IDENT NO 关联的单个报告)。但是,当我这样做时,它只会像我想要的那样加载 1 页报告,但是没有填充其他数据字段。我已经玩了一段时间的代码,但我不能似乎弄清楚问题是基于下面的代码,还是由于另一个问题。

作为参考,标识号采用带破折号的数字形式,然后是如下版本:1940-1 或 1940-2 或 2910-1 都是标识号的示例。

Private Sub Command33_Click()

Dim id As String
    id = InputBox("Enter the identification number:", "Report Filter")

'if a value was entered, open and filter report
If Len(Trim(id)) > 0 Then
    DoCmd.OpenReport "RARL Requests Report", acViewPreview, , "[IDENT NO] like " & id, acWindowNormal
End If


End Sub

【问题讨论】:

    标签: ms-access vba ms-access-2010


    【解决方案1】:

    您的 ID“数字”是文本值。所以 ID 字段是文本类型。文本字段的过滤器参数需要撇号分隔符。使用不带 * 通配符的 LIKE 运算符无非是使用 = 符号。

    DoCmd.OpenReport "RARL Requests Report", acViewPreview, , "[IDENT NO] = '" & id & "'", acWindowNormal

    我做了一个带撇号和不带撇号的测试。没有我得到两个弹出输入提示,带有撇号的只有 InputBox 弹出。但是,在这两种情况下,报表仍会以过滤后的数据打开。因此,您的问题可能还有其他问题。可能需要直接审查您的数据库。如果您想提供,可以上传到 Box.com 等文件共享网站并发布文件链接。

    难以验证 InputBox 条目。即使条目无效导致用户感到沮丧,报告也会运行。最好在表单上使用组合框供用户选择 ID。

    建议名称中不要使用空格或标点符号/特殊字符(下划线除外)。

    【讨论】:

    • 是否可以修改上述内容,以便打开以用户输入内容开头的任何报告。例如,如果我有 IDENT NO 为 1940-1、1940-2 和 1940-3 的报告,而用户​​只在 InputBox 中输入了 1940,它会显示所有这 3 个报告吗?
    • "[IDENT NO] LIKE '" & id & "*'" - 组合框仍然是我推荐的方法。只需设置为不将输入限制为列出的值。但该列表仍将用于指导用户获取有效的完整 ID 号。
    • 我明白你在说什么。是否有一个组合框功能,我可以在该行代码中替换 InputBox,这样我仍然可以单击按钮打开组合框选择?此外,如果是这种情况,是否需要对代码的其余部分进行额外修改?
    • 将组合框命名为 cbxID,然后:"[IDENT NO] LIKE '" & Me.cbxID & "*'"
    • 好的。是否可以从代码生成组合框。类似 cbxID = ComboBox(Fields) 的东西,代替 id = InputBox (Fields) 或者这在 Access 中是不可能的?
    【解决方案2】:

    看起来您的 IdentNo 是一个文本字段。您需要使用单引号对其进行范围。所以:

    If Len(Trim(id)) > 0 Then
        DoCmd.OpenReport "RARL Requests Report", acViewPreview, , "[IDENT NO] like '" & id & "'", acWindowNormal
    End If
    

    如果它不是文本(即 Int 或 Double),那么您将按照自己的方式进行操作;不需要单引号。

    【讨论】:

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