|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
[Access 2007]
ho necessità di creare una query che mi esporta dei record da una tabella ad un foglio di excel, con mio rammarico ho visto che la query di esportazione in excel non viene più implementata in access 2007,
![]() vorrei inserire un bottone nella mia maschera che mi esegue tale esportazione, qualcuno sa come posso fare? grazie. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Puoi farcela sempre con VBA, creando un semplice RecordSet sulla Tabella, ciclandolo, e copiando record per record su Excel.
In particolare, da Access puoi creare la connessione semplicemente in questo modo : Codice:
Dim CN As ADODB.Connection Set CN = CurrentProject.Connection |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Aspetta non ho capito questo codice dove lo inserisco? nel private sub del bottone che ho creato?
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Ma per ADODB assicurati di avere i riferimenti di progetto adeguati : Microsoft ActiveX Data Objects Library 2.x ( nel tuo caso dovrebbero essere i 2.8 ). I Rif li trovi nell'editor VBA / menu Strumenti / Riferimenti... ![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
ho capito, ho poca dimestichezza però con programmazzione windows, quindi non saprei il codice VB da inserire, come faccio a richiamare i record della tabella?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Ad esempio in questo modo :
Codice:
Dim CN As ADODB.Connection Set CN = CurrentProject.Connection Dim RS As ADODB.Recordset Set RS = New ADODB.Recordset Dim strSqlSelect As String strSqlSelect = "SELECT * FROM " & nomeTabella RS.Open strSqlSelect, CN, adOpenKeyset, adLockOptimistic ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
mmm... mi da errore di run-time a questa riga però:
Set CN = CurrentProject.Connenction Ho inserito un bottone nella maschera e inserito il codice in routine evento, mettendo il nome della mia tabella, il comando strSqlSelect mi esporta quindi tutti i campi del record corrente? |
![]() |
![]() |
![]() |
#8 | ||
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Quote:
Il comando che "fa il lavoro" è il metodo RS.Open(). |
||
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Alla fine ho risolto con il comando:
DoCmd.TransferSpreadsheet, che mi estrae tutti i record del database in un fglio di excel. Ti riporto tutto il codice: Private Sub Comando172_Click() stDocName = "tb_Dati_analisi" nameFile = "Db_export_Commesse_progetto" DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, stDocName, nameFile, export_Commesse_progetto, Current MsgBox "Esportazione record riuscita in Documenti", vbInformation, "Esportazione:" End Sub forse puoi darmi una mano per fare in modo di selezionare solo il record corrente e non tutti record della tabella, e mi piacerebbe anche decidere dove salvare il file, non i Documenti come è impostato di default. Grazie mille. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Bah, non so. Io rimango della mia idea, anche perchè spesso i metodi semplificati difettano proprio in fase di successive modifiche. Con poche righe di codice in più hai un RecordSet popolato con cui fai quello che vuoi, in più hai la possibilità di salvare il file Xls dove ti pare :
Codice:
Dim CN As ADODB.Connection Set CN = CurrentProject.Connection Dim RS As ADODB.Recordset Set RS = New ADODB.Recordset Dim strSqlSelect As String strSqlSelect = "SELECT * FROM " & nomeTabella RS.Open strSqlSelect, CN, adOpenKeyset, adLockOptimistic 'Applicazione Excel Dim E As Excel.Application Set E = New Excel.Application E.Visible = True Dim WBK As Excel.Workbook Set WBK = E.Workbooks.Add() Dim cnt As Long cnt = 1 While RS.EOF = False WBK.Sheets("Foglio1").Range("A" & cnt).FormulaR1C1 = RS.Fields("id").Value WBK.Sheets("Foglio1").Range("B" & cnt).FormulaR1C1 = RS.Fields("nome").Value WBK.Sheets("Foglio1").Range("C" & cnt).FormulaR1C1 = RS.Fields("cognome").Value '... '... '... cnt = cnt + 1 RS.MoveNext Wend ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:22.