Problemi con formattazione file excel da vba access

di Federico85 il
12 risposte

Salve a tutti

Ho alcuni problemi con la formattazione di un file excel creato da una routine del mio database access, nello specifico con l'allineamento verticale/orizzontale e la larghezza delle colonne. Queste le righe di codice che riportano errori:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(percorso_file)
Set objWorksheet = objWorkbook.Worksheets.Add

With objWorksheet

	.Columns(4).columnwidht = 120

Errore di run-time ‘438’: proprietà o metodo non supportati dall'oggetto

	.Rows(6).VerticalAlignment = xlCenter

Errore di run-time ‘1004’: impossibile impostare la proprietà VerticalAlignment per la classe range

	.Rows(6).HorizontalAlignment = xlCenter

Errore di run-time ‘1004’: impossibile impostare la proprietà HorizontalAlignment per la classe range

Inoltre vorrei chiedervi come si può impostare una formattazione (per esempio .font.size) per l'intero foglio e non solo per una cella o un range di celle. 

Grazie mille

12 Risposte

  • Sicuramente ti manca la definizione della costante xlCenter

    Const xlCenter = -4108

    P.S. Ti raccomando di usare SEMPRE la 

    Option Explicit

    all'inizio del codice

  • Ho provato a selezionare il foglio prima di impostare l'allineamento ma non funziona ugualmente

    objWorkbook.Worksheets(nome_foglio).Select
    With objWorkbook.Worksheets(nome_foglio)
       .Rows(6).HorizontalAlignment = xlCenter
       .Rows(6).VerticalAlignment = xlCenter

    07/07/2024 - oregon ha scritto:


    Senza file non si può sapere … potrebbe essere una riga protetta o altro motivo.

    Come potrei verificarlo? Inviandovi il file agevolerei nella ricerca del problema?

  • Ho corretto la mia risposta … rileggila

  • Di nulla …

    Se usi la CreateObject (quindi il Late Binding) non disponi delle costanti simboliche, le devi impostare tu.

    Se aggiungi un riferimento alla libreria Microsoft Excel (Early Binding) puoi usare le costanti.

    La Option Explicit ti dà la possibilità di accorgerti quando stai usando qualcosa di non definito.

    Vedi

    https://learn.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/binding-type-available-to-automation-clients

  • 07/07/2024 - oregon ha scritto:


    Di nulla …

    Se usi la CreateObject (quindi il Late Binding) non disponi delle costanti simboliche, le devi impostare tu.

    Se aggiungi un riferimento alla libreria Microsoft Excel (Early Binding) puoi usare le costanti.

    La Option Explicit ti dà la possibilità di accorgerti quando stai usando qualcosa di non definito.

    Vedi

    https://learn.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/binding-type-available-to-automation-clients

    Ottimo Grazie!!

    07/07/2024 - Federico85 ha scritto:


    Inoltre vorrei chiedervi come si può impostare una formattazione (per esempio .font.size) per l'intero foglio e non solo per una cella o un range di celle. 

    Approfitto per chiedere quest'ultimo consiglio. Vorrei capire come impostare alcune formattazioni per l'intero foglio. Attualmente lo faccio utilizzando un range ampio di celle che mi permettano di comprendere abbondantemente i dati all'interno del foglio. Funziona, ma non mi sembra molto corretto…

    With objWorksheets
       .range("A1:Z100").Font.Name = "Calibri"
       .range("A1:Z100").Font.Size = 14

    Grazie mille

  • Invece di definire il Range in quel modo puoi passare questo:

    	.Range(.Cells.Address).Font.....

    Oppure come farebbe la macro di Excel:

    With objWorksheets
    	.Cells.Select
        With Selection.Font
        	.Name = "Calibri"
            .Size = 12
        end with
    End with
  • Buongiorno a tutti,

    fresco fresco qui ma con tanta voglia di scambiare idee.

    Su questo thread, avete notato che nella “Gestione attività” resta attivo un riferimento ad Excel anche una volta chiuso il DB di Access?

    Ci sto diventando matto, non c'è modo di chiuderlo.

    Avete idee?

  • 09/07/2024 - IlGusma ha scritto:


    resta attivo un riferimento ad Excel

    Perché è solo uno stralcio parziale…

    Bisogna invocare il objExcel.Close per chiudere l'istanza di Excel.

    Però il problema non c'entra nulla con la discussione. Non dovresti accodarti ma piuttosto aprirne una tua dove discutere del problema.

  • Concordo con Sgrubak e aggiungo consigliando a IlGusma di consultare le altre discussioni dell'op per vedere altre parti di codice

Devi accedere o registrarti per scrivere nel forum
12 risposte