2011-11-03 2 views
0

많은 보고서에 사용되는 사용자 지정 빌드 인쇄 대화 상자가 있습니다. 그 인수는 보고서 이름, 필터 문자열, 보고서에 대한 열린 args입니다. 내가하고 싶은 것은 양식에 인쇄하기 위해 지정된 보고서의 캡션을 표시하는 것입니다. 성능상의 이유로 보고서를 열지 말고 캡션을 가져 와서 다시 닫으십시오. 보고서 자체를 실제로 열지 않고 데이터베이스에서 가져 오는 것이 좋습니다.닫힌 보고서 캡션 가져 오기

작동하는 한 가지는 클래스 이름 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

(어떤 작품). "가벼운"보고서 (즉, 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 
    
관련 문제