访问表单以打开表单或报告,具体取决于表格中的内容

时间:2015-07-31 14:47:27

标签: vba ms-access

我有一个带有组合框的表单,显示我的所有报告。我的一些报告有一个查找表单,需要填写以获取正确的数据。例如,我打开一个表单,然后选择一年,然后该报告将在那一年打开。

组合框中的值来自一个表,该表具有报告名称以及用于显示表单或报告的内容 - 一些是OpenForm,另一些是OpenReport。我把整个命令放在这个字段中 - DoCmd.Open(报告或表格)。我怎么能让它运行?

到目前为止,我的代码是???通过我没有得到的:

    If Not IsNull(ComboReports) And ComboReports <> "" Then

    Dim rep As Variant
    rep = DLookup("[ReportOpenCommand]", "tblCodesReports", "ReportAccessName = " & Me.ComboReports)
    DoCmd.???? rep

Else

    MsgBox ("You Must First Select a Report To Print!")
    ComboReports.SetFocus

End If

提前致谢!

1 个答案:

答案 0 :(得分:0)

通过将整个命令存储在字段中,您无法使其运行。你必须存储参数。

解决方案A:使用字段

为ObjectName,ObjectType和FriendlyTitle创建字段。使用这些选择并运行报告。这些可以直接加载到组合框中以便于使用:

<强> tblCodesReports:

+------------+------------+------------+---------------+
|  ReportId  | ObjectName | ObjectType | FriendlyTitle |
+------------+------------+------------+---------------+
| AutoNumber | Text       | Long       | Text          |
+------------+------------+------------+---------------+

<强>组合框:

  • 行来源:SELECT ReportId,FriendlyTitle,ObjectName,ObjectType FROM tblCodesReports ORDER BY FriendlyTitle
  • 列数:4
  • 列宽:0; 2; 0; 0
  • 装订栏:1

<强>代码

Dim sName As String
Dim eType As Access.AcObjectType

With ComboReports

    sName = .Column(2, .ListIndex)
    eType = .Column(3, .ListIndex)

    Select Case eType
        Case acForm
            DoCmd.OpenForm sName
        Case acReport
            DoCmd.OpenReport sName 
    End If

End With

解决方案B:使用Report.Open

  • 仅在表格中使用报告名称
  • 打开Report_Open事件处理程序中的表单以提供参数

请参阅:Difference between Form.Open and Form.Load