单击它时,我的事件过程无效

时间:2014-05-23 19:34:00

标签: ms-access access-vba ms-access-2010

我在Access中遇到VBA的两个问题,第一个问题是当我点击“搜索”按钮时没有任何反应,第二个问题是“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

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

我相信您设置Me.Requery后必须Me.RefreshMe.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

答案 1 :(得分:0)

如果您不是绝对需要宏,则创建事件过程而不是宏应该可以解决您的问题。为按钮创建事件过程的一种简单方法是右键单击“设计视图”中的按钮,然后单击“构建事件”。然后,您可以将宏中的代码复制并粘贴到事件过程中并删除宏。