Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Fabri,
Se desideri pubblicare la tua routine BeforePrint preesistente e spiegare le esatte modifiche che dovrebbero essere effettuate sia per l'Anteprima che per le operazioni di stampa, modificherò la routine BeforePrint e creerò il codice per uno psuedo evento AfterPrint. Definisco quest'ultima procedura come pseudo perché, purtroppo, VBA non espone un evento Workbook_AfterPrint.
Eh .. la cosa diventa abbastanza complicata, non vorrei farti perdere troppo tempo. In realtà il mio BeforePrint è complesso e collegato a diverse "Dichiarazioni Public" che gestiscono ulteriori variabili dichiarate in altre macro/altri fogli. Vediamo di estrarre l'essenziale ...
If InStr(Environ("USERPROFILE"), "PIPPO") <> 0 Then
Cancel = True
Application.ActivePrinter = "Microsoft Print to PDF su Ne01:"If FORM = "SI" Then
NOME_file = ActiveSheet.Name & " - form " & COLONNE_SELEZIONATE & ".pdf"
Else
NOME_file = ActiveSheet.Name & " - " & COLONNE_SELEZIONATE & ".pdf"
End IfIf Tipo_Stampa = "Stampa Ticketing" Then
ActiveWindow.SelectedSheets.PrintOut From:=2, To:=2, Copies:=1, PrintToFile:=True, PrToFileName:=Environ("USERPROFILE") & "\Desktop" & NOME_file
Else
If ActiveSheet.Name = "PALESTRE" And Selection.Cells.Count > 9 Then
Selection.PrintOut Copies:=1, PrintToFile:=True, PrToFileName:=Environ("USERPROFILE") & "\Desktop" & NOME_file
Else
ActiveWindow.SelectedSheets.PrintOut Copies:=1, PrintToFile:=True, PrToFileName:=Environ("USERPROFILE") & "\Desktop" & NOME_file
End If
End IfEnd if
In pratica, come puoi vedere, con questa parte di codice di BeforePrint, inibisco all'utente "PIPPO" di selezionare le opzioni di stampa, ma lo obbligo a stampare in PDF e con determinati numero di copie, nome del file, stampa tutto/selezione che variano a seconda di quale foglio di calcolo della cartella di lavoro desidera stampare e con quale "Tipo_Stampa" (che egli determina tramite apposite finestre di dialogo che gli propongo, ma questo è altro codice che non riguarda il problema in esame). Ora vorrei dargli la possibilità di cambiare alcune opzioni (p.e. e principalmente il nr. di copie e la possiblità di scegliere la stampante fisica), ma obbligandolo in questo caso a passare per l'anteprima. Problema apparentemente elementare ma soluzione che appare complicata 😊
Se vuoi consentire all'utente di selezionare il foglio da stampare, il numero di copie e la stampante, perché non creare una Userform, restringendo ciascuna di queste opzioni come desideri e quindi chiamare la Userform dall'evento BeforePrint? In questo caso, la maggior parte del codice nella procedura BeforePrint verrebbe gestita da Userform. In ogni caso non vedo che rilevanza abbia l'Anteprima in quanto l'utente può fare le sue scelte senza ricorrere all'anteprima e, soprattutto, chiamando le'anteprima non lancerà l'evento BeforePrint; ciò avverrà solo quando viene selezionata l'istruzione di stampa.
Se ritieni che la cosa diventi troppo complicata/dispendiosa in termini di tempo per creare la pseudo-procedura, lascia perdere, metterò in pratica il sistema dei 2 pulsanti per i due tipi di stampa. In quel caso vanno creati sulla macchina dell'utente, vero? Non si salvano nel file, credo.
Penso che entrambe le opzioni siano possibili, ma personalmente preferirei la terza opzione della Userform in quanto, a mio avviso, offre maggiore flessibilità e controllo.
===
Regards,
Norman