Ваш запрос не может работать, так как LIKE
предназначен для замены =
в условных выражениях. Однако LIKE
без подстановочных знаков ведет себя как =
. Поэтому поместите оператор LIKE
в оператор SQL.
Dim cbo1, cbo2, cbo3, cbo4 As String
...
If Me.combo1 = "All" Then
cbo1 = "*"
ElseIf Me.combo2.Value = "All" Then
cbo2 = "*"
ElseIf Me.combo3.Value = "All" Then
cbo3 = "*"
ElseIf Me.combo4.Value = "All" Then
cbo4 = "*"
End If
Task1 = "SELECT * FROM qryBase WHERE [Quarter] LIKE '" & cbo1 & "'" _
& " AND [CurrentArea] LIKE '" & cbo2 & "'" _
& " AND [CurrentStatus] LIKE '" & cbo3 & "'" _
& " AND [MainUser] LIKE '" & cbo4 & "'"
Me.frmDatasheet.Form.Recordsource = Task1
Me.frmDatasheet.Form.Requery
Однако, поскольку в комбинированных полях могут быть апострофы, рассмотрите возможность параметризации, чтобы избежать необходимости объединять значения VBA непосредственно в SQL, но связывать их в качестве параметров:
Dim qdef As QueryDef
Dim rst As Recordset
Dim sql AS String
Dim cbo1, cbo2, cbo3, cbo4 As String
sql = "PARAMETERS cbo1 TEXT, cbo2 TEXT, cbo3 TEXT, cbo4 TEXT;" _
& "SELECT * FROM qryBase WHERE [Quarter] LIKE [cbo1]" _
& " AND [CurrentArea] LIKE [cbo2]" _
& " AND [CurrentStatus] LIKE [cbo3]" _
& " AND [MainUser] LIKE [cbo4]"
If Me.combo1 = "All" Then
cbo1 = "*"
ElseIf Me.combo2.Value = "All" Then
cbo2 = "*"
ElseIf Me.combo3.Value = "All" Then
cbo3 = "*"
ElseIf Me.combo4.Value = "All" Then
cbo4 = "*"
End If
' INITIALIZE QUERY OBJECT
Set qdef = CurrentDb.CreateQueryDef("", sql)
' Set qdef = CurrentDb.QueryDefs("mySavedParamQuery")
' BIND PARAMS
qdef!cbo1 = cbo1
qdef!cbo2 = cbo2
qdef!cbo3 = cbo3
qdef!cbo4 = cbo4
' SET FORM RECORDSET TO EXECUTED QUERY
Set rst = qdef.OpenRecordset()
Set Me.frmDatasheet.Form.Recordset = rst
Set rst = Nothing: Set qdef = Nothing