根据子窗体的选择保存报告

问题描述 投票:1回答:2

我有一个名为(frmcarSearch)的主要形式,它显示称为(tblCar)的表数据。

该表单包含三个下拉菜单(cmbCarcmbTypecmbGroup),允许用户筛选数据并以称为[frmCarSub]的子表单显示它们并且有三个按钮可以保存过滤的数据btnPrintbtnPDFbtnExcel

问题是:如何为每个按钮编写代码,以便报表根据每个下拉菜单中的选择在子表单中显示(或保存)数据?


每个组合框的代码:

Private Sub cmbCar_AfterUpdate()
    Me.cmbGroup.Value = ""
    Me.cmbType.Value = ""

    Me.frmCarSub.SetFocus
    Me.frmCarSub.Form.Filter = "[CarNum]= '" & [cmbCar] & "'"
    Me.frmCarSub.Form.FilterOn = True
End Sub
Private Sub cmbType_AfterUpdate()
    Me.cmbGroup.Value = ""
    Me.cmbCar.Value = ""

    Me.frmCarSub.SetFocus
    Me.frmCarSub.Form.Filter = "[TypeName]='" & [cmbType] & "'"
    Me.frmCarSub.Form.FilterOn = True
End Sub
Private Sub cmbGroup_AfterUpdate()
    Me.cmbCar.Value = ""
    Me.cmbType.Value = ""

    Me.frmCarSub.SetFocus
    Me.frmCarSub.Form.Filter = "[CarGroupName]= '" & [cmbGroup] & "'"
    Me.frmCarSub.Form.FilterOn = True
End Sub

我将此代码用于btnPrint按钮

Private Sub btnPrint_Click()
    If IsNull([cmbCar]) Then
        DoCmd.OpenReport "rptCar", acViewPreview
    Else
        DoCmd.OpenReport "rptCar", acViewPreview, , "[CarNum]='" & [cmbCar] & "'"
    End If
End Sub

但是此代码的问题是我必须对三个菜单使用三个按钮,这是不合逻辑的。

谢谢。

vba ms-access access-vba ms-access-forms
2个回答
0
投票

您可以为表单模块定义如下函数:

Function FilterString() As String
    If Not IsNull(cmbCar) Then FilterString = " AND [CarNum]= '" & cmbCar & "'"
    If Not IsNull(cmbType) Then FilterString = FilterString & " AND [TypeName]= '" & cmbType & "'"
    If Not IsNull(cmbGroup) Then FilterString = FilterString & " AND [CarGroupName]= '" & cmbGroup & "'"

    FilterString = Mid(FilterString, 6)
End Function

然后,定义另一个功能,例如:

Function SetFilter()
    Me.frmCarSub.SetFocus
    Me.frmCarSub.Form.Filter = FilterString
    Me.frmCarSub.Form.FilterOn = True
End Function

然后,每个组合框的事件处理程序将变为:

Private Sub cmbCar_AfterUpdate()
    SetFilter
End Sub

Private Sub cmbType_AfterUpdate()
    SetFilter
End Sub

Private Sub cmbGroup_AfterUpdate()
    SetFilter
End Sub

最后,“打印”按钮事件处理程序可以成为:

Private Sub btnPrint_Click()
    If FilterString = vbNullString Then
        DoCmd.OpenReport "rptCar", acViewPreview
    Else
        DoCmd.OpenReport "rptCar", acViewPreview, , FilterString
    End If
End Sub

并且用户还可以按多个字段进行过滤。


0
投票

非常感谢“ Lee Mac”,您已经提供了完美的建议,打印问题已经解决,我们仍然存在导出到Excel和pdf的问题

© www.soinside.com 2019 - 2024. All rights reserved.