Export maschera filtrata

Ciao,

sto ancora lavorando al mio database, diciamo che sto cercando di migliorarlo.

Ho un problema che non riesco a risolvere:

Ho creato una maschera per filtrare i record di una tabella ( i filtri sono applicati tramite caselle combinate, caselle di testo e date che ho posizionato nell'intestazione di maschera), nel corpo della maschera visualizzo i risultati. 

Ora quello che vorrei fare è esportare in formato Excel proprio i risultati del filtro, ho provato in diversi modi quello che più si avvicina a quello che vorrei ottenere è questo:

Private Sub cmd_export_excel_Click()

DoCmd.OutputTo acOutputForm, "Search Report", acFormatXLSX, "", False, "", , acExportQualityPrint

End Sub

Il problema è che oltre a esportare i campi che mi servono, nel file Excel mi ritrovo anche le etichette e i comandi che si trovano nell'intestazione di maschera, io vorrei esportare solo il contenuto filtrato che si trova nel corpo della maschera e con lo stesso layout.

Ho bisogno anche di poter scegliere di volta in volta il percorso di salvataggio del file.

Mi potete gentilmente aiutare?

Grazie anticipatamente.

Buon pomeriggio 

Claudio

Risposta
Risposta

ciao Claudio,

nell'impostazione del filtro, supponendo fosse presente una tabella prodotti con idprodotto, hai sicuramente indicato :

me.filter="idProdotto=" & me.idprodotto

nella clausola where che vai a concatenare quel idProdotto è associato per esempio alla tabella ordini o dettaglio ordini come chiave esterna.

Devi quindi sostituire idProdotto con l'alias + nome della tabella nella concatenazione del filtro.

esempio:

Dim strSql    As String
Dim strFilter As String
Dim qdf    As DAO.QueryDef
Const queryFilter As String = "QExport"

strFilter = Replace(Me.Filter, "[id prodotto]", "p.[id prodotto]")

strSql ="select p.idprodotto…. from prodotti as P inner join ….  where " & strFilter

supponendo che la tabella prodotti abbia un alias P nel predicato sql

il replace va fatto per tutti i campi oggetto di filtro.

ciao, Sandro.

1 persona ha trovato utile la risposta

·

La risposta è risultata utile?

Siamo spiacenti che questo non sia stato utile.

Ottimo. Grazie per il tuo feedback.

Quanto sei soddisfatto di questa risposta?

Grazie per il feedback, ci aiuta a migliorare il sito.

Quanto sei soddisfatto di questa risposta?

Grazie per il tuo feedback.

Risposta
Risposta

ciao Claudio,

se devi esportare in xls perche' non appoggiarsi al metodo TransferSpreadsheet ?

L'unico inconveniente e' che non si puo' di default con questo metodo, che sia una tabella o un query, eliminare i campi :

Dim strSql As String
Dim qdf    As DAO.QueryDef
Const queryFilter As String = "QExport"
strSql = "select * from ordini where " & Me.Filter

Set qdf = CurrentDb.CreateQueryDef(Name:=queryFilter, sqlText:=strSql)

DoCmd.TransferSpreadsheet TransferType:=acExport, _
                          SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
                          TableName:=queryFilter, _
                          FileName:="C:\prova\" & Format$(VBA.Now(), "yyyymmdd") & CStr(CLng(VBA.Rnd() * 10000000)) & ".xlsx"
                       
                        
CurrentDb.QueryDefs.Delete Name:=queryFilter
Set qdf = Nothing

personalizza il nome della tabella ordini con quella propria del tuo scenario.

Se proprio proprio le intestazioni ti infastidiscono a me viene in mente l'utilizzo del metdo queryTable membro di Excel, ma serve l'automazione.

Onestamente, preferirrei questa seconda opzione anche perche' puoi maniupolare il worksheet in modo migliore aprendo l'istanza di Excel da Access.

Ovviamente la strada e' piu' complessa.

Se ti serve scegliere il path di destino ti devi appoggiare ad un fileDialog, ma per questo secondo aspetto in caso ti aiuto nel post successivo, prima vediamo l'esportazione.

Facci sapere.

Ciao, Sandro.

1 persona ha trovato utile la risposta

·

La risposta è risultata utile?

Siamo spiacenti che questo non sia stato utile.

Ottimo. Grazie per il tuo feedback.

Quanto sei soddisfatto di questa risposta?

Grazie per il feedback, ci aiuta a migliorare il sito.

Quanto sei soddisfatto di questa risposta?

Grazie per il tuo feedback.

 
 

Informazioni domanda


Ultimo aggiornamento 6 ottobre 2021 Visualizzazioni 457 Si applica a: