Questo codice consente di esportare in EXCEL, eventualmente anche in
un XLT(Template) definendo la cella origine dell'INCOLLA...!
Dim xlApp As Object ' Oggetto EXCEL
Dim oWkb As Object ' Oggetto WORKBOOK
Set xlApp = CreateObject("Excel.Application")
Set oWkb = xlApp.Workbooks.Add()
oWkb.SaveAs "C:\TestExport.xls", 43
' Scrivo nella Cella A1 il Recordset proveniente dalla Query
parametrica...
oWkb.Sheets(1).Range("A1").CopyFromRecordset GetRS(IdCliente)
Questa è una Funzione che restituisce un RS da una Query Parametrica
come la intendi tu... ovviamente modificala con i Parametri che ti
servono...!
Function GetRS(IdCodiceCliente As Long)
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Set qdf = CurrentDb.QueryDefs("QryMovimenti")
qdf.Parameters![CodiceCliente:] = IdCodiceCliente
Set rs = qdf.OpenRecordset
If rs.EOF And rs.BOF Then
Msgbox "Nessun Movimento per questo Cliente"
Exit Function
End IF
' In RS ho tutti i dati
End Function
Ciao
@Alex
> Function GetRS(IdCodiceCliente As Long)
> Dim qdf As DAO.QueryDef
> Dim rs As DAO.Recordset
> Set qdf = CurrentDb.QueryDefs("QryMovimenti")
> qdf.Parameters![CodiceCliente:] = IdCodiceCliente
> Set rs = qdf.OpenRecordset
> If rs.EOF And rs.BOF Then
> Msgbox "Nessun Movimento per questo Cliente"
> Exit Function
> End IF
> ' In RS ho tutti i dati
> End Function
Una volta sistemato questo particolare, il codice viene eseguito senza
errori. Perň mi ritrovo con un foglio di Excel vuoto.
Al momento ho risolto trasformando la query di selezione in una query di
creazione, e quindi andando a scrivere in Excel il recordset della
tabella fisica e non della query, anche se mi piacerebbe capire il
mtovio di questo problema. Grazie.
Il che, me ne accorgo ora, rende inutile il codice vba alternativo al
comando docmd.transferspreadsheet...
No la funzione restituisce già un'oggetto Recordset... quindi non
serve.
Oltretutto l'assegnazione di Oggetti si fa, eventualmente serva, con
il SET:
Set Oggetto=AltroOggetto
Ma nel tuo caso non serve.... ovvio che il codice che ti ho postato
andava sistemato essendo uno stralcio di una mia routine.
> > Function GetRS(IdCodiceCliente As Long)
> > Dim qdf As DAO.QueryDef
> > Dim rs As DAO.Recordset
> > Set qdf = CurrentDb.QueryDefs("QryMovimenti")
> > qdf.Parameters![CodiceCliente:] = IdCodiceCliente
> > Set rs = qdf.OpenRecordset
> > If rs.EOF And rs.BOF Then
> > Msgbox "Nessun Movimento per questo Cliente"
> > Exit Function
> > End IF
> > ' In RS ho tutti i dati
> > End Function
>
> Una volta sistemato questo particolare, il codice viene eseguito senza
> errori. Però mi ritrovo con un foglio di Excel vuoto.
> Al momento ho risolto trasformando la query di selezione in una query di
> creazione, e quindi andando a scrivere in Excel il recordset della
> tabella fisica e non della query, anche se mi piacerebbe capire il
> mtovio di questo problema. Grazie.
Secondo me non hai capito bene cosa fa quello che ti ho postato.
@Alex
Dove? Io non vedo l'assegnazione...
> Oltretutto l'assegnazione di Oggetti si fa, eventualmente serva, con
> il SET:
>
> Set Oggetto=AltroOggetto
Sì, hai ragione.
> Ma nel tuo caso non serve.... ovvio che il codice che ti ho postato
> andava sistemato essendo uno stralcio di una mia routine.
D'accordo, andava sistemato. Ma perché non serve restituire l'oggetto
rs? A me pare una cosa obbbligatoria...
>>> Function GetRS(IdCodiceCliente As Long)
>>> Dim qdf As DAO.QueryDef
>>> Dim rs As DAO.Recordset
>>> Set qdf = CurrentDb.QueryDefs("QryMovimenti")
>>> qdf.Parameters![CodiceCliente:] = IdCodiceCliente
>>> Set rs = qdf.OpenRecordset
>>> If rs.EOF And rs.BOF Then
>>> Msgbox "Nessun Movimento per questo Cliente"
>>> Exit Function
>>> End IF
>>> ' In RS ho tutti i dati
>>> End Function
> Secondo me non hai capito bene cosa fa quello che ti ho postato.
Evidentemente è come dici tu, ma ancora non capisco. Se copio alla
lettera quanto mi hai suggerito, la riga
oWkb.Sheets(1).Range("A1").CopyFromRecordset GetRS(IdCliente)
mi restituisce Errore di run-time 13 - Tipo non corrispondente.