Hallo access experts,
Weer een uitdaging, ik hoop dat iemand hiermee kan/wil helpen. In de dB heb ik in de koptekst op een doorlopend formulier 6 keuzelijsten met invoervak waarmee ik gegevens wil filteren. De volgorde (voor het gemak van links naar rechts) is: kzl_zk_dealer, kzl_zk_manager, kzl_zk_merk, kzl_zk_afdeling, kzl_zk_functie en kzl_zk_medewerker.
De merken zijn ondergebracht in 2 groepen. In een groepsvak heb ik 3 keuzemogelijkheden: alle merken, groep A of groep B. De dealers kunnen zowel merken uit groep A als groep B vertegenwoordigen, datzelfde geldt voor de managers.
Een dealer vertegenwoordigd één of meerdere merken. Een manager is verantwoordelijk voor bepaalde merken in een beperkt gebied. Bij een dealer heb je afdelingen zoals bijv. algemeen, sales en after sales. Onder afdelingen vallen dan weer functies: bijv. onder sales valt verkoop en marketing en onder after sales valt werkplaats en magazijn.
Het is de bedoeling dat ik op allerlei combinaties kan filteren. Als ik bijv. groep A heb gekozen, dan kan ik alleen de dealers kiezen die daar onder vallen en de managers die voor die groep bij die dealers komen. Allerlei combinaties zijn mogelijk met dien verstande dat ik altijd vanaf links wil beginnen met een keuze. Als ik manager kies en geen merk dan kan ik in afdeling alle afdelingen kiezen die bij die manager horen.
Uiteindelijk wil ik van de selectie een Excel bestand kunnen maken en omdat er zoveel combinaties mogelijk zijn, zit daar mijn probleem. Ik heb wel een code gemaakt maar die is zo gecompliceerd dat ik denk dat het wel eenvoudiger zou moeten kunnen. Wie heeft er een beter idee?
Alvast bedantk voor de hulp
Gr. Jan
Weer een uitdaging, ik hoop dat iemand hiermee kan/wil helpen. In de dB heb ik in de koptekst op een doorlopend formulier 6 keuzelijsten met invoervak waarmee ik gegevens wil filteren. De volgorde (voor het gemak van links naar rechts) is: kzl_zk_dealer, kzl_zk_manager, kzl_zk_merk, kzl_zk_afdeling, kzl_zk_functie en kzl_zk_medewerker.
De merken zijn ondergebracht in 2 groepen. In een groepsvak heb ik 3 keuzemogelijkheden: alle merken, groep A of groep B. De dealers kunnen zowel merken uit groep A als groep B vertegenwoordigen, datzelfde geldt voor de managers.
Een dealer vertegenwoordigd één of meerdere merken. Een manager is verantwoordelijk voor bepaalde merken in een beperkt gebied. Bij een dealer heb je afdelingen zoals bijv. algemeen, sales en after sales. Onder afdelingen vallen dan weer functies: bijv. onder sales valt verkoop en marketing en onder after sales valt werkplaats en magazijn.
Het is de bedoeling dat ik op allerlei combinaties kan filteren. Als ik bijv. groep A heb gekozen, dan kan ik alleen de dealers kiezen die daar onder vallen en de managers die voor die groep bij die dealers komen. Allerlei combinaties zijn mogelijk met dien verstande dat ik altijd vanaf links wil beginnen met een keuze. Als ik manager kies en geen merk dan kan ik in afdeling alle afdelingen kiezen die bij die manager horen.
Uiteindelijk wil ik van de selectie een Excel bestand kunnen maken en omdat er zoveel combinaties mogelijk zijn, zit daar mijn probleem. Ik heb wel een code gemaakt maar die is zo gecompliceerd dat ik denk dat het wel eenvoudiger zou moeten kunnen. Wie heeft er een beter idee?
Code:
Option Compare Database
Option Explicit
Dim qTmp As QueryDef
Dim strSQL As String
Dim ctl As Control
Dim itm As Variant
Dim sFilter As String, sFilterDealer As String, sFilterManager As String, sFilterMerk As String, sFilterAfdeling As String, sFilterFunctie As String, sFilterMedewerker As String
Private Sub cmd_excel_Click()
On Error GoTo cmd_excel_Click_Error
With Me
strSQL = "SELECT tbl_dealer.DKOD_Factuur, tbl_dealer.DKOD_Aflever, tbl_dealer.Bedrijf, tbl_dealer.Adres, tbl_dealer.[Postcode adres], tbl_dealer.[Plaats adres], tbl_manager.Rayonmanager, tbl_manager.E_mail_mng, tbl_merken.Merk, tbl_soort_dealer.Soort, tbl_afdelingen.Afdeling, tbl_dealer_afd_email.E_mail_afd, tbl_functie.Functie, tbl_medewerkers.Vr_medewerker, tbl_medewerkers.Tn_medewerker, tbl_medewerkers.Am_medewerker, tbl_medewerkers.Telefoon, tbl_medewerkers.E_mail_mdw "
strSQL = strSQL & "FROM tbl_merken INNER JOIN (tbl_medewerkers INNER JOIN ((tbl_dealer INNER JOIN (((tbl_afdelingen INNER JOIN ((tbl_afdeling_functie INNER JOIN tbl_manager ON tbl_afdeling_functie.Manager_ID = tbl_manager.ID_manager) INNER JOIN tbl_soort_dealer ON tbl_afdeling_functie.Soort_ID = tbl_soort_dealer.ID_soort_dealer) ON tbl_afdelingen.ID_afdeling = tbl_afdeling_functie.Afdeling_ID) INNER JOIN tbl_dealer_afd_email ON tbl_afdelingen.ID_afdeling = tbl_dealer_afd_email.Afdeling_ID) INNER JOIN tbl_functie ON (tbl_functie.ID_functie = tbl_afdeling_functie.Functie_ID) "
strSQL = strSQL & "AND (tbl_afdelingen.ID_afdeling = tbl_functie.Afdeling_ID)) ON (tbl_dealer.ID_dealer = tbl_dealer_afd_email.Dealer_ID) "
strSQL = strSQL & "AND (tbl_dealer.ID_dealer = tbl_afdeling_functie.Dealer_ID)) INNER JOIN tbl_dealer_medewerker ON tbl_dealer.ID_dealer = tbl_dealer_medewerker.Dealer_ID) ON (tbl_medewerkers.ID_medewerker_dealer = tbl_dealer_medewerker.Medewerker_ID) "
strSQL = strSQL & "AND (tbl_medewerkers.ID_medewerker_dealer = tbl_afdeling_functie.Medewerker_ID)) ON tbl_merken.ID_merk = tbl_afdeling_functie.Merk_ID "
If Not .kzl_zk_dealer <> vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling <> vbNullString And Not .kzl_zk_functie <> vbNullString Then
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling <> vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling <> vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling <> vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer <> vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling <> vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer <> vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling <> vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer <> vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer <> vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer <> vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer <> vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling <> vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager <> vbNullString And Not .kzl_zk_merk = vbNullString And Not .kzl_zk_afdeling <> vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Merk_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_merk]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
ElseIf Not .kzl_zk_dealer = vbNullString And Not .kzl_zk_manager = vbNullString And Not .kzl_zk_merk <> vbNullString And Not .kzl_zk_afdeling = vbNullString And (Not .kzl_zk_functie <> vbNullString Or Not .kzl_zk_functie = vbNullString) And (Not .kzl_zk_medewerker <> vbNullString Or Not .kzl_zk_medewerker = vbNullString) Then
strSQL = strSQL & "WHERE(((tbl_afdeling_functie.Dealer_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_dealer]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Manager_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_manager]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Afdeling_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_afdeling]) "
strSQL = strSQL & "And ((tbl_afdeling_functie.Functie_ID) = [Formulieren]![frm_invoer_gegevens]![kzl_zk_functie])"
End If
strSQL = strSQL & "GROUP BY tbl_dealer.DKOD_Factuur, tbl_dealer.DKOD_Aflever, tbl_dealer.Bedrijf, tbl_dealer.Adres, tbl_dealer.[Postcode adres], tbl_dealer.[Plaats adres], tbl_manager.Rayonmanager, tbl_manager.E_mail_mng, tbl_merken.Merk, tbl_soort_dealer.Soort, tbl_afdelingen.Afdeling, tbl_dealer_afd_email.E_mail_afd, tbl_functie.Functie, tbl_medewerkers.Vr_medewerker, tbl_medewerkers.Tn_medewerker, tbl_medewerkers.Am_medewerker, tbl_medewerkers.Telefoon, tbl_medewerkers.E_mail_mdw;"
Set qTmp = CurrentDb.QueryDefs("qry_medewerkers_gekoppeld")
qTmp.SQL = strSQL
DoCmd.OutputTo acOutputQuery, "qry_medewerkers_gekoppeld", "ExcelWorkbook(*.xlsx)", "Selectie.xlsx", True, "", , acExportQualityScreen
End With
On Error GoTo 0
Exit Sub
cmd_excel_Click_Error:
Select Case Err.Number
Case 2302
Call MsgBox("Je hebt nog een Excel bestand open staan." _
& vbCrLf & "" _
& vbCrLf & "Deze eerst afsluiten." _
, vbInformation, Application.Name)
End Select
' MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure cmd_excel_Click of VBA Document Form_frm_invoer_gegevens"
End Sub
Alvast bedantk voor de hulp
Gr. Jan