Sviluppare funzionalita su Microsoft Office con VBA Access export report su Excel-2

Login Registrati
Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
  • Autore
    Articoli
  • #53677 Score: 0 | Risposta

    roberto21
    Partecipante
      4 pts

      Magari potevo continuare sul thread precedente, ma per evitare confusione, ne apro un altro, visto che l'oggetto è diverso.

      Ho un report, basato su una query, che elenca dei nominativi in base ad un certo criterio; non è importante, il report funziona bene. Notare che le intestazioni delle colonne nel report sono un po' diverse da quelle della tabella origine per motivi di spazio. Questo è uno snapshot del report

      Ora vorrei esportare il report su excel e pdf. L'export su pdf funziona perfettamente, e conserva le intestazioni del report. Questo è il codice

      Private Sub Command27_Click()
      Dim path As String, NomeFile As String, filename As String
      
      On Error GoTo Command27_Click_Err
      
          path = CurrentProject.path
          NomeFile = "Report " & Format(Date, "dd-mm-yy") & ".pdf"
        
          ' if file exists, delete it
          filename = path & "\" & NomeFile
          If Len(Dir$(filename)) > 0 Then Kill filename
        
          DoCmd.OutputTo acOutputReport, "Elenco Soci", acFormatPDF, _
              filename
        
      
      Command27_Click_Exit:
        Exit Sub
      
      Command27_Click_Err:
        MsgBox Error$
        Resume Command27_Click_Exit
      
      End Sub
      

      Usando lo stesso codice col " DoCmd.OutputTo acOutputReport" e "acFormatXslx" per l'export su excel, il file di uscita, come potete vedere, presenta vari problemi ed è inutilizzabile:


      -la prima colonna è finita in fondo
      -due campi del record header (anno, 2026, e conteggio, 100) sono finiti in A1 e B1, quasi intestazione colonne
      -le intestazioni colonne del report sono ignorate, compaiono le intestazioni della tabella
      -aggiunte le intestazioni column1, column2 etc.
      -ovviamente, tutte le mie formattazioni successive vanno a pallino
      Come dicevo, ho risolto parzialmente il problema usando il codice seguente con "transferSpreadsheet", che peraltro continua ad usare le intestazioni della tabella; ciò magari è ovvio, visto che l'export fa riferimento diretto alla query. Comunque l'output è corretto e posso applicare le mie formattazioni.

      Private Sub Command32_Click()
          Dim path As String, NomeFile As String, filename As String
          Dim XLapp As Object, wkbk As Workbook, wks As Worksheet
          
          
          path = CurrentProject.path
      
          NomeFile = "Report " & Format(Date, "dd-mm-yy") & ".xlsx"
          
          
          ' if file exists, delete it
          filename = path & "\" & NomeFile
          If Len(Dir$(filename)) > 0 Then Kill filename
         
      '
       '  DoCmd.OutputTo acOutputReport, "Elenco Soci", acFormatXLSX, _
       '       filename
         
          DoCmd.TransferSpreadsheet _
               acExport, _
               acSpreadsheetTypeExcel12Xml, _
               "QryReportSoci", _
               filename, True
               
      '     Adjust columns and format as table fot easier reading
           Set XLapp = CreateObject("Excel.Application")
      
          ' With xlApp
              Workbooks.Open (path & "\" & NomeFile)
              Set wkbk = Workbooks(NomeFile)
             '  .Visible = True
         '  End With
      
           Set wks = wkbk.Worksheets(1)
      
           With wks
              .Columns("A:L").AutoFit
      
              ActiveSheet.ListObjects.Add(xlSrcRange, _
                  Range("A1").CurrentRegion, XlListObjectHasHeaders:=xlYes, _
                  TableStyleName:="TableStyleMedium7").Name = "ElencoSoci"
      
      
           End With
      
           wkbk.Save
           wkbk.Close
      
           Set wks = Nothing
           Set wkbk = Nothing
         '  Set xlApp = Nothing
      
           DoCmd.Close acQuery, "QryReportSoci", acSaveNo
               
      End Sub

      Quindi la domanda è: perchè non funziona il "DoCmd.OutputTo acOutputReport" con excel?

      E' possibile avere le intestazioni colonne del report in excel?

      tanto per capire meglio, visto che un rimedio parziale comunque c'è...

      #53680 Score: 0 | Risposta

      alexps81
      Moderatore
        55 pts

        Ciao, ricordando il fatto che non sono molto ferrato su Access, ma in ufficio ho un database molto strutturato e quindi, seppur minima, di esperienza un po' ne ho...posso dirti che quando esporti in PDF, Access mantiene fedelmente il layout che visualizzi. Diverso è per l'esportazione in file di tipo XLSX in quanto Excel riceve dati grezzi.

        Anche io come te ho lo stesso identico problema e per risolverlo, dopo estratti i dati, apro in modo silente il file appena creato e lo modifico andando a eliminare, spostare e rinominare ciò interessa...un po' come già fai tu.

        Le intestazioni che vedi: "Nome"; "Numero tessera"; "Tessera Elettronica n"; "Indirizzo"; ecc.. dovrebbero essere i nomi che tu hai attribuito ai vari oggetti "textbox" (nome elemento) che ricevono i dati e non ciò che è scritto nelle label sopra di esse. 

        Il loro ordine di comparsa dovrebbe dipendere o dall'ordine in cui sono stati creati nel Report oppure dalla query stessa da cui dipendono.

        Siccome ad un certo punto apri il file appena estratto per applicare l'AutoFit alle colonne e alla creazione di una ListObject, ti conviene andare ad eseguire prima le modifiche sulle etichette e lo spostamento di colonne, nonché la cancellazione di righe superflue...ma credo che questo tu già lo sappia.

        Inoltre ti consiglio di verificare la presenza di istanze Excel in corso, anziché aprirne una nuova in modo brutale.

        Dovresti sfruttare qualcosa del genere:

        Dim xlApp As Object
        
        On Error Resume Next
        Set xlApp = GetObject(, "Excel.Application")
        If xlApp Is Nothing Then
            Set xlApp = CreateObject("Excel.Application")
        End If
        On Error GoTo 0
        
        xlApp.Visible = True
        #53695 Score: 0 | Risposta

        roberto21
        Partecipante
          4 pts

          Grazie per l'interesse. Rincuora molto di queati tempi la volontà di collaborare a distanza.

          Come ho scritto, ho rinumciato ad usare l'output di docmd.outputTo perchè troppo incasinato, quindi vado a modificare l'output di TransferSpreadsheet, che almeno è corretto. Non avevo pensato ai nomi delle text box, pensavo bastassero le intestazioni del report. Magari provo a cambiare quei nomi.

          Aggiungo un bit di info. Aprendo il report in modalità "print preview" e cliccando il tasto destro su tale view, nel menu compare la voce "export to "   e qui si può scegliere Excel, word etc. Solo che "export to Excel" prevede solo output su .xls

          per cui viene l'idea che, nonostante la presenza  di acFormatXslx nelle opzioni di runcmd.OutputTo, l'export di un REPORT in formato xslx non sia previsto e ci sia un po' di confusione nella documentazione Microsoft. Ok, possiamo sopravvivere.

        Login Registrati
        Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
        Rispondi a: Access export report su Excel-2
        Gli allegati sono permessi solo ad utenti REGISTRATI
        Le tue informazioni: