Grazie a Tutti gli amici.
Mi scuso se mi inserisco, forse in maniera impropria, dato che, per questa necessità contingente uso VB6 anziceh VBA
Da una form ho la possibilità di lanciare una stampa selezionata
La funzione produce una corretta stampa dei dati.
Alla fine della funzione faccio il rilascio delle risolrse excel utilizzate per la produzione del report.
Mi aspetterei di vedere in task manager chiudersi il processo, mentre rimane attivo.
Se immediatamente rieseguo la stampa con parametri diversi, la funzione, speculare alla prima, va in errore
Allego il codice con la posizionalità dell'errore
Private Function StampaReport_Sintetico(Strsql_Ado As String, Stato As String) As Boolean
'
' Viene eseguita la stampa del foglio excel di supporto
'
StampaReport_Sintetico = False
Dim rs1 As ADODB.Recordset
Dim FileXls As String
Dim FileUtente As String
Dim FoglioReport As String
Dim MioFoglio As String
Dim PathUtente As String
Dim Strsql As String
Dim nrec As Integer
Dim Resto As Integer
Dim NrecfromPage As Integer
Dim NPage As Integer
Dim NRighe As Integer
Dim Riga As Integer
Dim RigaStart As Integer
Dim Rigaend As Integer
Dim MaxRec As Integer
Dim NewTesoro As Double
Dim Dtdal As String
Dim DtAl As String
Dim TotImpegni As Double
' difinizioni per file XLS
Dim a As Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Dim valore As Integer
' Impostazione Parametri di default per applicazione
FileXls = "Report_PIF.xls"
PathUtente = "C:\Archivi\PIF"
FileUtente = PathUtente & "\" & FileXls 'App.Path & "\" & FileXls
' FoglioReport = "Inv_PIF_Sint"
' EVIDENZIO IN Foglio excel la situazione della tesoreria
MioFoglio = "Inv_PIF_Sint"
NrecfromPage = 41
RigaStart = 11
MaxRec = 51
NPage = 0
Dtdal = ""
DtAl = ""
NRighe = 0
TotImpegni = 0
'apri excel
Set a = New Excel.Application
'apre il file
Set wb = a.Workbooks.Open(FileUtente)
'seleziona il foglio
Set ws = wb.Worksheets(MioFoglio)
' Orientamento Orizzontale --> vbPRORLandscape
' Orientamento Verticale --> vbPRORPortrait
' potresti usare la proprietà Printer.Orientation che assume i seguenti valori:
' vbPRORLandscape e vbPRORPortrait
100
Sheets(MioFoglio).Select <---- Istruzione in errore in caso di riesecuzione
Sheets(MioFoglio).PageSetup.Orientation = vbPRORPortrait
' editazione Utente
Sheets(MioFoglio).Cells(55, 4) = "WR1049" 'NameUser
Sheets(MioFoglio).Cells(55, 6) = "Merdaiolo Felice" 'NameUser
Sheets(MioFoglio).Cells(4, 9) = Date
'Valore = ws.Cells(3, 4)
' Inizializza Foglio Righe di Dettaglio
Call InizializzaGrigliaXLS(MioFoglio, RigaStart, MaxRec)
' Testata
Select Case Stato
Case "A"
Sheets(MioFoglio).Cells(4, 4) = "Attive"
Case "S"
Sheets(MioFoglio).Cells(4, 4) = "Storico"
End Select
' Lettura degli Impegni per Editazione
nrec = 0
Riga = RigaStart
Strsql = Strsql_Ado
Set rs1 = conn.Execute(Strsql)
Do Until rs1.EOF
If nrec > NrecfromPage Then
' stampa del foglio in analisi
NPage = NPage + 1
Sheets(MioFoglio).Columns("C:C").EntireColumn.AutoFit
Sheets(MioFoglio).Columns("G:G").EntireColumn.AutoFit
Sheets(MioFoglio).Columns("I:I").EntireColumn.AutoFit
Sheets(MioFoglio).Select
ActiveWindow.PrintOut Copies:=1, Collate:=True
' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
RigaStart = 11
MaxRec = 51
' Inizializza Foglio Righe di Dettaglio
Call InizializzaGrigliaXLS(MioFoglio, RigaStart, MaxRec)
Riga = RigaStart
nrec = 0
End If
NRighe = NRighe + 1
Sheets(MioFoglio).Cells(Riga, 1) = NRighe
Sheets(MioFoglio).Cells(Riga, 2) = rs1("Data_Impegno")
Sheets(MioFoglio).Cells(Riga, 3) = rs1("DENOMINAZIONE")
Sheets(MioFoglio).Cells(Riga, 7) = FormatEuro(rs1("Importo"))
Sheets(MioFoglio).Cells(Riga, 9) = rs1("D_Forma_Tecnica")
TotImpegni = TotImpegni + rs1("Importo")
If Dtdal = "" Then
Dtdal = rs1("Data_Impegno")
End If
DtAl = rs1("Data_Impegno")
Sheets(MioFoglio).Cells(6, 4) = Dtdal
Sheets(MioFoglio).Cells(7, 4) = DtAl
Riga = Riga + 1
nrec = nrec + 1
rs1.MoveNext
Loop
Riga = 53
Sheets(MioFoglio).Cells(Riga, 7) = FormatEuro(TotImpegni)
Sheets(MioFoglio).Columns("C:C").EntireColumn.AutoFit
Sheets(MioFoglio).Columns("G:G").EntireColumn.AutoFit
Sheets(MioFoglio).Columns("I:I").EntireColumn.AutoFit
Sheets(MioFoglio).Select
Sheets(MioFoglio).PrintOut Copies:=1, Collate:=True
' ActiveWindow.Sheets(MioFoglio).Select.PrintOut Copies:=1, Collate:=True
' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
rs1.Close
Set rs1 = Nothing
'chiude tutto
wb.Save
wb.Close
a.Quit
Set ws = Nothing
Set a = Nothing
MsgBox "finito aggiornamento del foglio excel di stampa"
StampaReport_Sintetico = True
End Function
Mi sembra di operare correttamente
con
Dim a As Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Definisco oggetti
con
wb.Save
wb.Close
a.Quit
Set ws = Nothing
Set a = Nothing
Chiudo gli oggetti excel e rilascio le risorse.
Penserei che venisse chiuso anche il processo assegnato a excel.se rieseguo la stampa mi va in errore su riga 100
100 Sheets(MioFoglio).Select
Come posso risolvere ?
Grazie
Moreno