列出报告及其说明

时间:2011-04-06 18:52:29

标签: ms-access ms-access-2007 access-vba

获取报告名称列表的各种方法: 查询

SELECT [Name] FROM MsysObjects
    WHERE ([Type] = -32764)

或VBA

Dim rpt As AccessObject
Dim dB As Object

On Error GoTo Error_Handler

Set dB = Application.CurrentProject
For Each rpt In dB.AllReports

   Debug.Print rpt.Name
Next rpt

报告可以在“属性”(右键单击报告对象)下具有“描述”,但我无法使用代码进行访问。

我希望列表框显示与实际报告名称关联的用户友好型报告名称。我正试图避免在此时创建一​​个单独的表来管理它。

1 个答案:

答案 0 :(得分:1)

CurrentProject 是一个ADO对象,我不知道如何从ADO中执行您想要的操作。您可以使用DAO检索描述属性。

? CurrentDb.Containers("Reports").Documents("rptFoo").Properties("Description")
Foo Report

由于 Description 是用户定义的属性,因此在为其指定值之前它不存在。因此,下一行会触发rptLinks的错误3270(找不到属性),因为它没有分配描述

? CurrentDb.Containers("Reports").Documents("rptLinks").Properties("Description")

您可以捕获该错误。或者看看你是否可以使用Allen Browne的HasProperty function

完全不同的方法是使用report_name和friendly_name字段创建tblReports。您必须维护该表,但工作负载应大致相当于在报表对象上维护Description属性。然后你可以在表上使用一个简单的SELECT作为列表框的RowSource。

更新:您也可以使用自定义函数从MSysObjects中进行SELECT,以返回每个报告的描述。

Public Function ReportDescription(ByVal pName As String) As String
    Dim strReturn As String
    Dim strMsg As String

On Error GoTo ErrorHandler

    strReturn = _
        CurrentDb.Containers("Reports").Documents(pName).Properties("Description")

ExitHere:
    On Error GoTo 0
    ReportDescription = strReturn
    Exit Function

ErrorHandler:
    Select Case Err.Number
    Case 3270 'Property not found.'
        'strReturn = "(no Description)"'
        '* no Description -> just echo report name *'
        strReturn = pName
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.description _
            & ") in procedure ReportDescription"
        MsgBox strMsg
        strReturn = vbNullString
    End Select
    GoTo ExitHere
End Function

修改原始查询以使用该功能。

SELECT
    [Name] AS report_name,
    ReportDescription([Name]) AS friendly_name
FROM MsysObjects
WHERE ([Type] = -32764);