我有一個窗體,我已經建立了一個過濾器搜索運行「after_update」。當過濾器沒有記錄時,表格失敗並顯示空白。爲了解決這個問題,我發現幾個帖子建議添加一個「RecordCount」並使用「if」語句來觸發過濾器,如果它不是< 1或= 0。我的問題是,RecordCount的值似乎顯示了上次運行篩選器選擇的記錄數,而不是當前的篩選器。我已經嘗試了幾種方法來「重新查詢」並在應用過濾器後更新RecordCount的值,但無法讓它更新,因爲我打算工作。訪問VBA篩選器RecordCount沒有正確更新值
實施例:
濾波器1:結果在14所記載,debug.print的RecordCount顯示器1個
過濾器2:結果在22所記載,debug.print的RecordCount顯示14
濾波器3 :結果0個記錄,表格失敗,debug.print的RecordCount顯示器22
代碼:
Private Sub ApplyFilterBtn_Click()
On Error GoTo Err_ApplyFilterBtn_Click
Dim stFilter As String
stFilter = ""
If Nz(Me.FilterOwner, "") <> "" Then
stFilter = stFilter & "[MachineOwner] = " & Me.FilterOwner & " AND "
End If
If Nz(Me.FilterType, "") <> "" Then
stFilter = stFilter & "[MachineType] = " & Me.FilterType & " AND "
End If
If Nz(Me.FilterSubType, "") <> "" Then
stFilter = stFilter & "[MachineSubType] = " & Me.FilterSubType & " AND "
End If
If Nz(Me.FilterMake, "") <> "" Then
stFilter = stFilter & "[Make] Like '" & Me.FilterMake & "' AND "
End If
If Nz(Me.FilterModel, "") <> "" Then
stFilter = stFilter & "[Model] Like '*" & Me.FilterModel & "*' AND "
End If
If Nz(Me.FilterSN, "") <> "" Then
stFilter = stFilter & "[SN] Like '" & Me.FilterSN & "' AND "
End If
If Nz(Me.FilterStatus, "") <> "" Then
stFilter = stFilter & "[NewStatus] = " & Me.FilterStatus & " AND "
End If
If stFilter <> "" Then
stFilter = Left(stFilter, Len(stFilter) - 5) 'Remove the extra AND
'<<<<<<<Issue starts here<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Me.Recordset.Clone
Me.RecordsetClone.Filter = stFilter
Me.RecordsetClone.MoveLast
' Me.RecordsetClone.MoveNext 'Tried this - did not help
' Me.RecordsetClone.Requery 'tried this - did not help
' Me.Filter = stFilter ' Tries this - did not help
'debugging to see value of RecordCount
Debug.Print stFilter
Debug.Print Me.RecordsetClone.RecordCount
'>>>>>> Recordsetclone.RecordCount value not refreshing properly above, shows previously called filter record count
If Me.RecordsetClone.RecordCount < 1 Then ' no records, don't filter
'If Not (Me.RecordsetClone.BOF And Me.RecordsetClone.EOF) Then 'work around attempt 2 - failed
'If Me.NoMatch Then 'Work around Attempt 3 - failed
RemoveFilterBtn_Click ' Call sub that Clears filter
MsgBox "Filter Results in No records", vbOKOnly, "No Results"
Else ' there are records, turn on filter
Me.Filter = stFilter
Me.FilterOn = True
End If 'Me.RecordCount < 1
Else
Me.FilterOn = False
RemoveFilterBtn_Click ' Clears filter
End If 'stFilter <> ""
Exit_ApplyFilterBtn_Click:
Exit Sub
Err_ApplyFilterBtn_Click:
MsgBox Err.Description
Resume Exit_ApplyFilterBtn_Click
End Sub
Private Sub RemoveFilterBtn_Click()
On Error GoTo Err_RemoveFilterBtn_Click
'Sets Filter Field Values to Blank
Me.FilterOwner = ""
Me.FilterType = ""
Me.FilterMake = ""
Me.FilterModel = ""
Me.FilterSN = ""
Me.FilterStatus = ""
Me.FilterSubType = ""
'Removes Filter
Me.Filter = ""
Me.FilterOn = False
Exit_RemoveFilterBtn_Click:
Exit Sub
Err_RemoveFilterBtn_Click:
MsgBox Err.Description
Resume Exit_RemoveFilterBtn_Click
End Sub
rs.MoveLast THEN rs.recordcount :) –
我不知道你的意思。 recordsetclone.recordcount在.MoveLast之後? – Kelly
如果沒有記錄,'MoveLast'將失敗。所以... – Gustav