2014-05-23 21 views
0

我在Access中遇到了兩個與我的VBA有關的問題,第一個是當我單擊Search按鈕時什麼都沒有發生,第二個是說明theres與ME子句有錯誤。當我點擊它時,我的事件過程沒有任何作用

Private Sub Search_Click() 

    Dim strWhere As String, lngLen As Long 
    Const conJetDate = "\#mm\/dd\/yyyy\#" 
    strWhere = "" 

    If Not IsNull(Me.AssignedTo) Then 
    strWhere = strWhere & "([AssignedTo] Like '*" & Me.AssignedTo & "*') AND" 
    End If 

    If Not IsNull(Me.OpenedBy) Then 
    strWhere = strWhere & "([OpenedBy] Like '*" & Me.OpenedBy & "*') AND" 
    End If 

    If Not IsNull(Me.Status) Then 
    strWhere = strWhere & "([Status] Like '*" & Me.Status & "*')AND" 
    End If 

    If Not IsNull(Me.Category) Then 
    strWhere = strWhere & "([Category] Like '*" & Me.Category & "*')AND" 
    End If 

    If Not IsNull(Me.Priority) Then 
    strWhere = strWhere & "([Priority] Like '*" & Me.Priority & "*')AND" 
    End If 

    If Not IsNull(Me.OpenedDateFrom) Then 
    strWhere = strWhere & "([EnteredOn] >= " & Format(Me.OpenedDateFrom, conJetDate) & ") AND " 
    End If 

    If Not IsNull(Me.DueDateFrom) Then 
    strWhere = strWhere & "([EnteredOn] <= " & Format(Me.DueDateFrom, conJetDate) & ") AND " 
    End If 

    lngLen = Len(strWhere) - 5 

    If lngLen <= 0 Then 
    MsgBox "No criteria", vbInformation, "Nothing to do." 
    Else 

    End If 

    strWhere = Left$(strWhere, lngLen) 
    Me.Filter = strWhere 
    Me.FilterOn = True 
End Sub 

任何幫助表示讚賞

+1

我很困惑。如果點擊搜索時沒有任何反應,您怎麼知道第二個問題? BTB,你應該一次只問一個問題,嘗試通過調試或使用MsgBox進行測試,例如。 MsgBox(Me.Status) –

+0

因爲我創建了一個宏並運行它,調試問題出現了。 – user3666237

+0

你知道事件過程爲什麼沒有做任何事嗎? – user3666237

回答

0

我相信,你必須Me.RequeryMe.Refresh設置Me.Filter後。此外,對於你的日期,你必須圍繞他們與#。我相信你需要使用4而不是5來移除額外的AND。最後,我將字符串的分隔符更改爲"。這只是我個人的偏好。看代碼:

Private Sub Search_Click() 
    Dim strWhere As String 
    strWhere = IIF(Len(Me.AssignedTo & "") <> 0, "([AssignedTo] Like ""*" & Me.AssignedTo & "*"") AND", "") & _ 
      IIF(Len(Me.OpenedBy & "") <> 0, "([OpenedBy] Like ""*" & Me.OpenedBy & "*"") AND", "") & _ 
      IIF(Len(Me.Status & "") <> 0, "([Status] Like ""*" & Me.Status & "*"") AND", "") & _ 
      IIF(Len(Me.Category & "") <> 0, "([Category] Like ""*" & Me.Category & "*"") AND", "") & _ 
      IIF(Len(Me.Priority & "") <> 0, "([Priority] Like ""*" & Me.Priority & "*"") AND", "") & _ 
      IIF(Len(Me.OpenedDateFrom & "") <> 0, "([EnteredOn] >= #" & Format(Me.OpenedDateFrom, "mm/dd/yyyy") & "#) AND", "") & _ 
      IIF(Len(Me.DueDateFrom & "") <> 0, "([EnteredOn] <= #" & Format(Me.DueDateFrom, "mm/dd/yyyy") & "#) AND", "") 

    If Len(strWhere & "") = 0 Then 
    MsgBox "No criteria", vbInformation, "Nothing to do." 
    Else 
    Me.Filter = Left(strWhere, Len(strWhere & "") - 4) 
    Me.FilterOn = True 
    Me.Requery 
    End If 
End Sub 
+0

感謝您回覆Linger,當我放下代碼並點擊搜索時,事件沒有觸發。 – user3666237

+0

** @ user3666237 **,我修改了代碼。嘗試我的更新,看看它是否適合你。此外,你可能想看看[** Requery VS Refresh **](http://www.599cd.com/tips/access/requery-v-refresh/),看看你真正需要的巫婆。 – Linger

+0

當我點擊搜索按鈕時沒有任何事情發生。你知道爲什麼嗎? – user3666237

0

如果你不是絕對需要一個宏,創建一個事件過程而不是宏應該可以解決你的問題。爲按鈕創建事件過程的簡單方法是在Design View中右鍵單擊該按鈕,然後單擊Build Event。然後,您可以將宏中的代碼複製並粘貼到事件過程中並刪除該宏。

相關問題