CurrentProject 是一个 ADO 对象,我不知道如何从 ADO 做你想要的。您可以使用 DAO 来检索 Description 属性。
? CurrentDb.Containers("Reports").Documents("rptFoo").Properties("Description")
Foo Report
由于 描述 是用户定义的属性,因此在您为其分配值之前它不存在。因此,下一行触发 rptLinks 的错误 3270(找不到属性),因为它没有分配 描述。
? CurrentDb.Containers("Reports").Documents("rptLinks").Properties("Description")
您可以捕获该错误。或者看看你是否可以使用 Allen Browne 的HasProperty function
一种完全不同的方法是创建带有report_name 和friendly_name 字段的tblReports。您必须维护该表,但工作量应该大致相当于维护报表对象的描述属性。然后,您可以在表上使用一个简单的 SELECT 作为列表框的 RowSource。
更新:您还可以使用自定义函数从 MSysObjects 中选择以返回每个报告的描述。
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);