Сохранить отчеты по выбору из формы - PullRequest
1 голос
/ 13 января 2020

У меня есть основная форма (frmcarSearch), которая отображает данные таблицы (tblCar).

Форма содержит три раскрывающихся меню (cmbCar, cmbType, * 1007). *), которые позволяют пользователю фильтровать данные и отображать их в форме (frmCarSub), и есть три кнопки для сохранения отфильтрованных данных btnPrint, btnPDF, btnExcel.

Вопрос заключается в следующем: как написать код для каждой кнопки, чтобы в отчете отображались (или сохранялись) данные в форме, в соответствии с выбором из каждого раскрывающегося меню?


Код для каждого поля со списком:

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

Но проблема с этим кодом я должен использовать три кнопки для трех меню, и это нелогично.

Спасибо.

1 Ответ

0 голосов
/ 13 января 2020

Вы можете определить такую ​​функцию с помощью модуля для вашей формы:

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

И пользователь также имеет возможность фильтровать по нескольким полям.

...