Ms access 如何在报表筛选器上组合两个字符串?

Ms access 如何在报表筛选器上组合两个字符串?,ms-access,vba,Ms Access,Vba,我第一次在Access中为应用程序编写VBA代码,并创建了两个单独的字符串来过滤报告。第一个strFilter根据列表框中的条件过滤报告。第二个strWhere已设置为根据输入到一对文本框中的日期过滤报告。单独使用时,这两个字符串过滤器都能完美工作 我想知道的是,是否有一种方法可以轻松地组合这两个字符串,以便用户根据列表框中的条件和他们在文本框中输入的日期筛选报告 将listbox筛选器添加到reports筛选器时,我的代码当前如下所示: With Reports![rptFaultRecord

我第一次在Access中为应用程序编写VBA代码,并创建了两个单独的字符串来过滤报告。第一个strFilter根据列表框中的条件过滤报告。第二个strWhere已设置为根据输入到一对文本框中的日期过滤报告。单独使用时,这两个字符串过滤器都能完美工作

我想知道的是,是否有一种方法可以轻松地组合这两个字符串,以便用户根据列表框中的条件和他们在文本框中输入的日期筛选报告

将listbox筛选器添加到reports筛选器时,我的代码当前如下所示:

With Reports![rptFaultRecords]
    .Filter = strFilter
    .FilterOn = True
我想在strFilter旁边添加要按日期筛选的字符串strWhere,以便可以按日期和列表条件筛选报告。尝试执行此操作时输入的所有代码都给了我一个运行时错误3075。这两个字符串是否可以轻松组合?如果可以,我如何组合

如果您需要查看,我编写的其余代码如下所示:

Private Sub btnAllFaultsFilter_Click()
Dim varItem As Variant
Dim strRoom As String   
Dim strFilter As String
Dim strDevice As String
Dim strCat As String
Dim strStatus As String
Dim strDateField As String
Dim strWhere As String
Const strcJetDate = "\#mm\/dd\/yyyy\#"

strDateField = "[f_datereported]"

    If IsDate(Me.txtStartDate) Then
    strWhere = "(" & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate) & ")"
End If
If IsDate(Me.txtEndDate) Then
    If strWhere <> vbNullString Then
        strWhere = strWhere & " AND "
    End If
    strWhere = strWhere & "(" & strDateField & " < " & Format(Me.txtEndDate + 1, strcJetDate) & ")"
End If   


For Each varItem In Me.lstRoom.ItemsSelected
    strRoom = strRoom & ",'" & Me.lstRoom.ItemData(varItem) & "'"
    Next varItem
    If Len(strRoom) = 0 Then
        strRoom = "Like '*'"
    Else
        strRoom = Right(strRoom, Len(strRoom) - 1)
        strRoom = "IN(" & strRoom & ")"
    End If
For Each varItem In Me.lstDevice.ItemsSelected
    strDevice = strDevice & ",'" & Me.lstDevice.ItemData(varItem) & "'"
    Next varItem
    If Len(strDevice) = 0 Then
        strDevice = "Like '*'"
    Else
        strDevice = Right(strDevice, Len(strDevice) - 1)
        strDevice = "IN(" & strDevice & ")"
    End If
For Each varItem In Me.lstCategory.ItemsSelected
    strCat = strCat & ",'" & Me.lstCategory.ItemData(varItem) & "'"
    Next varItem
    If Len(strCat) = 0 Then
        strCat = "Like '*'"
    Else
        strCat = Right(strCat, Len(strCat) - 1)
        strCat = "IN(" & strCat & ")"
    End If
For Each varItem In Me.lstStatus.ItemsSelected
    strStatus = strStatus & ",'" & Me.lstStatus.ItemData(varItem) & "'"
    Next varItem
    If Len(strStatus) = 0 Then
        strStatus = "Like '*'"
    Else
        strStatus = Right(strStatus, Len(strStatus) - 1)
        strStatus = "IN(" & strStatus & ")"
    End If
strFilter = "[c_roomid] " & strRoom & " AND [f_computername] " & strDevice & " AND [f_faultcategory] " & strCat & " AND [f_faultstatus] " & strStatus

With Reports![rptFaultRecords]
    '.Filter = strFilter
    .Filter = strFilter
    .FilterOn = True

End With
End Sub
Private Sub btnAllFaultsFilter\u Click()
作为变体的Dim varItem
作为字符串的Dim strRoom
作为字符串的Dim strFilter
作为字符串的Dim strDevice
作为字符串的Dim strCat
作为字符串的Dim strStatus
将strDateField设置为字符串
作为字符串的Dim strWhere
Const strcJetDate=“\\\\ mm\/dd\/yyyy\\”
strDateField=“[f_datereported]”
如果是IsDate(Me.txtStartDate),那么
strWhere=“(”&strDateField&“>=”&Format(Me.txtStartDate,strcJetDate)&“)
如果结束
如果是IsDate(Me.txtEndDate),则
如果strWhere vbNullString,则
strWhere=strWhere&“和”
如果结束
strWhere=strWhere&(“&strDateField&”<“&Format(Me.txtEndDate+1,strcJetDate)&”)
如果结束
对于Me.lstRoom.items中的每个变量,已选择
stroom=stroom&“,”&Me.lstRoom.ItemData(varItem)&“”
下一个变量
如果Len(stroom)=0,则
stroom=“像'*'”
其他的
stroom=Right(stroom,Len(stroom)-1)
stroom=“IN(“&stroom&”)
如果结束
对于Me.lstDevice.Items中的每个变量,已选择
strDevice=strDevice&“,”&Me.lstDevice.ItemData(变量项)&“”
下一个变量
如果Len(strDevice)=0,则
strDevice=“像'*'”
其他的
strDevice=右侧(strDevice,Len(strDevice)-1)
strDevice=“IN(“&strDevice&”)
如果结束
对于Me.lstCategory.Items中的每个变量,已选择
strCat=strCat&“,”&Me.lstcontegory.ItemData(变量项)&“”
下一个变量
如果Len(strCat)=0,则
strCat=“像'*'”
其他的
strCat=右(strCat,透镜(strCat)-1)
strCat=“IN(“&strCat&”)
如果结束
对于Me.lstStatus.items中的每个变量,已选择
strStatus=strStatus&“,”&Me.lstStatus.ItemData(varItem)&“”
下一个变量
如果Len(strStatus)=0,则
strStatus=“像'*'”
其他的
strStatus=右(strStatus,Len(strStatus)-1)
strStatus=“IN(“&strStatus&”)
如果结束
strFilter=“[c_roomid]”和[f_computername]”和[f_faultcategory]”和[f_faultstatus]”和[f_faultstatus]”和strStatus
有报道![现场记录]
'.Filter=strFilter
.Filter=strFilter
.FilterOn=True
以
端接头

这是一个VBA编码问题,而不是dba问题。例如,如果您有一个SQL查询存在问题,请与我们联系。参观、访问帮助中心并查看“帮助我们帮助您”博客。我将不得不投票决定是否结束,除非这个问题可以在主题(可疑)上提出——它属于StackOverflow。这是一个VBA编码问题,而不是dba问题。例如,如果您有一个SQL查询存在问题,请与我们联系。参观、访问帮助中心并查看“帮助我们帮助您”博客。我将不得不投票决定是否结束,除非这个问题可以在主题上提出(值得怀疑)——它属于StackOverflow。