Esportare una Query di Access in Excel.

Anonimo
2018-01-04T20:07:07+00:00

Buonasera a tutti.

Ho creato il codice sottostante per esportare una Query di Acces in Excel e sembra funzionare bene solo alla prima esecuzione, poichè lanciata una seconda volta mi da gli errori come da immagini allegate.

Ho notato che il file di Excel aperto la prima volta non si chiude e sono costretto a chiuderlo con Ctrl+Alt+Canc - Termina Operazione.

Mi aiutate a capire per favore  come posso risolvere il problema?

Queste schermate di errore le ottengo quando lancio la 2^ volta la funzione e poi chiudo il file di Excel ancora aperto nel modo sottoriportato.

Questa è la funzione che uso:

Option Compare Database

Option Explicit

Const fPath = "C:\prova"

Const fname = "Dati  Esportati.xls"

Const fName2 = "Accessi Esportati.xls"

Function OpenExcel()

On Error GoTo ErrorHandler

   Dim appExcel As Excel.Application

   Dim bks As Excel.Workbooks

   Dim sht As Excel.worksheet

   Dim strSheet As String

   Dim MyFile As String

   MyFile = fPath & fName2 'Point to the Data file

   DoCmd.OutputTo acQuery, "QueryTuttiAccessi", "MicrosoftExcel(*.xls)", _

MyFile, True, ""

   'Open the Code file and run the processing macro

   MyFile = fPath & fname ' point to the Code file

   Set appExcel = GetObject(, "Excel.Application")

   appExcel.Workbooks.Open (MyFile)

   Set sht = appExcel.ActiveWorkbook.Sheets(1)

   sht.Activate

   'appExcel.Application.Visible = True

   With appExcel

    .Run "OpenAndProcess" 'Change to suit name of Excel routine

   End With

ErrorHandlerExit:

   Exit Function

ErrorHandler:

   If Err = 429 Then

'Excel is not running; open Excel with CreateObject

      Set appExcel = CreateObject("Excel.Application")

      Resume Next

   Else

      MsgBox "Error No: " & Err.Number & "; Description: " & Err.Description

      Resume ErrorHandlerExit

   End If

End Function

Spero di essere stato chiaro.

Ringrazio anticipatamente chi mi aiuta in questo.

Ciao Nicola.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2018-01-06T18:25:29+00:00

ciao Nicola,

sottolineo ancora che tutto quel codice non serve per esportare e sovrascrivere lo stesso file basta il metodo outputto.

Comunque, se vuoi utilizzare una specifica, seleziona la query, tasto dx del mouse e seleziona esporta in Excel :

poi flagga :

esporta con formattazione e apri il file, ovviamente impostando path e nome file e salvi l'esportazione con nome :

questo solo la prima volta.

Le volte successive protrai eseguire il tutto semplicemente invocando  da VBA:

docmd.RunSavedImportExport "esportaprocessi"

HTH.

Ciao, Sandro.

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-01-05T09:52:56+00:00

    Ciao Sandro, innanzitutto grazie come sempre per le tue spiegazioni e per il tuo cortese intervento.

    Allora, io vorrei ottenere l'esportazione in Excel dei dati di una Query ( al riguardo ho pure riguardato un tuo intervento precedente su un post di qualche giorno fa che come titolo aveva: esportazione query access in un file txt, e che avrei potuto adattare al mio scenario, ma poiché avevo già inserito questa funzione ho ritenuto opportuno risolvere questo inconveniente).

    Ho provato pure con il metodo DoCmd.TransferSpreadsheet ma ho notato che la visualizzazione die dati esportati cambia vedi immagini dei due file creati con i due metodi postati (il mio e quello con DoCmd.TransferSpreadsheet ).

    questa è l'esportazione con il seguente codice:

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "QueryTuttiAccessi", "C:\prova\prova.xls", True

    Nelle colonne B e H vorrei che  visualizzare i dati del 1° foglio e non le cifre e poi che Excel non rimanesse aperta quando lancio nuovamente la routine.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-01-05T07:58:59+00:00

    ciao Nicola,

    la routine che mostri prevede l'esportazione della query QueryTuttiAccessi in un file di Excel chiamato Accessi Esportati.xls e la successiva apertura ed esecuzione di un file di Excel chiamato Dati  Esportati.xls contenente una macro, e che quindi dovrebbe essere nominato come tale ( estensione xlsm), ed eseguire una routine vba chiamata OpenAndProcess invocata dal metodo run membro di application.

    il primo errore che mostri è proprio dovuto alla mancanza della macro OpenAndProcess nel file Dati  Esportati.xls con la conseguente esecuzione della gestione errori che non prevede la distruzione dell'istanza di Excel che ti resta "appesa".

    Diciamo che oltre a questo la routine andrebbe comunque rivista chiudendo i files di Excel una volta terminata l'elaborazione, la distruzione oltre che dell'istanza anche degli altri oggetti che utilizzi, ( vedi sht) e fare un po' di pulizia circa le variabili dichiarate e non utilizzate.

    Infine, prevedere la gestione in lateBinding per non essere vincolati da riferimenti specifici, l'esecuzione diventa un po' più lenta ma ne trai vantaggio....od in alternativa prevedere la doppia gestione con compilazione condizionale....

    La prima parte del mio post di spiega l'errore, ora dicci bene cosa vuoi ottenere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-01-05T07:36:14+00:00

    Ciao Mimmo, buongiorno e grazie per il tuo cortese intervento.

    Ho apportato la tua modifica e il problema si presenta lo stesso, ho i seguenti messaggi di errore:

    Attendiamo l'intervento di amici eseperti di Excel e Acces al riguardo.

    Buona giornata a tutti.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-01-04T21:39:06+00:00

    Ciao,

    ricordo poco dell'automazione di Excel ...

    prova ad impostare 

    Set appExcel = Nothing

    prima di

    ErrorHandlerExit:

       Exit Function

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento