Ms access 获取已关闭报表的标题

Ms access 获取已关闭报表的标题,ms-access,reporting,vba,Ms Access,Reporting,Vba,我有一个用于许多报告的自定义生成打印对话框。它的参数是报表名称、筛选器字符串、报表的打开参数等。我想做的是显示指定在表单上打印的报表的标题。出于性能原因,我不希望打开报告,获取标题并再次关闭它。我宁愿从数据库中获得它,而不实际打开报告本身 一件有效的事情是使用它的类名report\u some\u report.caption调用报表,但是如果不使用存储在变量中的报表名,则无法执行此操作。我希望报告(“一些报告”)。标题也能起作用,但它只适用于打开的报告 有没有更好的方法来做这件事,或者我必须做

我有一个用于许多报告的自定义生成打印对话框。它的参数是报表名称、筛选器字符串、报表的打开参数等。我想做的是显示指定在表单上打印的报表的标题。出于性能原因,我不希望打开报告,获取标题并再次关闭它。我宁愿从数据库中获得它,而不实际打开报告本身

一件有效的事情是使用它的类名
report\u some\u report.caption调用报表,但是如果不使用存储在变量中的报表名,则无法执行此操作。我希望
报告(“一些报告”)。标题
也能起作用,但它只适用于打开的报告

有没有更好的方法来做这件事,或者我必须做如下的事情?(哪个有效)


如果不首先打开报表或使用报表类对象(如您所知),就无法从报表中获取报表标题。还值得注意的是,“轻量级”报告(即HasModule property=False的报告)没有类对象

你有两个选择

  • 您可以创建一个带有RptName和RptCaption字段的本地表,并查询该表。当然,然后你需要以某种方式保持更新
  • 您可以编写一个“记忆”结果的函数,以便每次程序运行时只需打开一次给定的报告。例如:

  • docmd.OpenReport "schedule_simple",acViewDesign,,,acHidden
    strCaption = Reports("schedule_simple").Caption
    docmd.Close acReport,"schedule_simple"
    
    Function GetReportCaption(RptName As String) As String
    Static RptCaptions As Collection
    
        If RptCaptions Is Nothing Then Set RptCaptions = New Collection
        On Error Resume Next
        GetReportCaption = RptCaptions(RptName)
        If Err.Number = 0 Then Exit Function
        On Error GoTo 0
    
        DoCmd.OpenReport RptName, acViewDesign, , , acHidden
        RptCaptions.Add Reports(RptName).Caption, RptName
        DoCmd.Close acReport, RptName
    
        GetReportCaption = RptCaptions(RptName)
    End Function