获取已关闭报告的标题

时间:2011-11-03 15:14:30

标签: ms-access vba reporting access-vba

我有一个用于许多报告的自定义构建打印对话框。它的参数是报告名称,过滤字符串,报告的打开参数等。我想要做的是显示指定在表单上打印的报告的标题。出于性能原因,我宁愿不打开报告,获取标题并再次关闭它。我宁愿以某种方式从数据库中获取它而不实际打开报告本身。

可行的一件事是使用它的类名report_some_report.caption来调用报告,但如果报告名称存储在变量中,则无法执行此操作。我原本期望Reports("some_report").caption也可以工作,但它只适用于开放报告。

有更好的方法可以做到这一点,还是我将不得不做以下的事情? (哪个有效)

docmd.OpenReport "schedule_simple",acViewDesign,,,acHidden
strCaption = Reports("schedule_simple").Caption
docmd.Close acReport,"schedule_simple"

1 个答案:

答案 0 :(得分:1)

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

你有几个选择。

  1. 您可以使用RptName和RptCaption字段创建一个本地表并查询该字段。当然,那么你需要以某种方式更新它。
  2. 您可以编写一个“记忆”结果的函数,这样您每次运行程序时只需打开一次给定的报告。例如:

    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