Newsgroup: it.comp.appl.access
Titolo: [OT?] Esportare in Excel formattando il foglio mediante VBA.

Ho un foglio Excel predisposto per ricevere i dati di un recordset
Access. Le colonne hanno le larghezze giuste e alcune formattazioni
sono già registrate.
L'istruzione
   XLSheet.activesheet.Cells(u, 1).Value = "Importo della Provincia di
" & _
         PrecProv & ": " & Format(TotTipo, "Standard")
mi mette il valore di TotTipo alla riga "u", cella 1. Vorrei invece
metterlo alla cella 5, allineando il testo a destra.
Ora, non posso cambiare l'allineamento della colonna E del foglio,
perché deve contenere anche dati da allineare a sinistra, né posso
usare la formattazione condizionale di Excel per cambiare allineamento
a seconda del contenuto della cella.
In Excel posso scrivere codice così:
    Application.ActiveSheet.Cells(11, 5).HorizontalAlignment = xlRight
che nella mia Sub di Access tradurrei:
    XLSheet.ActiveSheet.Cells(11, 5).HorizontalAlignment = xlRight
ma non funziona, anche se non mi dà errore.
Vorrei anche aggiungere un salto pagina, che in XL suona:
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
ma anche questo non funziona in Access, pur non dando errore.
Non è lo stesso inguaggio VBA che si usa nelle due applicazioni?
Per esempio, un'istruzione come questa
            XLSheet.activesheet.Cells(u, 1).Font.Size = 16
funziona regolarmente.
Perplesso, ringrazio in anticipo.
Riccardo Baldinotti

 ha scritto nel messaggio 
news:60209730-2d4d-421f...@x41g2000hsb.googlegroups.com...




[risposta]
Non hai indicato come ottieni l'oggetto XLSheet; sarebbe meglio se inserisci 
almeno la dichiarazione degli oggetti.
(es.)In access:
'---
Dim oApp As Excel.Application
Set oApp = CreateObject("Excel.Application")
...
oApp.ActiveSheet.Cells(11, 5).HorizontalAlignment = xlRight
oApp.ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
...
'---
Occhio alla gestione degli errori e alla cancellazione degli oggetti 
creati...
Ciao.
-- 
Sergio MAZZA 

E alla fine di tutto do un
    Set XLSheet = Nothing
Per riempire le celle uso istruzioni come le seguenti
            XLSheet.activesheet.Cells(u, 1).Value = "Provincia di " &
RST!provincia
            XLSheet.activesheet.Cells(u, 1).Font.Size = 16
            u = u + 1
...
        XLSheet.activesheet.Cells(u, 2).Value = "Data inizio lavori"
        XLSheet.activesheet.Cells(u, 3).Value = RST!inizio
        XLSheet.activesheet.Cells(u, 5).Value = "Importo opere ammesse
€ " & Format(RST!ammissibile, "0,00.00")
        u = u + 1
eccetera.
Uso più righe per ogni record del mio RST, gestendole con la variabile
[u].
La parola "activesheet" non mi diventa maiuscola, contrariamente alle
altre delle istruzioni riportate... vorrà dir qualcosa?
Ancora grazie
Riccardo Baldinotti

 ha scritto nel messaggio 
news:d9a267fb-4fb2-459f...@k7g2000hsd.googlegroups.com...








Ancora grazie
Riccardo Baldinotti
[risposta]
Sbagli nell'istanziare la classe dell'oggetto XLSheet;
o lo istanzi come classe Application:
...
Set XLSheet = GetObject(, "Excel.Application")
...
oppure come Document (Workbook):
...
Set XLSheet = GetObject("d:\EdiSco" & Forms!menu!anno & ".xls")
...
Puoi semplificare il tutto così:
'---
Sub o Function
On error goto Errori
Dim XLSheet As Object
on error resume next
Set XLSheet = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
    Set XLSheet = CreateObject("Excel.Application")
End if
on error goto 0
XLSheet.Workbooks.Open "d:\EdiSco" & Forms!menu!anno & ".xls"
...tuo codice...
Set XLSheet = nothing
Exit Sub/Function
Errori:
    Set XLSheet = nothing
    Msgbox err.number & " " & err.description
End Sub/Function
'---
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:d9a267fb-4fb2-459f...@k7g2000hsd.googlegroups.com...

Chiedo scusa per ll lungo silenzio ma... caddi malato.
Ho apportato la modifica suggerita. Ora sto cercando di mettere quelle
due istruzioni, l'inserimento di un'interruzione pagina e
l'allineamento a destra di una cella.
Dato che le istruzioni le copio ben prima di averle capite, ho
giocherellato con voci tipo HorizontalAlignment e HPageBreaks, ma
senza esito.
Grazie all'ennesima.
Riccardo Baldinotti

 ha scritto nel messaggio 
news:e3a8c3fb-0972-4474...@v16g2000prc.googlegroups.com...
Chiedo scusa per ll lungo silenzio ma... caddi malato.
[risposta]
L'importante è rialzarsi.
Ho apportato la modifica suggerita. Ora sto cercando di mettere quelle
due istruzioni, l'inserimento di un'interruzione pagina e
l'allineamento a destra di una cella.
Dato che le istruzioni le copio ben prima di averle capite, ho
giocherellato con voci tipo HorizontalAlignment e HPageBreaks, ma
senza esito.
Grazie all'ennesima.
Riccardo Baldinotti
[risposta]
HPageBreak Object [Excel 2003 VBA Language Reference]
http://msdn.microsoft.com/en-us/library/aa174229(office.11).aspx
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:e3a8c3fb-0972-4474...@v16g2000prc.googlegroups.com...

Ho copiato l'istruzione di esempio:
   Worksheets(1).HPageBreaks(1).Location = Worksheets(1).Range("e5")
modificandola così:
   Worksheets(1).HPageBreaks(Pbr).Location = Worksheets(1).range("a" &
u)
   Pbr = Pbr + 1
dove Pbr è il numero di interruzione che voglio disporre nel foglio ma
mi dà errore "Sub o Function non definita" alla parola Worksheets.
Allora ho modificato in
   XLSheet.Worksheets(1).HPageBreaks(Pbr).Location =
XLSheet.Worksheets(1).range("a" & u)
e mi dice "Indice non incluso nell'intervallo"
Ho pensato di dover prima creare il PageBreak con il metodo Add, ma
l'istruzione
   XLSheet.Worksheets(1).HPageBreaks(Pbr).Add
mi dà ancora "Indice non incluso nell'intervallo".
Ho anche provato
   XLSheet.ActiveSheet.HPageBreaks(Pbr).Location =
XLSheet.ActiveSheet.range("a" & u)
per quel che ne capisco, ma niente.
E comincio a pensare di rinunciare alle formattazioni. Ho cercato
anche Align, Alignment, ma non le ho trovate.
Ci avrei messo meno a formattare le celle una per una... sarà il mal
di gola.
Grazie.
Riccardo Baldinotti

 - Mostra testo citato -
Vabbe', postare con un attimo di ritardo...
mi funziona l'istruzione seguente:
   XLSheet.ActiveSheet.HPageBreaks.Add
before:=XLSheet.ActiveSheet.cells(u, 1)
che però avevo provato anche mercoledì (giurin giuretta) senza
risultati.
Ritemprato dal serendipico successo, mi metto in caccia degli
allineamenti.
"Donne, motori e Accèss
ti uccidono di stress"
Riccardo Baldinotti

 ha scritto nel messaggio 
news:aebc8b2a-8f07-492b...@i18g2000prf.googlegroups.com...
Vabbe', postare con un attimo di ritardo...
mi funziona l'istruzione seguente:
   XLSheet.ActiveSheet.HPageBreaks.Add
before:=XLSheet.ActiveSheet.cells(u, 1)
che però avevo provato anche mercoledì (giurin giuretta) senza
risultati.
Ritemprato dal serendipico successo, mi metto in caccia degli
allineamenti.
"Donne, motori e Accèss
ti uccidono di stress"
Riccardo Baldinotti
[risposta]
Ti aiuta molto utilizzare in excel il generatore di macro e simulando le 
azioni; poi modifichi il codice che ha generato adattandolo ad access...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:aebc8b2a-8f07-492b...@i18g2000prf.googlegroups.com...

Avevo provato, scoprendo così l'esistenza della parola
HorizontalAlignment da applicare ad una Selection.
    Range("E112").Select
    With Selection
        .HorizontalAlignment = xlRight
        .VerticalAlignment = xlTop
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
Questa è la macro che ottenevo.
Nel mio codice ho perciò scritto
   XLSheet.ActiveSheet.Range("e" & u).Select
   XLSheet.ActiveSheet.Selection.HorizontalAlignment = xlRight
ma il xlRight è visto come "Variabile non definita". Ho provato a
sostituire la costante con un valore e ho scritto 1, al che ottengo
"Proprietà o metodo non supportati dall'oggetto". L'istruzione:
   XLSheet.ActiveSheet.Range("e" & u).HorizontalAlignment = 1
è semplicemente ignorata.
Bò...
Riccardo Baldinotti

 ha scritto nel messaggio 
news:5959893a-8d91-49ec...@e1g2000pra.googlegroups.com...
Avevo provato, scoprendo cos� l'esistenza della parola
HorizontalAlignment da applicare ad una Selection.
    Range("E112").Select
    With Selection
        .HorizontalAlignment = xlRight
        .VerticalAlignment = xlTop
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
Questa � la macro che ottenevo.
Nel mio codice ho perci� scritto
   XLSheet.ActiveSheet.Range("e" & u).Select
   XLSheet.ActiveSheet.Selection.HorizontalAlignment = xlRight
ma il xlRight � visto come "Variabile non definita". Ho provato a
sostituire la costante con un valore e ho scritto 1, al che ottengo
"Propriet� o metodo non supportati dall'oggetto". L'istruzione:
   XLSheet.ActiveSheet.Range("e" & u).HorizontalAlignment = 1
� semplicemente ignorata.
B�...
Riccardo Baldinotti
[risposta]
Riccardo; hai inserito una gestione degli errori (con relativa distruzione 
degli oggetti) nel tuo codice?
Perch� � possibile che si avviino pi� sessioni di excel e l'errore potrebbe 
non essere indicativo...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Mi scuso ancora del ritardo (scioperi, malattie, Gustav Mahler e Kula
Shaker, UFO...).
Anche con l'esecuzione passo-passo ottengo gli stessi messaggi.
ri-bò (nel senso di perplesso, non di cavallo).
Riccardo Baldinotti