2014-06-22 66 views
0

我在VBA定義爲這樣的功能:如何在訪問報告中使用過濾器字符串中的函數?

Function IsInWeek(RefDate As Date, checkDate As Date) As Boolean 
    StartDate = StartOfWeek(RefDate) 
    EndDte = EndOfWeek(RefDate) 
    If (checkDate >= StartDate And checkDate < Enddate) Then 
     IsInWeek = True 
    Else 
     IsInWeek = False 
    End If 
End Function 

我想使用它報告的過濾器子句中如下:

strFilte = "IsInWeek(#" + Format(InDate, "dd/mm/yyyy") + "#, CalanderDate)" 

DoCmd.OpenReport ReportName, acViewPreview, 
With Reports(ReportName) 
     .Filter = strFilter 
     .FilterOn = True 
End With 

但它不工作。該報告包含所有記錄。有什麼問題,我該如何解決?我正在使用access 2003.

注意:我可以使用之間的過濾器字符串來實現函數,但是我正在尋找爲什麼上述技術不起作用。

編輯1

這不是工作壓力太大:

strFilte = "IsInWeek(#" + Format(InDate, "dd/mm/yyyy") + "#, [CalanderDate])= True" 
    If Application.CurrentProject.AllReports(reportname).IsLoaded = True Then 
     DoCmd.Close acReport, reportname 
    End If 
    DoCmd.OpenReport reportname, acViewDesign, strFilter 
    DoCmd.OpenReport reportname, acViewPreview 
+0

如果將函數添加到報表源查詢中,您會得到正確的返回值嗎?只是想看看這是代碼問題還是報告過濾問題。本能告訴我後者,但只是想確定。 – VBlades

+0

你有Option Explicit嗎?在您的初始代碼中,您將strFilte設置爲函數調用,但使用strFilter作爲過濾器。你有它再次你的編輯,所以我認爲這不是一個錯字。我一直在玩耍,在飛行時過濾應該起作用,這與我的記憶相反。也許它就像打字錯誤一樣簡單? – VBlades

回答

0

的DoCmd.OpenReport方法需要,因爲它是最後一個參數一個可選的過濾器子句。因此,也許:

DoCmd.OpenReport ReportName, acViewPreview, ,"IsInWeek(#" + Format(InDate, "dd/mm/yyyy") + "#, [CalanderDate]) = True" 

至於你試過的方法不起作用的原因,我記得訪問是與有關Filter屬性的報告(而不是形式)特別挑剔;不知道你是否可以像那樣飛行。爲了在不使用帶過濾器選項的DoCmd.OpenReport的情況下實現你想要做的事情,我認爲你必須在設計模式下打開報告,改變屬性,然後切換到預覽模式。不過,我記得形式對此更爲寬容。儘管如此,這只是記憶。

編輯:我的語法不正確,在參數之間添加了額外的逗號;根據http://msdn.microsoft.com/en-us/library/office/aa220304%28v=office.11%29.aspx,FilterName是第三個參數,WhereCondition是第四個參數。我正在尋找WhereCondition。

+0

我做到了這一點,但沒有區別。過濾器不起作用。 – mans

+0

嗯。發現了一篇與Access 2010 SP1相關的文章,但可能值得一試:http://social.technet.microsoft.com/Forums/office/en-US/5405f36d-5ca2-4ad3-853c-a9d21cfe72e5/access-2010-運行時-SP1-休息-docmdopenreport上帶有一個-其中參數?論壇= officeitproprevious。否則,只是爲了試驗,請在設計模式下(通過代碼)打開它,更改過濾器,然後切換到預覽。我想確保你的函數返回你所期望的。如果我白天有時間,我會嘗試重現並找到解決方案。 – VBlades

+0

看我上面的編輯。對不起,這裏有很多來回。 – VBlades

相關問題