Esportare il risultato di una query in un foglio di Excel

Anonimo
2015-01-07T15:45:48+00:00

Buon pomeriggio  a tutti, nello storico delle discussioni di questo forum ho trovato il codice che vi riporto e che mi permette di copiare in un foglio di Excel i dati di una query, fin qui tutto bene tranne il fatto di vedere i dati ( solo quelli formattati come Valuta, Euro e con due cifre decimali) nel foglio di Excel senza la giusta formattazione impostata in tabella di Access.

Mi dareste una mano, per favore ,  a capire come trasferire in Excel, con il codice sottoriportato i dati formattati nella tabella di origine, come valuta,euro e due cifre decimali.

Grazie per il vostro gentile riscontro. 

Private Sub Comando130_Click()

            DoCmd.OutputTo acOutputQuery, _

     "QueryRitenuteMilitariTutti", _

     "Microsoft Excel (*.xlsm)", _

     "C:\XXXX\YYYYY\Desktop\prova.xls", _

True

End Sub

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

4 risposte

Ordina per: Più utili
  1. Anonimo
    2015-01-09T14:44:52+00:00

    Finalmente ci sono riuscito da solo e vi ringrazio lo stesso per tutto l'aiuto che mi avete dato finora, posto il codice che mi ha permesso di ultimare un'altra problematica e che potrebbe essere spunto per altri che come me partono da zero.

    Private Sub Comando130_Click()

    Dim strWhere As String

    Select Case Frame95.Value

         Case OptButton1.OptionValue

         Call exportToExcelLateB

    da questo punto in poi ho creato le condizioni per lanciare varie procedure e funzioni tramite gli OptButton.

          Case OptButton2.OptionValue

          If Me.CboFinanziaria & "" <> "" Then

          DoCmd.OutputTo acOutputQuery, _

         "QuerySoloFinanziaria", _

         "Microsoft Excel (*.xlsm)", _

         "C:\AAAAAAAA\SSSSSSSS\Desktop\prova.xls", _

         True

          Else

          MsgBox "Non hai selezionato il Cognome del Militare." _

          & Chr(13) & "Seleziona il Cognome e Nome del militare" & Chr(13) _

          & "nella relativa Combobox e prosegui.", vbInformation, "PER COGNOME E NOME"

          End If

         Case OptButton3.OptionValue

         Call Azzera_Tutto

         Case OptButton4.OptionValue

          Call Esegui_Copia_dati

         Case OptButton5.OptionValue

       Call Esci_senza_salvare

         Case Else

           MsgBox "Non hai selezionato alcuna opzione !"

         End Select

     End Sub

    P.S se sono riuscito lo devo solo grazie ai vostri insegnamneti.

    Ciao,Nicola.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2015-01-09T13:55:05+00:00

    Buongiorno, sono riuscito ad esportare i dati di una query su un foglio di Excel seguendo varie strade tra cui quella dell'amico Sandro Peruz che saluto con affetto, il problema è che con la query ( che riporto sotto) basata su un valore prelevato da una casella combinata, il trasferimento dei dati non avviene, vengono trasferite solo le colonne interessate ma senza dati.

    L'esecuzione del trasferimento dei dati della query avviene tramite un gruppo di opzioni che spuntati mi lanciano il codice abbinato.

    Questa è la query che ho creato   e che funziona bene se seleziono prima il valore della combobox e poi la lancio da un pulsante di comando

    SELECT TblAnagrafica.Matricola, TblAnagrafica.[Cognome e Nome], TblRitenuteMilitare.Istituto, TblRitenuteMilitare.Tipo

    FROM TblAnagrafica INNER JOIN TblRitenuteMilitare ON TblAnagrafica.Matricola = TblRitenuteMilitare.Matricola

    WHERE (((TblAnagrafica.Matricola)=[Forms]![FrmreportVari]![CboFinanziaria]))

    ORDER BY TblAnagrafica.[Cognome e Nome];, ma se la eseguo in questo modo:

    Private Sub Comando130_Click()

                DoCmd.OutputTo acOutputQuery, _

         "QuerySoloFinanziaria", _

         "Microsoft Excel (*.xlsm)", _

         "C:\XXXX\YYYYY\Desktop\prova.xls", _

    True

    End Sub

     non mi trasferisce i dati in excel poichè non mi permette prima di selezionare il dato nella relativa Combobox, spero di essere stato chiaro e comprensibile.

    Quello che desidererei ottenere è lanciare la query per poi trasferire i dati in excel solo dopo aver selezionato il dato nella Combobox, chiedo l'aiuto di voi esperti, grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-01-08T14:09:12+00:00

    Ciao Sandro, grazie come sempre per il tuo gentile e prezioso riscontro,ho eseguito varie prove e verifico questo:

    1. con questo codice non ho modo di verificare se i dati dei campi che hanno il formato valuta, euro e due cifre decimali sono visualizzati correttamente perchè (non in tabella ma nella query di cui ti richiedevo di basare l'esportazione dei dati in Excel) i campi sono campi calcolati.

    DoCmd.OutputTo acOutputTable, "TblRitenuteMilitare", acFormatXLS, "C:\xxxaaa\NNNNNN\Desktop\prova.xls"

    2 )con il metodo di esportazione di Access, basando l'esportazione in Excel dei dati della maschera sulla quale ci sono gli stessi campi calcolati, il risultato finale è ottimo, cioè si copiano i dati in Excel cosi come sono formattati nei rispettivi campi della maschera ( sto sempre parlando degli stessi campi calcolati e che hanno la formattazione valuta,euro e due cifre decimali).

    Quindi ciò che ti chiedo è questo: non è possibile da codice creare la stessa situazione che si verifica quando, con i mezzi di Access. si esportano i dati da maschera e non da tabella (anche perchè nel mio caso reale i campi calcolati non vengono visualizzati nella tabella bensì nella maschera originata dalla stessa tabella, nella query e nella Report ).

    Inoltre non potrei utilizzare il tuo codice (penso da principiante e poco esperto di VBA, non so se sto dicendo stronz....te) proprio perchè esportando i dati della mia tabella non visualizzerei i dati dei campi calcolati per il motivo che ti ho accennato: (anche perchè nel mio caso reale i campi calcolati non vengono visualizzati nella tabella bensì nella maschera originata dalla stessa tabella, nella query e nella Report ).

    Ciao Sandro attendo tue notizie per poter definire  anche quest'altra problematica.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-01-07T22:38:48+00:00

    ciao Nicola,

    tutto ben?

    ho fatto qualche tentativo ed esportando in questo modo :

    docmd.OutputTo acOutputTable,"prodotti",acformatxls,"C:\pippo.xls"

    la formattazione della valuta viene rispettata...prova  e facci sapere....invece non viene mantenuta se esporto la tabella con gli strumenti messi a disposizione cliccando con il tasto dx sulla tabella e selezionando esporta e completando tutti i passaggi, non so dirti se sia normale...

    Ho steso questa sub per giocare un po' creando un'istanza xls in access....puoi vedere il risultato copiandola nel database di esempio di NorthWind oppure modificandola opportunamente nel tuo DB, ho inserito qualche commento per migliorare la comprensione...

    ti saluto, Sandro

    Sub exportToExcelLateB()

        'imposto gli errori

        On Error GoTo exportationErr

        ' dichiaro le variabili della sub

        Dim newWorkBook As Object, newWorkSheet As Object, newExcelIstance As Object, rRange As Object

        Dim rst As DAO.Recordset

        Dim strSql As String

        Dim i As Integer

        ' gestisco gli errori

        strSql = "SELECT Prodotti.* FROM Prodotti" ' imposto la stringa del recordset

        Set rst = DBEngine(0)(0).OpenRecordset(strSql, dbOpenSnapshot) ' apro il recordset di tipo snapshot non devo modificare solo visualizzare

        ' apro instanza excel ed imposto gli oggetti automazione

        Set newExcelIstance = CreateObject("Excel.application")

        Set newWorkBook = newExcelIstance.Workbooks.Add

        Set newWorkSheet = newWorkBook.Worksheets.Item("Foglio1")

        ' setto il range in cui copiare il recordset in excel da a1 all'ultimo record del recordset

        Set rRange = newWorkSheet.Range(newWorkSheet.cells(3, 1), newWorkSheet.cells(rst.RecordCount + 2, rst.Fields.Count))

        rRange.CopyFromRecordset rst ' copio il recordset in excel

        ' imposto i nomi dei campi del recordset sulla riga 1 del file si excel

        For i = 0 To rst.Fields.Count - 1

                newWorkSheet.cells(1, i + 1) = rst.Fields(i).Name

                newWorkSheet.cells(1, i + 1).Interior.ColorIndex = 8 ' imposto il colore delle instestazioni

                newWorkSheet.cells(1, i + 1).Borders.LineStyle = 1 ' imposto il bordo delle intestazioni

        Next

        newExcelIstance.Visible = True ' rendo excel visibile

        newWorkSheet.Columns("F").NumberFormat = "$ #,##0.00" ' imposto il corretto formato a due decimali per il campo prezzo

        newWorkSheet.Columns("a:j").autofit ' regolo automaticamente la larghezza delle celle, migliorandone la visibilità

        newWorkSheet.cells(rst.RecordCount + 4, 1).Value = "Numero records esportati: " & rst.RecordCount ' scrivo in fondo alla colonna A il numero di records esportati

        ' distruggo tutti gli oggetti e libero la memoria

        Set rst = Nothing

        Set newExcelIstance = Nothing

        Set newWorkBook = Nothing

        Set newWorkSheet = Nothing

        Exit Sub

    exportationErr:

        MsgBox "oh, oh....qualcosa non va... errore numero: " & Err.Number & ", " & Err.Description

        ' distruggo tutti gli oggetti e libero la memoria

        Set rst = Nothing

        Set newExcelIstance = Nothing

        Set newWorkBook = Nothing

        Set newWorkSheet = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento