Newsgroup: it.comp.appl.access
Titolo: automazione in excel

Ciao,
cercherò di spiegare con un piccolo esempio quello di cui ho bisogno.
In un foglio di lavoro Excel (modello) ho predisposto nella cella A1
il nome dell'intervallo per ricevere tramite l'automazione da access
10 nomi presenti in una tabella ed ho applicato una formattazione
unendo le celle B1:B10 inserendovi verticalmente la scritta
"nominativi". Succede che i 10 nomi non vanno a finire sulle 10 celle
A1:A10 già esistenti, bensì le 10 celle si rigenerano duplicando le
celle unite B1:B10 con altre 10 righe. Ho provato a spostare la
formattazione sul foglio2 inserendo i riferimenti delle celle del
Foglio1 (ad esempio =FoglioA1!A1 dove nel frattempo ho inserito il
nome dell'intervallo per l'automazione) ma non è cambiato nulla. Avete
qualche idea su come aggirare questo problema?
Grazie a chi vorrà darmi una mano.
Ciao Vladimiro.

"Vladimiro Leone"  ha scritto nel messaggio 
news:bd45ff68-8e65-4612...@u14g2000vbg.googlegroups.com...


_________Risposta:
Ed in tutto questo Access cosa c'entra?
MA


Anche per me la cosa sembra OT, però mi è successo spesso che SICCOME
faccio programmi con Access, ALLORA devo esportare in Excel.
A causa di ciò, ti copio qui un pezzo di routine che fa appunto
questo.
On Error Resume Next
    Dim v As Byte, u As Byte
    Dim FLD As Field
    Dim XLSheet As Object
    Set XLSheet = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Set XLSheet = CreateObject("Excel.Application")
    End If
    If Err.Number <> 0 Then
        Set XLSheet = CreateObject("Excel.Application")
    End If
    On Error GoTo 0
    XLSheet.workbooks.Open CurrentProject.Path & "\OriginePostEl.xlsx"
    XLSheet.Application.Visible = True
    XLSheet.Parent.Windows(1).Visible = True
    '
    Set RST = CurrentDb.OpenRecordset("qElencoPostEl")
    RST.MoveLast
    RST.MoveFirst
    u = 2
    Do While Not RST.EOF
        v = 1
        For Each FLD In RST.Fields
            XLSheet.activesheet.Cells(u, v).Value = FLD.Value
            v = v + 1
        Next
        RST.MoveNext
        u = u + 1
    Loop
    XLSheet.activesheet.Protect Password:="frolloccone",
DrawingObjects:=True, Contents:=True, Scenarios:=True '
    XLSheet.activesheet.SaveAs FileName:="t:\pubblica\INDIRIZZI LOTUS
\Indirizzi Post-El.xlsx"
    XLSheet.activeworkbook.Close
Riassumendo: apro un foglio Xl formattato come voglio, ci scrivo i
valori dei vari campi di una query e poi lo salvo con un altro nome.
Spero sia chiaro. Per formattazioni, allineamento e vari effetti
speciali, di solito faccio così: lo faccio in una macro di Excel e poi
adatto il codice prodotto in una routine di Access.
E spero anche di non avere frainteso.
Buon lavoro
Riccardo Baldinotti

 E spero anche di non avere frainteso.
Usando il metodo CopyFromRecordset dell'oggetto Range le cose si fanno
un (bel) po' più veloci ;)
E poi, a valle dell'estrazione, si parte con le formattazioni.
Just my 2 cents.
Popi

 MA
Scusa, ma tu l'automazione da dove la fai?
Se poi vuoi dire che il problema lo debbo risolvere in excel, è un
altro discorso, non trovi?
Ciao Vladimiro.

 adatto il codice prodotto in una routine di Access.
Non credo di aver capito bene, vuoi dire che le formattazioni le
ricavi tramite codice da Access?
Se è così, mi potresti fare un piccolo esempio, magari sull'esempio
mio? ( celle B1:B10 unite con la scritta verticale "Nominativi" e
celle A1:A10 con un ciclo Do-Loop da access per inserirvi 10 nomi.
Ciao Vladimiro.

 un (bel) po' più veloci ;)
Sempre sul mio piccolo esempio, puoi dirmi dettagliatamente come
faresti?
Grazie Vladimiro.

"Vladimiro Leone"  ha scritto nel messaggio 
news:7273529e-e027-434c...@w36g2000vbi.googlegroups.com...


________Risposta:
Ops avevo letto male
MA


Quello che segue è il codice che uso in un report per esportare in un
foglio excel una estrazione dei dati stampati.
Nel tuo caso, visto che inserisci in alcune celle le chiavi da
estrarre potresti collegarti il foglio come tabella da usare nella
query che estrae i dati da inviare ad excel.
Dato che la CopyFromRecordSet agisce a partire da una cella data,
potresti avere l'intestazione del foglio già pronta (ad esempio nelle
prime 3 righe) seguita da una prima riga contenente dati fasulli
formattati come vuoi.
I passi successivi sono:
- estrai i record nelle righe a partire da quella successiva ai dati
fasulli (cioè da "A5", nell'esempio).
- scorri le celle del foglio dalla prima all'ultima colonna della riga
fasulla per formattare le celle delle righe successive della stessa
colonna,
- elimini la riga con i dati fasulli.
Sono stato abbastanza dettagliato?
HTH
Popi
Private Sub Report_Close()
    Dim appExcel As Excel.Application
    Dim wbkExcel As Excel.Workbook
    Dim wksExcel As Excel.Worksheet
    Dim rsDatiReport As DAO.Recordset
    If (MsgBox("Esportare i dati su Excel?", vbYesNo +
vbDefaultButton2, "") = vbYes) Then
        DoCmd.Hourglass True
        Set appExcel = CreateObject("Excel.Application")
        appExcel.Visible = False
        Set wbkExcel = appExcel.Workbooks.Add
        Set wksExcel = wbkExcel.Worksheets.Add
        Set rsDatiReport = CurrentDb.OpenRecordset("SELECT ...;")
        wksExcel.Range("A1").Value = "Intestazione ..."
        wksExcel.Range("B1").Value = "Intestazione ..."
        wksExcel.Range("C1").Value = "Intestazione ..."
        wksExcel.Range("D1").Value = "Intestazione ..."
        wksExcel.Range("E1").Value = "Intestazione ..."
        wksExcel.Range("A2").CopyFromRecordset rsDatiReport, , 5
        wksExcel.Range("A1:E1").Font.Bold = True
        wksExcel.Range("A1:E1").HorizontalAlignment = xlCenter
        wksExcel.Range("A1:E1").VerticalAlignment = xlCenter
        wksExcel.Range("A1:E1").RowHeight = 30
        wksExcel.Range("A1:E1").Borders.LineStyle = xlContinuous
        wksExcel.UsedRange.Borders.Color = RGB(0, 0, 0)
        wksExcel.Range("A1:E1").Borders.Weight = xlThick
        wksExcel.Range("A1:E1").Interior.Color = RGB(192, 192, 192)
        wksExcel.Range("A:E").WrapText = False
        wksExcel.Columns("A:E").AutoFit
        rsDatiReport.Close
        Set rsDatiReport = Nothing
        appExcel.Visible = True
        Set wksExcel = Nothing
        Set wbkExcel = Nothing
        Set appExcel = Nothing
        DoCmd.Hourglass False
    End If
End Sub

 - Mostra testo citato -
Ciao,
ti ringrazio per l'impegno mostratomi, ma non posso adattarlo al mio
scopo in quanto:
1) ho scelto l'automazione perchè non posso inserire i dati in un
report per via della complessità dei dati stessi (riguarda una
turnazione giornaliera di 6 categorie di personale nell'arco del mese)
2) la formattazione è abbastanza complicata
3) siccome è un database che debbo consegnare, non potrei certamente
dire a che me l'ha ordinato, di eliminare i dati superflui nel foglio
(sempre se ho capito bene)
4) ho risolto diversamente :-)
Di nuovo Vladimiro.