Gefilterde exporteren naar Excel

Status
Niet open voor verdere reacties.

Daneron

Gebruiker
Lid geworden
10 jun 2003
Berichten
186
Hoi,

Heb diverse berichten gelezen maar niet echt kunnen vinden wat ik zocht, wat ik wil is het gefilterde exporteren naar een Excel file ipv de hele query exporteren.

Onderstaand is dus de hele query exporteren, hoe krijg ik alleen het gefilterde geëxporteerd?

DoCmd.OutputTo acQuery, "Query1", "MicrosoftExcelBiff8(*.xls)", "", False, "", 0
MsgBox "gegevens zijn opgeslagen in een Excel-bestand", vbInformation, "Exporteren"

Heb een testbestandje toegevoegd als voorbeeldBekijk bijlage Exporteren.zip,

alvast bedankt,
 
Je kunt alleen 'hele' dynasets exporteren, dus ofwel een hele tabel, ofwel de complete dynatabel van een query. Je zult ofwel een extra query moeten maken die de selectie bevat en die exporteren, ofwel een tijdelijke tabel moeten gebruiken.
 
Ik heb nog even in de db gekeken, maar ik zie nergens een filter staan; hoe had je gedacht die query te filteren? En waarom staat de tabel op een subformulier? Lijkt mij nergens voor nodig, je kunt gewoon een doorlopend formulier maken en de knop in de koptekst zetten.
 
Dat is inderdaad de methode die ik ook al aangaf: werk met een tijdelijke query. Overigens hoeft dat niet eens, je kunt ook de query in jouw huidige query tijdelijk aanpassen, exporteren en vervolgens weer terugzetten. Het is maar wat je handiger vindt. Persoonlijk ben ik geen voorstander van het maken van allerlei tijdelijke objecten die je dan weer moet verwijderen. Als dat laatste niet lukt, om wat voor reden dan ook, en je voert de procedure opnieuw uit werkt die niet omdat je een object maaréén maal mag aanmaken. Dus daarom pas ik liever de bestaande query aan.
Met Me.Filter kun je een filter uitlezen; dat kun je dan gebruiken in het WHERE stuk. Als je de query zelf aanmaakt, heb je geen ; in de string staan en dan hoef je dus ook niks te verwijderen.
 
Met Me.Filter kun je meerdere velden filteren? Het is de bedoeling dat ik meerdere velden kan filteren, bijvoorbeeld op jaar, verschillende maanden en object.
 
Waarom niet? Probeer maar:
Code:
    MsgBox Me.Filter
En dat filter kan je dus zo gebruiken in je query.
 
Als ik het via een query zou doen hoe krijg ik dan standaard een ongefilterde lijst te zien, via een query kijkt hij wat er in txtFilter1 t/m 8 staat?
 
Probeer dit eens:
Code:
Dim strSQL As String
Dim qDef As QueryDef
    
    DoCmd.OutputTo acOutputQuery, "Query1", acFormatXLSX, CurrentProject.Path & "\" & "test.xlsx"
    Set qDef = CurrentDb.QueryDefs("query1")
    strSQL = "SELECT ID, DOCJaar, [DOCSoort document], DOCDatum, DOCAfzender, DOCOnderwerp, SYSVakgebied, SYSSysteem, OPSLKenmerk FROM INBOEKEN"
    qDef.SQL = strSQL & " WHERE " & Me.Filter
    DoCmd.OutputTo acOutputQuery, "Query1", acFormatXLSX, CurrentProject.Path & "\" & "Gefilterd.xlsx"
    qDef.SQL = strSQL
 
De fout is logisch, en vervelend. Het probleem is dat het formulierfilter uitgaat van de onderliggende query, maar de filter die je in de query zet gebaseerd moet zijn op de onderliggende tabel. En die heet anders. Het probleem is op te lossen door de naam van de query te verwijderen uit het filter. Dat doe je dan zo:
Code:
Dim strSQL As String, sFilter As String
Dim qDef As QueryDef
    strSQL = "SELECT ID, DOCJaar, [DOCSoort document], DOCDatum, DOCAfzender, DOCOnderwerp, SYSVakgebied, SYSSysteem, OPSLKenmerk FROM INBOEKEN"
    Set qDef = CurrentDb.QueryDefs(Me.RecordSource)
    DoCmd.OutputTo acOutputQuery, Me.RecordSource, acFormatXLSX, CurrentProject.Path & "\" & "test.xlsx"
    sFilter = " WHERE " & Replace(Me.Filter, "[" & Me.RecordSource & "].", "")
    qDef.SQL = strSQL & sFilter
    DoCmd.OutputTo acOutputQuery, Me.RecordSource, acFormatXLSX, CurrentProject.Path & "\" & "Gefilterd.xlsx"
    qDef.SQL = strSQL
 
Hoi Octafish, krijg nog steeds de melding 'De component WHERE bevat een syntaxis fout'
 
Dat is heel vreemd; ik heb de code in jouw tweede voorbeeldje gemaakt en daar werkte hij (thuis) prima. Net op het werk opnieuw het tweede bestand neergezet, mijn nieuwe code geplakt en getest, en hij werkt gelijk. Dit is de hele procedure onder de knop:
Code:
Private Sub Exporteren_Click()
On Error GoTo Err_Exporteren_Click
Dim strSQL As String
Dim qDef As QueryDef
    
    strSQL = "SELECT ID, DOCJaar, [DOCSoort document], DOCDatum, DOCAfzender, DOCOnderwerp, SYSVakgebied, SYSSysteem, OPSLKenmerk FROM INBOEKEN"
    Set qDef = CurrentDb.QueryDefs(Me.RecordSource)
    DoCmd.OutputTo acOutputQuery, Me.RecordSource, acFormatXLSX, CurrentProject.Path & "\" & "test.xlsx"
    sFilter = " WHERE " & Replace(Me.Filter, "[" & Me.RecordSource & "].", "")
    qDef.SQL = strSQL & sFilter
    DoCmd.OutputTo acOutputQuery, Me.RecordSource, acFormatXLSX, CurrentProject.Path & "\" & "Gefilterd.xlsx"
    qDef.SQL = strSQL
    Exit Sub

Err_Exporteren_Click:
    If Err = 2501 Then
        MsgBox "geannuleerd"
    Else
      MsgBox Err.Description & "" & "  De foutcode = " & "" & Err.Number, vbExclamation, "Fout"
    End If
End Sub
Die maakt dan twee bestanden aan, Gefilterd.xlsx en test.xlsx.
 
Heb een nieuwe database gemaakt en de boel geïmporteerd, nog steeds niet kunnen filteren en ook dezelfde foutmelding.
Zal het straks op mn werk proberen maar daar had ik gisteren ook dezelfde foutmelding en niet kunnen filteren?
 
Vreemd; hier de versie die bij mij dus in twee omgevingen prima werkt.
 

Bijlagen

  • Exporteren2.zip
    45 KB · Weergaven: 48
Heb het op verschillende computers geprobeerd, ook verschillende access versies (2010 en 2016) maar blijf hetzelfde probleem houden dat ik niet kan filteren (gele velden)
Als ik op de knop exporteren klik dan moet ik diverse parameters invullen (bijvoorbeeld Query1.SYSVakgebied) en dit retourneerd in een foutmelding die ik eerder ook had. ('De component WHERE bevat een syntaxis fout' )

Is er geen andere manier? heb het idee dat het allemaal omslachtig is?
 
Heet bij jou de query dan anders? Al zou dat met de versie in het voorbeeld niet uit mogen maken, omdat hij 'live' naar de recordbron van het formulier kijkt. Post anders nog eens een voorbeeldje die het bij jou niet doet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan