Newsgroup: it.comp.appl.access
Titolo: Automazione Excel

Un saluto a tutto il NG
 
Ho un problema di questo tipo.
La seguente routine, mi crea un file excel con dati da DAO rs.
Funziona senza problemi la prima volta, poi se la ripeto una seconda volta, mi genera un errore "variabile del blocco with non impostata" ed il debug si ferma sulla riga ==> Selection.HorizontalAlignment = xlGeneral <==
Se chiudo l'applicazione e la riapro, la routine funziona di nuovo.
Qualcuno ha un'idea di che cosa non funziona? Grazie
 
Ciao - Daniele
 
Dim db As DAO.Database, rs As DAO.Recordset, sql As String, nomefile As String, i As Integer, fld As DAO.Field
Dim cliente As Integer
Set db = CurrentDb
sql = "SELECT Mix_ordini_righe.idordine, Mix_ordini_righe.idriga, Ordini_righe_new.articolo, Ordini_righe_new.idcolore, " _
& "colori.descrizione, Mix_ordini_righe.prezzo, Mix_ordini_righe.quantita, [prezzo]*[quantita] AS totale FROM colori RIGHT JOIN " _
& "(Ordini_righe_new INNER JOIN (Ordini INNER JOIN Mix_ordini_righe ON Ordini.idordine = Mix_ordini_righe.idordine) ON " _
& "Ordini_righe_new.idriga = Mix_ordini_righe.idriga) ON 
colori.id
 = Ordini_righe_new.idcolore WHERE " _
& "(((Mix_ordini_righe.idordine)=" & Elenco115.Column(0) & "))"
Set rs = db.OpenRecordset(sql)
If rs.EOF Then
    GoTo uscita
Else
 
    Dim rsordine As DAO.Recordset, sqlordine As String
    sqlordine = "SELECT Ordini.idordine, Ordini.dataordine, Ordini.idcliente, Ordini.numero_ordine, Ordini.id_pagamento, " _
    & "ana_fornitori_clienti.ragione_sociale, ana_fornitori_clienti.ragione_sociale_1, ana_fornitori_clienti.indirizzo, " _
    & "ana_fornitori_clienti.cap, ana_fornitori_clienti.citta, ana_fornitori_clienti.prov, ana_fornitori_clienti.nazione, " _
    & "ana_fornitori_clienti.telefono, ana_fornitori_clienti.cellulare, ana_fornitori_clienti.piva, ana_fornitori_clienti.codice_fiscale, " _
    & "ana_fornitori_clienti.contatto, ana_fornitori_clienti.banca, ana_banche.banca, ana_banche.iban, ana_banche.citta, " _
    & "ana_filiali.indirizzo, ana_filiali.cap, ana_filiali.citta, ana_filiali.prov, ana_filiali.nazione, ana_filiali.telefono, " _
    & "ana_filiali.ritiro_note, tipi_pagamento.descrizione FROM (((Ordini LEFT JOIN ana_fornitori_clienti ON Ordini.idcliente = " _
    & "
ana_fornitori_clienti.id
) LEFT JOIN ana_banche ON ana_fornitori_clienti.banca = 
ana_banche.id
) LEFT JOIN ana_filiali ON " _
    & "Ordini.idcliente = ana_filiali.id_cliente) LEFT JOIN tipi_pagamento ON Ordini.id_pagamento = 
tipi_pagamento.id
 WHERE " _
    & "(((Ordini.idordine)=" & Elenco115.Column(0) & "))"
    Set rsordine = db.OpenRecordset(sqlordine)
    Dim ex As Object, doc As Object
    Dim foglio As Object
    Set ex = CreateObject("excel.application")
    Set doc = ex.Workbooks.Add
    ex.Visible = False
    DoCmd.Hourglass True
    Set foglio = doc.Worksheets(1)
        foglio.Cells(1, 1) = "Casoria"
        foglio.Cells(1, 2) = "'" & rsordine("dataordine")
        foglio.Cells(2, 1) = "Numero Ordine"
        foglio.Cells(2, 2) = "'" & rsordine("numero_ordine")
        foglio.Cells(4, 1) = "Ditta"
        foglio.Cells(4, 2) = rsordine("ragione_sociale")
        foglio.Cells(5, 2) = rsordine("ragione_sociale_1")
        foglio.Cells(6, 2) = rsordine("ana_fornitori_clienti.indirizzo")
        foglio.Cells(7, 2) = rsordine("ana_fornitori_clienti.cap") & " " & rsordine("ana_fornitori_clienti.citta") & " " & rsordine("ana_fornitori_clienti.prov")
        foglio.Cells(8, 2) = rsordine("ana_fornitori_clienti.nazione")
        foglio.Cells(9, 2) = "Telefono " & rsordine("ana_fornitori_clienti.telefono")
        foglio.Cells(10, 2) = "Cellulare " & rsordine("cellulare")
        foglio.Cells(11, 2) = "P.Iva " & rsordine("piva")
        foglio.Cells(12, 2) = "Codice Fiscale " & rsordine("codice_fiscale")
        foglio.Cells(13, 2) = "Contatto " & rsordine("contatto")
        foglio.Cells(4, 4) = "Banca"
        foglio.Cells(4, 5) = rsordine("ana_banche.banca")
        foglio.Cells(5, 5) = "Iban " & rsordine("iban")
        foglio.Cells(6, 5) = rsordine("ana_banche.citta")
        foglio.Cells(7, 4) = "Spedizione"
        foglio.Cells(7, 5) = rsordine("ana_filiali.indirizzo")
        foglio.Cells(8, 5) = rsordine("ana_filiali.cap") & " " & rsordine("ana_filiali.citta") & " " & rsordine("ana_filiali.prov")
        foglio.Cells(9, 5) = "Telefono " & rsordine("ana_filiali.telefono")
        foglio.Range("E10:E14").Select
    ==> Selection.HorizontalAlignment = xlGeneral <==
        Selection.VerticalAlignment = xlTop
        Selection.WrapText = True
        Selection.Orientation = 0
        Selection.AddIndent = False
        Selection.IndentLevel = 0
        Selection.ShrinkToFit = False
        Selection.ReadingOrder = xlContext
        Selection.MergeCells = True
        foglio.Cells(10, 5) = " NOTE : " & rsordine("ritiro_note")
        foglio.Cells(14, 1) = "Pagamento"
        foglio.Cells(14, 2) = rsordine("descrizione")
 
    rsordine.Close
    Set rsordine = Nothing
    rs.MoveFirst
    i = 17
    foglio.Cells(i, 1) = "ARTICOLO"
    foglio.Cells(i, 2) = "COLORE"
    foglio.Cells(i, 3) = "PREZZO"
    foglio.Cells(i, 4) = "QUANTITA'"
    foglio.Cells(i, 5) = "TOTALE"
    i = i + 1
 
    Do While Not rs.EOF
        foglio.Cells(i, 1) = rs("articolo")
        foglio.Cells(i, 2) = rs("descrizione")
        foglio.Cells(i, 3) = rs("prezzo")
        foglio.Cells(i, 4) = rs("quantita")
        foglio.Cells(i, 5) = rs("totale")
        rs.MoveNext
        i = i + 1
    Loop
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    nomefile = Elenco115.Column(1) & ".xlsx"
    foglio.Columns("A:Z").AutoFit
 
 
    doc.SaveAs "C:\Mario\ordini\" & nomefile
    ex.Quit
    Set doc = Nothing
    Set ex = Nothing
    DoCmd.Hourglass False
End If
 
uscita_exit:
Set rs = Nothing
Set db = Nothing
Exit Sub
 
uscita:
MsgBox "Non ci sono record selezionati"
GoTo uscita_exit
 


dopo aver eseguito la prima volta
guarda in task manager se Excel e' ancora aperto


In effetti Excel rimane aperto
 
 

Il giorno mercoledì 9 marzo 2016 11:36:10 UTC+1, pfm ha scritto:

Con quale comando posso chiuderlo ?

Il giorno mercoledì 9 marzo 2016 11:36:10 UTC+1, pfm ha scritto:

Cercando su Google ho trovato la risposta. Il mio riferimento alla Selection
è una referenza ad un oggetto non qualificato e quindi non in relazione al mio oggetto ex.application.
Aggiungendo la qualifica ex.selection.HorizontalAlignment, alla chiusura dell'oggetto excel, ogni riferimento all'oggetto Selection scompare.
Non sono un gran che come divulgatore ma spero che qualcuno mi capisca.
 
Grazie e buona serata.
Daniele