CurrentProject - это объект ADO, и я не знаю, как делать то, что вы хотите от ADO.Вы можете использовать DAO для извлечения свойства Description .
? CurrentDb.Containers("Reports").Documents("rptFoo").Properties("Description")
Foo Report
Поскольку Description является пользовательским свойством, оно не существует, пока вы не назначите значениедля этого.Поэтому следующая строка вызывает ошибку 3270 (свойство не найдено) для rptLinks, поскольку ей не назначено Описание .
? CurrentDb.Containers("Reports").Documents("rptLinks").Properties("Description")
Вы можете перехватить эту ошибку.Или посмотрите, можете ли вы использовать функцию HasProperty Аллена Брауна
Совершенно другой подход заключается в создании tblReports с полями report_name и friendly_name.Вам придется поддерживать эту таблицу, но рабочая нагрузка должна быть примерно эквивалентна поддержке свойств Description для объектов отчета.Затем вы можете использовать простой SELECT для таблицы в качестве RowSource для вашего списка.
Update : вы также можете выбрать SELECT из 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);