Per quello che sono le mie conoscenze ti posso consigliare di creare il report da inviare tramite e-mail ogni qual volta è necessario
un esempio per aiutarti a fare il tutto può essere il seguente:
Sub CreaReport()
On Error GoTo Err_CreaReport
DoCmd.SetWarnings False
Dim ctl As Control
Dim rptName As String
Dim rpt As Report
Dim fld As DAO.Field
Dim r As DAO.Recordset
Dim i As Integer
Dim pippo As String
pippo = InputBox("Immetti il nome del report")
' Restituisce una variabile di tipo dati Report che punta
' al nuovo oggetto Report.
Set rpt = CreateReport
rptName = rpt.Name
' Imposta le proprietà per il nuovo report.
With rpt
.RecordSource = "Q_elencomensileCI" 'origine dei dati
.Caption = pippo
End With
rpt.Section(acPageHeader).Height = 250
Set r = CurrentDb.OpenRecordset(rpt.RecordSource)
' Crea intestazione report
Set ctl = CreateReportControl(rptName, acLabel, acPageHeader, , , 700, 20, 10000, 300)
ctl.Caption = pippo
ctl.Width = 10000
ctl.ForeColor = RGB(0, 0, 0)
ctl.FontSize = 12
ctl.FontBold = True
i = 0
For Each fld In r.Fields
' Crea etichette
If i = 0 Then
Set ctl = CreateReportControl(rptName, acLabel, acPageHeader, , fld.Name, i + 700, 300, 4000, 200)
ctl.TextAlign = 1
ctl.Caption = Left(fld.Name, 30)
ctl.Width = 2000
Else
Set ctl = CreateReportControl(rptName, acLabel, acPageHeader, , fld.Name, i + 2700, 300, 500, 200)
ctl.TextAlign = 3
ctl.Caption = Left(fld.Name, 2)
ctl.Width = 500
End If
ctl.FontBold = True
If i <> 0 Then
ctl.ForeColor = RGB(0, 0, 0)
End If
' Crea campi testo
If i = 0 Then
Set ctl = CreateReportControl(rptName, acTextBox, , , fld.Name, i + 700, 20, 4000, 200) '700, 50, 500, 300)
ctl.TextAlign = 1
Else
Set ctl = CreateReportControl(rptName, acTextBox, , , fld.Name, i + 2700, 20, 500, 200) '700, 50, 500, 300)
End If
ctl.ControlSource = fld.Name
ctl.Format = "##0"
If i = 0 Then
ctl.FontBold = True
End If
''''''''''''''''''''''''''''''''''''''''
'' Crea totali
'Set ctl = CreateReportControl(rptName, acTextBox, acPageFooter, , fld.Name, i + 700, 50, 500, 300)
'If i <> 0 Then
' ctl.ControlSource = "=DSum('[" & fld.Name & "]', 'Q_elencomensileCI')"
'Else
' ctl.ControlSource = "='Tot.'"
'End If
''''''''''''''''''''''''''''''''''''
ctl.Format = "##0"
ctl.ForeColor = RGB(0, 0, 0)
ctl.FontBold = True
i = i + 550
Next
rpt.Section(acDetail).Height = 350
Set ctl = CreateReportControl(rptName, acLine, acPageHeader, , , 700, 550, 12500, 20)
Set ctl = CreateReportControl(rptName, acLine, acDetail, , , 700, 250, 12500, 20)
Set ctl = CreateReportControl(rptName, acLine, acPageFooter, , , 700, 10, 12500, 20)
Set ctl = CreateReportControl(rptName, acTextBox, acPageFooter, , , 700, 400, 1000, 300)
ctl.ControlSource = "=Date()"
ctl.Width = 5000
ctl.FontBold = True
ctl.TextAlign = 1
ModificaOrient rpt
DoCmd.Close acReport, "a", acSaveYes
DoCmd.SetWarnings True
DoCmd.OpenReport rptName, acViewPreview ', , "[mese]=" & Forms!s_sezione.[mese]
'DoCmd.DeleteObject acReport, rptName
Exit_CreaReport:
Exit Sub
Err_CreaReport:
MsgBox Err.Description
Resume Exit_CreaReport
End Sub
Sub ModificaOrient(rpt As Report)
Const DM_PORTRAIT = 1
Const DM_LANDSCAPE = 2
Dim StringaPer As str_DEVMODE
Dim DM As type_DEVMODE
Dim strModalitàExtraPer As String
If Not IsNull(rpt.PrtDevMode) Then
strModalitàExtraPer = rpt.PrtDevMode
StringaPer.RGB = strModalitàExtraPer
LSet DM = StringaPer
DM.lngCampi = DM.lngCampi Or _
DM.intOrientamento ' Inizializza campi.
DM.intOrientamento = DM_LANDSCAPE
LSet StringaPer = DM ' Aggiorna la proprietà.
Mid(strModalitàExtraPer, 1, 94) = StringaPer.RGB
rpt.PrtDevMode = strModalitàExtraPer
End If
End Sub
milaion