Ho sviluppato questa macro:
- Codice: Seleziona tutto
Sub Libretto()
'by Anthony
'
CDoc = ActiveDocument.Name
If MsgBox("Documento corrente: " & CDoc & vbCrLf & "Procedo con la stampa a libretto?", _
vbOKCancel, "Verifica File Selezionato") = 2 Then Exit Sub
'
Refeed:
Feed = Val(InputBox(">>0 per Uscire senza stampare" & vbCrLf & ">>1 per stampante con Fronte/Retro integrato" & _
vbCrLf & " Ordine di stampa: Fronte1/Retro1, F2/R2, F3/R3, etc" & vbCrLf & _
">>2 per stampare prima le pagine Fronte e poi le retro" & vbCrLf & _
" Ordine di stampa: F1, F2, F3, etc; poi R1, R2, etc", "Scegli il tipo di stampante", 0))
If Feed = 0 Then Exit Sub
If Feed > 2 Then GoTo Refeed
'Normallizza numero di pagine su multiplo di 4
Do
TotPag = ActiveDocument.BuiltInDocumentProperties(14)
If TotPag Mod 4 = 0 Then Exit Do
Selection.EndKey Unit:=wdStory, Extend:=wdMove
Selection.InsertBreak Type:=wdPageBreak
Loop
TotFogli = TotPag / 4
'ActivePrinter = "PDF-Creator" '<<<< Modificare
'ActivePrinter = "EPSON Stylus Photo RX420 Series" '<<<<Modificare
ReFor1:
ISt = 0: IEnd = TotFogli - 1: IStep = 1
ReFor2:
CF = 1: CB = TotPag
For I = ISt To IEnd Step IStep
Select Case Feed
Case 1
PF = CB - I * 2 & "," & CF + I * 2
PR = CF + I * 2 + 1 & "," & CB - I * 2 - 1
QualiPag = PF & "," & PR
Case 2
QualiPag = CB - I * 2 & "," & CF + I * 2
Case 3
QualiPag = CF + I * 2 + 1 & "," & CB - I * 2 - 1
End Select
Application.PrintOut FileName:="", Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:=QualiPag, PageType:= _
wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True, Background:= _
True, PrintToFile:=False, PrintZoomColumn:=2, PrintZoomRow:=1, _
PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
Next I
If Feed = 1 Or Feed = 3 Then Exit Sub
Feed = Feed + 1
ReRetro:
FRetro = Val(InputBox(UCase("Riposizionare le stampe dal tray di uscita a quello di entrata" & _
" invertendo il FRONTE col RETRO ") & vbCrLf & _
">>Inserire 1 se la pag. 1 e' in cima alle pagine stampate" & vbCrLf & _
">>Inserire 2 se la pag. 1 e' in fondo alle pagine stampate" & vbCrLf & _
"NB: in cima/in fondo definito guardando dal lato gia' stampato", "Scegli l' ordine di stampa retro", 0))
If FRetro = 0 Or FRetro > 2 Then
If MsgBox("Sicuro che vuoi abortire il processo di Stampa Retro?" & vbCrLf & _
"Yes per abort; No per ripetere la scelta", vbYesNo) = 6 Then Exit Sub
GoTo ReRetro
End If
If FRetro = 2 Then GoTo ReFor1
IEnd = 0: ISt = TotFogli - 1: IStep = -1
GoTo ReFor2
'
End Sub
Modalita’ d’ uso:
-selezionare il documento da stampare
-lanciare la macro e confermare se il documento selezionato e’ corretto
-scegliere il tipo di stampante disponibile:
---1, stampante che fa Fronte/Retro automatico. Con questa selezione pero’ E’ NECESSARIO MODIFICARE L’ ISTRUZIONE Application.PrintOut; poiche’ il vba per word non e’ il mio forte, non ho individuato il parametro che controlla questa modalita’ CHE QUINDI NON DOVREBBE FUNZIONARE regolarmente. Se qualcuno puo’ aiutare, si faccia sentire; se qualcuno dispone di stampante Fronte/Retro, allora provi a registrare una macro mentre stampa in modalita’ Fronte e Retro, 2 pagine per facciata, le pagine 1,3,5,7 e poi posti il codice ottenuto, magari aiuta.
---2, stampanti dove prima bisogna stampare le facciate Fronte e successivamente le facciate Retro
-Se la scelta e’ 2, a completamento delle pagine Fronte:
---verificare se la pag 1 e’ in cima al blocco delle pagine stampate o in fondo
---inserire le pagine nell’ alimentatore avendole capovolte
---rispondere alla domanda sull’ ordine delle pagine stampate e continuare la stampa.
Noterete che le istruzioni per impostare la stampante sono "commentate", quindi la macro lavora sulla stampante "correntemente selezionata"; potrebbe invece essere utile inserire l' istruzione che ne imposta una; anche qui la tecnica del "registra macro" puo' aiutare a determinare piu' che la sintassi dell' istruzione "ActivePrinter" il vero nome della vostra stampante.
Suggerisco di fare esperimenti con documenti di 9-11 pagine, abbastanza lunghi per capire gli errori che si possono fare nel posizionare la carta senza sciuparne troppa . . .
Fate sapere le vostre esperienze e mandate i vostri suggerimenti per migliorare.
Ciao