Newsgroup: it.comp.appl.access
Titolo: Esportare dati in Excel

Salve,
Avendo una tabella contenente dati suddivisi per province ho la necessità, tramite un codice VBA, di esportarli in un file excel raggruppati per regione.
Più precisamente vorrei fare in modo che creando un file denominato ad esempio Regione_Basilicata questa dovrebbe contenere due cartelline una Potenza l'altra Matera con i relativi dati.
Qualche suggeerimento?
Grazie


Hai riassunto parecchie cose in pochissime parole....
Innanzi tutto creati una query e filtra i dati in base alla regione
che ti interessa e poi con il vba che ti posto trametti i dati sul tuo
file di excel:
 
Dim ApplExcel As Excel.Application
Dim IstanzaXls  As Excel.Workbook
Dim FileXls As String
 
FileXls = "tuo file di excel"
 
Set ApplExcel = CreateObject("Excel.Application")
 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tua
query filtrata per regione", FileXls, True
 
    Set IstanzaXls = ApplExcel.Workbooks.Open(FileXls)
            ApplExcel.Visible = True
        IstanzaXls.Save
 
    Set IstanzaXls = Nothing
    Set ApplExcel = Nothing
 
 
Ora dentro il file di excel per separare i dati della regione filtrata
ti consiglio di usare per esempio la formula: DB.CONTA.VALORI (vedi
guida in linea F1)
 
Saluti
M7a1x



Hai riassunto parecchie cose in pochissime parole....
Innanzi tutto creati una query e filtra i dati in base alla regione
che ti interessa e poi con il vba che ti posto trametti i dati sul tuo
file di excel:
 
Dim ApplExcel As Excel.Application
Dim IstanzaXls  As Excel.Workbook
Dim FileXls As String
 
FileXls = "tuo file di excel"
 
Set ApplExcel = CreateObject("Excel.Application")
 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tua
query filtrata per regione", FileXls, True
 
    Set IstanzaXls = ApplExcel.Workbooks.Open(FileXls)
            ApplExcel.Visible = True
        IstanzaXls.Save
 
    Set IstanzaXls = Nothing
    Set ApplExcel = Nothing
 
 
Ora dentro il file di excel per separare i dati della regione filtrata
ti consiglio di usare per esempio la formula: DB.CONTA.VALORI (vedi
guida in linea F1)
 
Saluti
M7a1x
 
Ho utilizzato il tuo codice nel modo seguente:
 
Private Sub Cmd2_Click()
Dim ApplExcel As Excel.Application
Dim IstanzaXls As Excel.Workbook
Dim FileXls As String
Dim Response As String, c As Double, CodX As String, RegX As String, ProX As String
'La quey QAdr raggruppa tutte le regioni e le relative provincie presenti nella tabella AppPartite
' vuota il contenuto della colonna Flgs della tabella AppPartite
    DoCmd.RunSQL "UPDATE AppPartite SET AppPartite.FlgS = Null;"
 
    For c = DCount("*", "QAdr") To 1 Step -1 ' conta le regioni/provincie
    RegX = DFirst("Regi", "QAdr") ' prima regione
    CodX = DFirst("CODC", "QAdr") ' codice provincia
    ProX = DFirst("DAdr", "QAdr") ' nome provincia
    Forms!Mfile!CodX = CodX
 
    FileXls = [Application].[CurrentProject].[Path] & "\" & "Partite_" & RegX & ".xls" ' definisce il percorso ed il nome del file excel
 
    Set ApplExcel = CreateObject("Excel.Application")
 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Qdati", FileXls, True
 
    Set IstanzaXls = ApplExcel.Workbooks.Open(FileXls)
    ApplExcel.Visible = True
    IstanzaXls.Save
 
    Set IstanzaXls = Nothing
    Set ApplExcel = Nothing
 
' inserisce nella colonna Flgs detta tabella il carattere S in modo che la query QAdr, avendo impostato il criterio della colonna FlgS in is null, non estragga più la provincia (CodX) appena elaborata dal ciclo for. 
    DoCmd.RunSQL "UPDATE AppPartite SET AppPartite.FlgS = 'S' WHERE (((AppPartite.CODC)= '" & CodX & "'));"
    Next c
 
End Sub
 
Il risultato è che vengono generati i vari file excel a livello regione ma continuano a contenere un singolo foglio (denominato Qdati e non con il nome della provincia) con i dati dell'ultima provincia collegata alla regione.
 
Immagino di essermi spiegato come un libro stracciato
grazie

On 5 Nov, 09:52, 
mic...@inwind.it
 wrote:

Per l'esportazione in Excel:
 
Function EXP2XLS(SQL    as string, _
                 Optional ByRef NomeFile As String = vbNullString, _
                 Optional OpenDialog As Boolean = False, _
                 Optional CloseExcel As Boolean = True) As Boolean
    On Error GoTo Handle_err
    Dim xlApp   As Object   ' Oggetto EXCEL
    Dim oWkb    As Object   ' Oggetto WORKBOOK
 
    Dim x       As Integer
    Dim rs      As DAO.Recordset
 
    EXP2XLS= False
 
    ' APRE SE ESISTE GIA' UN'OGGETTO EXCEL
    Set xlApp = CreateObject("Excel.Application")
 
    Set oWkb = xlApp.Workbooks.Add()
 
    If OpenDialog = True Then
 
        Do Until NomeFile <> ""
            NomeFile = xlApp.GetSaveAsFilename(InitialFilename:="C:
\TestExport.xls", _
                                               fileFilter:="Excel
Files (*.xls), *.xls", _
                                               Title:="SELEZIONA NOME
FILE")
 
            DoEvents
        Loop
 
    End If
 
    If Len(NomeFile) = 0 Then NomeFile = "C:\TestExport.xls"
 
    If EsisteFile(NomeFile) Then Kill NomeFile
 
    '--------------------------------------------------------------
    ' Per O2003 usare il valore 43  (VERSION 11.0)
    ' Per O2007 usare il valore 50  (VERSION 12.0)
    ' Per O2010 usare il valore 50  (VERSION 14.0)
    '--------------------------------------------------------------
    If Val(xlApp.Version) > 11 Then
        oWkb.SaveAs NomeFile, 50
    Else
        oWkb.SaveAs NomeFile, 43
    End If
 
    ' Elimino i Fogli che Excel crea di DEFAULT
    For x = oWkb.Sheets.Count To 2 Step -1
        oWkb.Sheets(x).Delete
    Next
 
    ' Assegno un nome al Foglio(Sheet) rimasto.
    oWkb.Sheets(1).Name = "MANUTENZIONI"
 
    Set rs = CurrentDb.OpenRecordset(SQL,dbOpenDynaset,dbReadOnly)
 
    ' Scrivo nella Cella A1
    oWkb.Sheets(1).Range("A1").CopyFromRecordset rs
 
    rs.Close
    Set rs = Nothing
 
    EXP2XLS= True
 
Exit_Here:
    oWkb.Save
    If CloseExcel Then
        oWkb.Close True
        xlApp.Quit
    Else
        xlApp.Visible = True
    End If
    Set oWkb = Nothing
    Set xlApp = Nothing
    Exit Function
 
Handle_err:
    MsgBox Err.Number & " " & Err.Description
    Resume Exit_Here
End Function
 
Public Function EsisteFile(ByVal str As String) As Boolean
    On Error Resume Next
    EsisteFile = (GetAttr(str) And vbDirectory) = 0
End Function
 
Se vuoi anche definire i Campi in modo più Visuale, vedi questo
esempio:
http://www.accessgroup.it/forms/definire-i-campi-da-esportare-in-excel-e-sequenza-di-esportazione.html
 
 
Saluti
@Alex

mic...@inwind.it
 laid this down on his screen :

Il suggerimento sarebbe quello di spiegarsi meglio con un esempio.
 
Ci provo io.
 
1 - Hai una tabella Access con record composti dai campi Provincia,
    Regione e quali (o quanti) altri?
2 - Vuoi creare tanti file Excel quante sone le regioni indicate
    nella tabella di cui sopra, denominati Regione_Lombardia,
    Regione_Emilia-Romagna, etc.
3 - Il file Excel Regione_Emilia-Romagna conterrà i fogli
    denominati Ravenna (RA), Rimini (RN), Forlì-Cesena (FC)
    essendo queste le province indicate nella tabella di Access
    per la regione Emilia-Romagna.
4 - Ognuno dei tre fogli esemplificati al punto 3 conterrà
    una sola riga di dati.
5 - I punti 3 e 4 a valere per ogni Regione|Provincia indicate
    nella tabella Access.
 
È questo che vuoi?
 
Bruno
 
 

@Alex was thinking very hard :

Il problema è sempre quello di chiudere il processo
EXCEL.EXE che bene spesso e volentieri non sparisce
dal Task Manager nemmeno dopo il Set... = Nothing.
 
Non ho provato il tuo codice... dimmelo tu se scompare
dal Task Manager.
Io le ho provate tutte ma non ci riesco.
Di solito non è importante, salvo si debba ripetere il codice
in successione.
 
Bruno
 
 

 Bruno
 
confermo : 
portatile con WIN XP e OFFICE2007, Excel non si chiude ( a meno di non uscire da Access e attendere 'qualche' minuto), il processo resta in Task Manager.
 
desktop con WIN 7  e OFFICE 2007 , Excel si chiude immediatamente dopo un DoEvents .... 
 
La cosa è spiazzante, mah !
 
Ivan