Esportare in Excel da msachera

di il
16 risposte

Esportare in Excel da msachera

Ciaooo a tutti,

sto cercando di esportare in excel i dati da una maschera filtrata, usando questo codicino:

Private Sub cmdEsporta_Click()
DoCmd.TransferSpreadsheet acExport, , Me.RecordSource, "c:\prova.xlsx"
End Sub

Esiste un modo da non inserire il percorso nel codice e far scegliere ogniqualvolta come succede usando la macro ?

Grazie!!!

16 Risposte

  • Re: Esportare in Excel da msachera

    Prova a lasciare vuoto l'argomento del percorso

    Private Sub cmdEsporta_Click()
    DoCmd.TransferSpreadsheet acExport, , Me.RecordSource
    End Sub
  • Re: Esportare in Excel da msachera

    Ho provato solo con il nome di un eventuale file ma da errore e anche senza il nome come mi aveva suggerito Osvaldo, ma da errore comunque

    Private Sub Esporta_Click()
    DoCmd.TransferSpreadsheet acExport, , Me.RecordSource, "prova.xlsx"
    End Sub

    errore runtime 7871 “il nome della tabella emesso non rispetta le regole per la denominazione degli oggetti in access”

  • Re: Esportare in Excel da msachera

    11/08/2023 - OsvaldoLaviosa ha scritto:


    Prova a lasciare vuoto l'argomento del percorso

    Private Sub cmdEsporta_Click()
    DoCmd.TransferSpreadsheet acExport, , Me.RecordSource
    End Sub

    Ho provato anche cosi… ma non funziona…

  • Re: Esportare in Excel da msachera

    Che vuol dire non funziona? Il 4° argomento è opzionale
    DoCmd.TransferSpreadsheet method (Access) | Microsoft Learn

    …mi aspetto che se è vuoto, Access ti chieda dove esportarlo.

  • Re: Esportare in Excel da msachera

    11/08/2023 - OsvaldoLaviosa ha scritto:


    Che vuol dire non funziona? Il 4° argomento è opzionale
    DoCmd.TransferSpreadsheet method (Access) | Microsoft Learn

    …mi aspetto che se è vuoto, Access ti chieda dove esportarlo.

    Infatti avevo pescato questo commando dalla linee guida. Io normalmente uso le macro e avevo provato come da istruzioni. 

    Però adesso vedendo codice errore, non è tanto per il percorso come per i “me.recordsource” l'errore 

  • Re: Esportare in Excel da msachera

    TableNameOptionalVariantA string expression that is the name of the Office Access table that you want to import spreadsheet data into, export spreadsheet data from, or link spreadsheet data to, or the Access select query whose results you want to export to a spreadsheet.

    Credo che devi creare una query (forse parametrica) che ricostruisce il tuo risultato Recordset della tua maschera. Quindi esporta il nome proprio della query.

  • Re: Esportare in Excel da msachera

    Premessina: l'esportazione di RecordSource estrae tutti i record dell'origine dati, non solo quelli filtrati. Dovresti quindi creare una query anche temporanea in cui la clausola WHERE corrisponde alla proprietà Filter della maschera.

    Qui trovi il codice da adattare: https://stackoverflow.com/questions/61368321/ms-access-vba-to-export-a-filtered-form-to-excel

    Alla domanda: “Esiste un modo da non inserire il percorso nel codice e far scegliere ogniqualvolta come succede usando la macro ?” la risposta secca è no: il nome del file in barba a quanto sembra dalla guida 

    11/08/2023 - OsvaldoLaviosa ha scritto:


    Che vuol dire non funziona? Il 4° argomento è opzionale
    DoCmd.TransferSpreadsheet method (Access) | Microsoft Learn

    …mi aspetto che se è vuoto, Access ti chieda dove esportarlo.

    è un elemento obbligatorio e deve essere definito prima di lanciare il comando. Se manca si ottiene l'errore 2522: per l'azione o il metodo è necessario l'argomento Nome file.

    Puoi scriverlo in una textbox e prendere il valore da lì, includendo o meno il percorso. Se non includi il percorso lo puoi definire staticamente tipo

    DoCmd.TransferSpreadsheet acExport, , Me.RecordSource, "C:\TestFolder\" & Me.txtNomeFile.Value & ".xlsx"

    dove txtNomeFile è la casella di testo dove hai inserito il nome del file (che fantasia, eh? )

    Visto che esporti in xlsx specifica anche il secondo argomento, acSpreadsheetTypeExcel12Xml.

    Anche il percorso/directory di destinazione può essere in una textbox, di “libera” compilazione oppure di compilazione obbligata attraverso FileDialog. Con quest'ultima è impossibile sbagliare perché si è obbligati a selezionare un percorso esistente e corretto.

    Con l'uso invece di una textbox a compilazione libera è meglio sottoporre quel valore alla funzione Dir, per verificarne l'esistenza

    If (GetAttr(Me.txtDirectory.Value) And vbDirectory) <> vbDirectory Then
        'la directory non è valida
        'svuotamento della textbox che ha un valore non valido
        Me.txtDirectory.Value = vbnullstring
        'Focus sulla textbox per inserire un nuovo valore
        Me.txtDirectory.SetFocus
        'Messaggio di spiegazione
        MsgBox "Percorso non valido"
    End If

    Attenzione all'uso della barra alla fine del percorso, perché 

    GetAttr(Me.txtDirectory.Value) And vbDirectory

    restituisce vbDirectory sia se alla fine di txtDirectory c'è “\” o no. 

    Ipotizzando quindi di costruire il percorso in questo modo

    strPath & "\" & Me.txtNomeFile.Value & ".xlsx"

    devi prima assicurarti che non ci sia già alla fine della textbox non ci sia già “\”

    Dim strPath as String
    
    If Right$(Me.txtDirectory.Value, 1) = "\" Then
        strPath = Left$(Me.txtDirectory.Value, Len(Me.txtDirectory.Value) - 1)
    Else
        strPath = Me.txtDirectory.Value

    Ecco perché l'uso di FileDialog mette al riparo da ogni ulteriore verifica perché la scelta è forzata attraverso la “finestrella” di navigazione nel filesystem.

    Sarebbe opportuno verificare anche la correttezza formale del nome del file, affinché non contega uno o più caratteri vietati: 

    \ / ; * ? " < > |

    altrimenti va in errore il DoCmd.TransferSpreadSheet.

    Lo so, sono tante verifiche per una operazione sola, quella di esportazione di un file, ma devono essere considerate tutte.

  • Re: Esportare in Excel da msachera

    Grazie a tutti!!! Riprovo con i Vs suggerimenti 

  • Re: Esportare in Excel da msachera

    11/08/2023 - Pattygirl ha scritto:


    Grazie a tutti!!! Riprovo con i Vs suggerimenti 

    Scusa Pattygirl ma ho modificato almeno 5 volte il mio post. Verifica di aver letto l'ultima versione prima di lanciarti in prove.

  • Re: Esportare in Excel da msachera

    11/08/2023 - Philcattivocarattere ha scritto:


    11/08/2023 - Pattygirl ha scritto:


    Grazie a tutti!!! Riprovo con i Vs suggerimenti 

    Scusa Pattygirl ma ho modificato almeno 5 volte il mio post. Verifica di aver letto l'ultima versione prima di lanciarti in prove.

    Si si, devo cmq andare per step by step. Adesso sto studiando il codice esempio da adattare :)

    Sarei andanda cmq a ripescare il post !

    Ti ringrazio!

  • Re: Esportare in Excel da msachera

    Il metodo migliore per esportare l'origine della maschera includendo eventuali Fultri è usare il metodo CopyFromRecordset aprendo direttamente un file excel via automazione… questo metodo è molto potente e comodo, meno intuitivo da usare, ma presa la mano decisamente preferibile.

    https://www.devhut.net/ms-access-vba-export-recordset-to-excel/

  • Re: Esportare in Excel da msachera

    11/08/2023 - @Alex ha scritto:


    usare il metodo CopyFromRecordset aprendo direttamente un file excel via automazione

    Ecco come si chiamava quella cosa lì! Par fortuna che te ghe sì tì.

  • Re: Esportare in Excel da msachera

    11/08/2023 - @Alex ha scritto:


    Il metodo migliore per esportare l'origine della maschera includendo eventuali Fultri è usare il metodo CopyFromRecordset aprendo direttamente un file excel via automazione… questo metodo è molto potente e comodo, meno intuitivo da usare, ma presa la mano decisamente preferibile.

    https://www.devhut.net/ms-access-vba-export-recordset-to-excel/

    Grazie mille!  Leggo l'articolo 

    ;) 

  • Re: Esportare in Excel da msachera

    Ciao, come va ? come procede ?

    ti lascio due righe di codice che puoi utilizzare per aprire la finestra di dialogo e salvare il file 

    Controlla ed esegui i test dovuti, inserisci eventuali personalizzazioni nelle proprietà dell'oggetto file dialog e tuoi controlli personali. per garantire un corretto flusso dell'inforazioni.

    In breve :

    • si definisce un oggetto di tipo fileDialog
    • si imposta e si assegna all'oggeto l'Application.fileDialog con l'opzione msoFileDialogSaveAs 
    • msoFileDialogSaveAs ha delle limitazione come per esempio l'impostazione deli filtri per i tipi di estensioni che si possono gestire
      • puoi risolvere questo inghippo utilizzando l'impostazione su InitialFileName dove per esempio con *.xlsx ottieni in automatico l'estensione da assumere 
        • tieni in considerazione che  :
          • se in SaveAs digiti solo il nome del file, ti ritorna il file con l'estensione impostata in initialFileName (in questo caso ti imposterà .xlsx)
          • se in SaveAs digiti il nome del file completo di estensione e per esempio una estensione .Txt , allora verrà assunta tale estensione.
    • tralascio le altre opzioni che sono abbastanza intuitive e per le quali ti lascio un paio di link per approfondire.
    • alla fine con il .Show si apre la dialog box 
      • se annulli il SaveAs non verrà salvato nessun file
      • se digitato il nome del file e fai click su Save, in questo caso verrà eseguita la If e qui dentro puoi impostare il tipo di export da realizzare e da salvare
      • un messaggio di completamento ti indica che l'operazione è completata
    • alla fine della routine si libera dalla memoria l'oggetto utilizzato per la dialog box … questo se deve fa ;))   …sempre per tutti gli oggeti che si usano in Vba.

    vedere : 
    Proprietà FileDialog - Supporto tecnico Microsoft
    Risultati di ricerca per 'file dialog save as filters' - Supporto tecnico Microsoft


    ' set obj file dialog
    Dim fdSaveAs As fileDialog
    Set fdSaveAs = Application.fileDialog(msoFileDialogSaveAs)
    ' set properties
    With fdSaveAs
       .Title = "SaveAs"
       .InitialView = msoFileDialogViewDetails
       .InitialFileName = Environ("USERPROFILE") & "\Documents\*.xlsx"
       .ButtonName = "Save"
       ' dialogbox open
       If .Show = True Then
           ' save file
           DoCmd.TransferSpreadsheet acExport, , Me.RecordSource, .SelectedItems(1)
           MsgBox "SaveAS Completed : " & .SelectedItems(1), vbInformation, "Info"
       End If
    End With
    ' clrear filedialog obj
    Set fdSaveAs = Nothing

    Per l'estrazione dei dati da exportare in excel hai già delle ottime indicazioni da seguire, per esempio quella dell'ottimo @Alex che saluto

    Posso solo aggiungerti che con un pò di organizzazione potresti costruirti dei modelli da sfruttare per avere il nuovo file excel che crei, già formattato in tutte le sue parti, dalla larghezza delle colonne, font, colori, formattazione specifica per talune colonne, etc etc etc… 

    ;)

Devi accedere o registrarti per scrivere nel forum
16 risposte