Esportare dati filtrati

Anonimo
2021-01-07T11:49:41+00:00

Buongiorno e Buon Anno a tutti

una form visualizza un elenco di dati provenienti da una Query composta da più tabelle (tre tabelle), la form contiene inoltre diverse combo con le quali attraverso routine vado a filtrare i dati da visualizzare.

Ho la necessità di esportare i dati in Excel ma, non voglio esportare i dati di tutta la query ma solo quelli filtrati, ossia una volta impostati i filtri, premendo sul pulsante "EXCEL" voglio esportare i dati che visualizzo a video.

Ho provato in due modi che, vi illustro di seguito:

La query oggetto della form si chiama "Q_STATISTICHE_CLIENTI", questa è ottenuta da tre tabelle: "CLIENTI"; "DBDDT"; e "DBDDT_DETTAGLIO", da notare che nelle tabelle oggetto della query ci sono alcuni campi "CALCOLATI".

Le COMBO della form che permettono di visualizzare i dati filtrati, per ognuna di esse sull'evento "DOPO AGGIORNAMENTO" richiamano una routine "ApplicaFiltro" che vi riporto:

Private Sub ApplicaFiltro()

    Dim wFiltro As String

    On Error Resume Next

    wFiltro = ""

    If Len(Me.cboCLIENTE & "") > 0 Then

        wFiltro = wFiltro & " And RAGIONE_SOCIALE = '" & Replace(Me.cboCLIENTE, "'", "''") & "' "

    End If

    If Len(Me.cboDESCRIZIONE & "") > 0 Then

        wFiltro = wFiltro & " And DESCRIZIONE = '" & Replace(Me.cboDESCRIZIONE, "'", "''") & "' "

    End If

    If Len(Me.cboMESE & "") > 0 Then

        wFiltro = wFiltro & " And MESE = '" & Replace(Me.cboMESE, "'", "''") & "' "

    End If

    If Len(Me.cboANNO & "") > 0 Then

        wFiltro = wFiltro & " And ANNO = '" & Replace(Me.cboANNO, "'", "''") & "' "

    End If

    If Len(wFiltro) = 0 Then

        Me.SM_STAT_CLIENTI.Form.Filter = ""

        Me.SM_STAT_CLIENTI.Form.FilterOn = False

    Else

        Me.SM_STAT_CLIENTI.Form.Filter = Mid(wFiltro, 6, Len(wFiltro))

        Me.SM_STAT_CLIENTI.Form.FilterOn = True

    End If

End Sub

La prima strada che ho provato a percorrere è stata quella di creare una query, la chiamo "query3", quindi all'evento click del pulsante EXCEL eseguo:

Private Sub cmdEXCEL_Click()

    Const strSql As String = "select * from Q_STATISTICHE_CLIENTI "

Dim qdf As DAO.QueryDef

Set qdf = DBEngine(0)(0).QueryDefs("query3")

qdf.SQL = strSql & Me.Filter

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "query3", Me.PERCORSO & "" & "pluto" & ".xlsx", t

qdf.Close

Set qdf = Nothing

End Sub

ma, anche se filtrato, mi esporta l'intera query.

Altra strada provata, quella di creare una tabella temporanea e, all'evento click del pulsante "EXCEL" eseguo:

Private Sub cmdEXCEL_Click()

    On Error GoTo Errore

    DoCmd.SetWarnings (WarningOff)

    'DoCmd.DeleteObject acTable, "tblFiltrati"

    If Me.Filter = "" Then

        DoCmd.RunSQL "SELECT Q_STATISTICHE_CLIENTI.* INTO tblFiltrati FROM Q_STATISTICHE_CLIENTI"

    Else

        DoCmd.RunSQL "SELECT Q_STATISTICHE_CLIENTI.* INTO tblFiltrati FROM Q_STATISTICHE_CLIENTI Where " & Me.Filter

    End If

    Dim Message, Title, Default, MyValue

    Message = "Inserire il nome del File da salvare...!" & vbCrLf & vbCrLf & "Il File sarà salvato nella cartella: " & vbCrLf & vbCrLf & Me.PERCORSO & "" ' Set prompt.

    Title = "Esporta Tabella Clienti in Excel"    ' Set title.

    Default = "pluto"    ' Set default.

    ' Display message, title, and default value.

    MyValue = InputBox(Message, Title, Default)

    If MyValue = "" Then GoTo Errore

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "tblFiltrati", Me.PERCORSO & "" & MyValue & ".xlsx", t

Dim strInput As String

    strInput = (Me.PERCORSO & "" & MyValue & ".xlsx")

    Application.FollowHyperlink strInput, , True

    GetUserAddress = True

    GoTo A

Errore:

    Select Case Err.Number

        Case Is = 7874

            Resume Next

        Case Else

         MsgBox "Non hai selezionato il nome del file " & vbCrLf & vbCrLf & "o stai tentando di aprire un file non correttamente salvato" & vbCrLf & vbCrLf & "prova a ripetere la procedura!!!", vbCritical, "ATTENZIONE!!!"

        End Select

A:

    DoCmd.SetWarnings (WarningOn)

End Sub

Ma mi viene segnalato l'errore di RunTime 3959 "Le colonne calcolate non sono consentite nelle istruzioni SELECT INTO"

Qualcuno sa come posso fare per poter esportare solo quello che ho precedentemente filtrato?

Grazie a tutti per la collaborazione

A presto

Ciro

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2021-01-07T16:13:17+00:00

    Ciao Sandro

    grazie per la risposta, proverò a seguire il suggerimento, farò qualche prova e ti farò sapere

     a presto

    Ciro

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-01-07T13:57:05+00:00

    ciao Ciro,

    lascia perdere la strada della temporanea e prova a seguire il suggerimento di Nicola.

    La stringa wFiltro ( non mi piace moltissimo la modalità di costruzione, ma questo e' un altro aspetto) contiene il filtro che imposti nella form e che e' contenuto nelle proprieta' filter appunto.

    Quindi, impostandola come clausola where, dovresti ottenere un predicato sql per le sole righe coinvolte dallo statement, che sia o meno in join con altre tabelle, e' indifferente, e poi procedere all'esportazione su xls con il metodo transferSpreadSheet.

    Studiaci su e facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-01-07T13:17:12+00:00

    Ciao Nicola

    grazie per la tua risposta, ho visto la discussione del grande Sandro e, non credo si possa adattare al mio problema, nella discussione sembra si faccia riferimento a un solo filtro io invece ne ho fino a quattro in contemporanea, non riesco quindi a interpretare e a trasferire al mio programma la soluzione proposta.

    Grazie comunque per l'aiuto e il suggerimento

     a presto

    Ciro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2021-01-07T12:59:37+00:00

    Ciao Ciro, guarda se questo può fare al caso tuo.

    E' una discussione simile alla tua dove il grande Sandro Peruz ha dato come sempre il suo preziosissimo contributo.

    https://answers.microsoft.com/it-it/msoffice/forum/all/export-maschera-filtrata/926b4c87-94ec-4618-8081-f38d09cc7b7a

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento