...che stampi più di una pagina? Il problema è ovviamente la gestione del NewPage.Per la questione della stampa - in via generale - di due o più pagine, ti segnalo questo paragrafo di una pagina della nostra WIKI:
Private hRecLetto As Result
Private NumPag As Integer
Public Sub btn_stampa_Click()
Dim sTabella, sSQL As String
M1.ConnettiDB()
sTabella = M1.sPrefix & "servizi"
sSQL = "SELECT serv_id,serv_sigla,serv_descrizione FROM " & sTabella
hRecLetto = M1.$hConn.Exec(sSQL)
NumPag = Int(hRecLetto.Count / 25) + 1
With Printer1
.Configure ' opzionale - apre la finestra di dialogo se si vogliono reimpostare tutte le proprietà della stampante
.Orientation = 0 ' opzionale - (oppure: Printer1.Portrait) imposta la modalità di stampa "Verticale" (oppure "Orizzontale").
.Paper = 2 ' opzionale - imposta il tipo di carta ( 2 = A4)
.OutputFile = Application.Path & "/stampe/rep_servizi.pdf"
.Resolution = 300 ' opzionale - imposta la risoluzione di stampa (in DPI), per ottenere il risultato simile a quello che si vede sul monitor
.Print ' effettua la stampa su foglio
End With
'Print Application.Path & "/stampe/rep_servizi.pdf"
End
Public Sub Printer1_Begin()
Dim NumRec As Integer
Printer1.Count = NumPag
End
Public Sub Printer1_Draw() ' Questo evento è richiamato per ogni pagina da stampare.
Dim sRiga As String
Dim NumRiga, PosY As Integer
' In questa routine saranno presenti le informazioni di ciò che si andrà a stampare.
With Paint
' volendo si può impostare la dimensione del font:
.Font.Size = 14
' il testo sarà allineato al quadrilatero "virtuale" posto alle coordinate X, Y e di dimensioni W, H:
sRiga = "Comune di Prova"
.DrawText(sRiga, 100, 50, 2000, 500)
' Ma si potrà anche eliminare il riferimento a quelle dimensioni:
sRiga = " ELENCO SERVIZI DISPONIBILI"
.DrawText(sRiga, 800, 200)
PosY = 250
.DrawText("Cod", 100, PosY)
.DrawText("Sigla", 250, PosY)
.DrawText("Descrizione servizio", 500, PosY)
NumRiga = 0
For Each hRecLetto
NumRiga = NumRiga + 1
PosY = 300 + NumRIga * 70
sRiga = Format$(hRecLetto!serv_id, "##,##0")
.DrawText(sRiga, 100, PosY)
.DrawText(hRecLetto!serv_sigla, 250, PosY)
.DrawText(hRecLetto!serv_descrizione, 500, PosY)
If NumRiga = 26 Then
.DrawText(". ", 100, 3000)
'
NumRiga = 0
Endif
Next
End With
End
....sembra funzionare salvo il fatto che scrive la 2 pagina uguale alla prima. Suggerimenti?...prova a fare una verifica facendo scorrere il codice "passo-passo".
Private hRecLetto As Result
Private hRecStampa As Result
Private NumPag As Integer
Private PagineStampate As Integer
Public Sub Form_Open()
Dim sTabella, sSQL As String
Dim RecPag As Integer
M1.ConnettiDB()
sTabella = M1.sPrefix & "servizi"
sSQL = "SELECT serv_id,serv_sigla,serv_descrizione FROM " & sTabella
hRecLetto = M1.$hConn.Exec(sSQL)
RecPag = 25
NumPag = Int(hRecLetto.Count / RecPag) + 1
PagineStampate = 0
With Printer1
.Configure ' opzionale - apre la finestra di dialogo se si vogliono reimpostare tutte le proprietà della stampante
.Orientation = 0 ' opzionale - (oppure: Printer1.Portrait) imposta la modalità di stampa "Verticale" (oppure "Orizzontale").
.Paper = 2 ' opzionale - imposta il tipo di carta ( 2 = A4)
.OutputFile = Application.Path & "/stampe/rep_servizi.pdf" ' se si vuole stampare un file pdf
.Resolution = 300 ' opzionale - imposta la risoluzione di stampa (in DPI), per ottenere il risultato simile a quello che si vede sul monitor
.Print ' effettua la stampa su foglio
End With
End
Public Sub Printer1_Begin()
Printer1.Count = NumPag
End
Public Sub Printer1_Draw() ' Questo evento è richiamato per ogni pagina da stampare.
Dim sRiga As String
Dim NumRiga, PosY, NumRecLetti As Integer
Dim vero As Boolean
With Paint
' volendo si può impostare la dimensione del font:
.Font.Size = 12
' si può anche ruotare il contenuto, che sarà stampato, degli oggetti (in questo caso di 45°).
' (Se si intende usare i radianti, sarà: .Rotate(Pi(0.25)). )
'.Rotate(45)
' Si può anche impostare il colore del testo: in questo caso a blu scuro.
' Se si intende usare il codice, sarà in esad. ad esempio: = Paint.Color(&H001F007F); ' in decimale: = Paint.Color(2031743) .
.Brush = Paint.Color(Color.DarkBlue)
' il testo sarà allineato al quadrilatero "virtuale" posto alle coordinate X, Y e di dimensioni W, H:
sRiga = "Comune di Prova"
.DrawText(sRiga, 100, 50, 2000, 500)
' Ma si potrà anche eliminare il riferimento a quelle dimensioni:
sRiga = " ELENCO SERVIZI DISPONIBILI"
.DrawText(sRiga, 800, 200)
PosY = 250
.DrawText("Cod", 100, PosY)
.DrawText("Sigla", 300, PosY)
.DrawText("Descrizione servizio", 600, PosY)
NumRiga = 0
NumRecLetti = 0
For Each hRecLetto
NumRecLetti = NumRecLetti + 1
If NumRecLetti > PagineStampate * 26 Then
NumRiga = NumRiga + 1
PosY = 300 + NumRIga * 70
sRiga = Format$(hRecLetto!serv_id, "0000")
.DrawText(sRiga, 100, PosY)
.DrawText(hRecLetto!serv_sigla, 300, PosY)
.DrawText(hRecLetto!serv_descrizione, 600, PosY)
Endif
If NumRiga = 26 Then
PagineStampate = PagineStampate + 1
Return
Endif
Next
End With
End