Newsgroup: it.comp.appl.access
Titolo: esportare record sottomaschera in excel

Buon pomeriggio a tutti.
Con il codice
   DoCmd.TransferSpreadsheet acExport, , "qsmRiepDipendenti", "C:\Users\" & strUtente & "\Documents\ElencoDipendenti.xlsx"
Creo un file excel con i record presenti nella query qsmRiepDipendenti che è l'origine dati di una sottomaschera che viene filtrata dai controlli posti nella form principale.
Quindi nella form, vedo i record filtrati, nel file excel generato invece sono tati esportati tutti i record.
Come faccio ad esportare solo i record filtrati?
Grazie. 
Giuseppe


Esporta una quey di filtro:
DoCmd.TransferSpreadsheet acExport, , "Query2", "D:\BC.xlsx"
 
Dove Query2:
SELECT Orders.Customer_ID
FROM Orders
WHERE (((Orders.Customer_ID) Like "B*"));
 
Bruno


Ciao Bruno e grazie per la risposta.
Non ho capito la condizione WHERE soprattuto non ho capito Like "B*" .


Nel mio esempio ho scelto di selezionare tutti i record che nel
campo Customer_ID hanno B come brima lettera del nome.
 
Per riferirmi correttamente alle tue circostanze dovrei avere
a disposizione il tuo file.
 
Bruno


Nella SubForm hai il Campo Master/Secondario che agigunge un Filtro ulteriore all'intero Set di records... pertanto esportare usando l'origine della SubForm è sbagliato...
Se poi filtri con altri criteri...
 
La soluzione tecnica più semplice è esportare il Recordset della SubForm usando il metodo CopyFromRecordset membro di Range, che è indipendente da tutto:
 
Dim rs As DAO.Recordset
Dim XL As Object
Dim wb As Object
 
    Set rs = Me!SubFormContainerName.Form.Recordset
    Set XL = CreateObject("Excel.Application")
    Set wb = XL.Workbooks.Open("C:\Users\Kermit\Desktop\Book1.xlsx")
    With wb
        .Worksheets(1).Cells(1).CopyFromRecordset rs
        .Save
        .Close False
    End With
    XL.Quit
    Set XL = Nothing
 
Saluti
@Alex


Grazie Alex.
La sottomaschera non ha il Campo Master/Secondario.
Ho provato con la tua soluzione sostituendo Me!SubFormContainerName.Form.Recordset  con Me!smRiepSoci.Form.Recordset  ma mi esporta tutti i record.
Ho sbagliato io qualcosa?

 Ho sbagliato io qualcosa?
 
Prematuro dirlo...
 
@Alex


Ciao Alex.
Nella form principale ho dei controlli che filtrano la query della sottomaschera.
Man mano che utilizzo un filtro, la proprietà Filtro della sottomaschera si popola.
Ad es.
IDAzienda = 1 And Sesso = 2
e così via se filtro ulteriormente.
Quindi i record da esportare sono quelli dell'origine dati della subform con i filtri memorizzati nella proprietà Filtro.
Spero di averti dato le informazione che mi chiedi.
Giuseppe


Scusate.
Ho dimenticato di specificare che la form principale non ha origine dati, serve solo a filtrare la subform.
Giuseppe


quindi devi cambiare la query "qsmRiepDipendenti" impostando i filtri tipo così:
 
Set db = CurrentDb
Set qfd = db.QueryDefs("qsmRiepDipendentiFiltrata")
qfd.sql = Me!smRiepSoci.Form.RecordSource
 
a questo punto DoCmd.TransferSpreadsheet acExport, , "qsmRiepDipendentiFltrata" .... 
dovrebbe funzionare


Ciao Michele e grazie.
Ho aggiunto la dichiarazione delle due variabili, 
Dim db As Object
Dim qfd As Object
 
ma quando arriva  a 
qfd.SQL = Me!smRiepSoci.Form.RecordSource
esce il messaggio errore di run time 3129: Instruzione SQL non valida  Prevista 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' o 'UPDATE'.
Ho inserito nella finestra immediata 
?Me!smRiepSoci.Form.RecordSource
ed esce qsmRiepSoci e non l'origine dati della query.
 
Giuseppe


quindi invece di form.recordsource dagli una stringa
strSQL =  "SELECT ..." 
qfd.SQL = strSQL 
dove strSQL è uguale a qsmRiepSoci, ma con le condizioni per il filtro in WHERE...


Grazie Michele.
Prima della tua risposta avevo fatto così:
Con la stringa Me!smRiepSoci.Form.Tag copio i filtri impostati nella finestra delle proprietà della subform.
Poi ho modificato il codice come segue e la query qsmRiepSociFiltrata mostra effettivamente i record filtrati come nella sottomaschera.
Ma quando parte la riga 
DoCmd.TransferSpreadsheet acExport, , "qsmRiepSociFiltrata", "C:\Users\" & strUtente & "\Documents\ElencoSoci.xlsx"
mi crea un file excel con tutti i record senza essere filtrati?
Come è possibile se l'oggetto (query) da esportare invece i filtri ce li ha?
Questo il codice attuale:
 
Dim db As Object
Dim qfd As Object
Set db = CurrentDb
    Set qfd = db.QueryDefs("qsmRiepSociFiltrata")
'qfd.SQL = Me!smRiepSoci.Form.RecordSource
 
Dim strFiltro As String
    strFiltro = Me!smRiepSoci.Form.Tag
qfd.SQL = "SELECT DISTINCTROW tblSoci.IdSocio, tblSoci.IdAzienda, tblSoci.IdAnagrafica, DenominazioneCommerciale AS Anagrafica, tblAnagrafiche.IdComuneNascita, tblAnagrafiche.datanascita, DateDiff('yyyy',[DataNascita],Date()) AS Eta, tblSoci.DataInizio, tblSoci.DataFine, tblAnagrafiche.CodiceFiscale, IIf([Sesso]=0,'',IIf([Sesso]=1,'F','M')) AS Sess, tblAnagrafiche.Sesso" & _
          " FROM tblAnagrafiche INNER JOIN tblSoci ON tblAnagrafiche.IdAnagrafica = tblSoci.IdAnagrafica " & _
          " WHERE " & strFiltro & _
          " ORDER BY DenominazioneCommerciale"
    DoCmd.TransferSpreadsheet acExport, , "qsmRiepSociFiltrata", "C:\Users\" & strUtente & "\Documents\ElencoSoci.xlsx"
Grazie.
Giuseppe


prova a inserire prima di TransferSpreadSheet un 
    DB.QueryDefs.Refresh


Michele no non funzionava neanche con il refresh.
Ho risolto così:
Dim strFiltro As String
    strFiltro = Me!smRiepSoci.Form.Tag
        If ControlloQuery("qsmRiepSociFiltrata") Then CurrentDb.QueryDefs.Delete "qsmRiepSociFiltrata"
            CurrentDb.CreateQueryDef "qsmRiepSociFiltrata", "SELECT DISTINCTROW tblSoci.IdSocio, tblSoci.IdAzienda, tblSoci.IdAnagrafica, DenominazioneCommerciale AS Anagrafica, tblAnagrafiche.IdComuneNascita, tblAnagrafiche.datanascita, DateDiff('yyyy',[DataNascita],Date()) AS Eta, tblSoci.DataInizio, tblSoci.DataFine, tblAnagrafiche.CodiceFiscale, IIf([Sesso]=0,'',IIf([Sesso]=1,'F','M')) AS Sess, tblAnagrafiche.Sesso" & _
          " FROM tblAnagrafiche INNER JOIN tblSoci ON tblAnagrafiche.IdAnagrafica = tblSoci.IdAnagrafica " & _
          " WHERE " & strFiltro & _
          " ORDER BY DenominazioneCommerciale"
    DoCmd.TransferSpreadsheet acExport, , "qsmRiepSociFiltrata", "C:\Users\" & strUtente & "\Documents\ElencoSoci.xlsx"
 
Grazie tante.
Giuseppe


quindi il refresh non funziona, ma cancellandola e ricreandola funziona?