› Sviluppare funzionalita su Microsoft Office con VBA › PrintOut
-
AutoreArticoli
-
Ciao a tutti sto usando il comando PrintOut per aprire la finestra di stampa, funziona benissimo ma solo se vado a stampare il foglio.
Se premo annulla invece di stampa mi va in errore.
Allego la parte di codice utilizzata
MsgBox "Dati copiati", vbInformation, " Copia dati" Application.Dialogs(xlDialogPrint).Show Worksheets("MASCHERA RICERCA").Select Range("A1").SelectPer fare un controllo accurato c'e' bisogno del file con tutto il codice.
Infatti a me una volta aperta la finestra di dialogo e premo annulla, si chiude regolarmente senza errore, ma non e' una prova attendibile in quanto lo scenario non e' il tuo.
Ok scusami pensavo bastasse questo, allego il file.
Grazie mille
P.s. utilizzo un Mac
Allegati:
You must be logged in to view attached files.Mi spiace non posso replicare il tuo scenario in quanto non uso Mac.
Ciao @Ale.1989
anche io non ho il MAC. Prova a fare un test sostituendo il tuo codice che questo:
MsgBox "Dati copiati", vbInformation, " Copia dati" Dim risposta As Boolean risposta = Application.Dialogs(xlDialogPrint).Show If risposta Then Worksheets("MASCHERA RICERCA").Select Range("A1").Select Else MsgBox "Operazione annullata", vbInformation, "Annulla stampa" End If Set wsMR = Nothing Set wsST = Nothing End SubCiao Alex, ho provato la sostituzione del codice ma viene fuori sempre debug, controllando ho visto che la riga evidenziata è la seguente, ma le che vada la tengo così.
Grazie per il momento
risposta = Application.Dialogs(xlDialogPrint).ShowProviamo ad inserire la gestione degli errori.
Prova questo codice:
MsgBox "Dati copiati", vbInformation, "Copia dati" On Error GoTo ErrorHandler Application.Dialogs(xlDialogPrint).Show Worksheets("MASCHERA RICERCA").Select Range("A1").Select ErrorExit: Set wsMR = Nothing Set wsST = Nothing Exit Sub ErrorHandler: If Err.Number <> 0 Then MsgBox "Operazione annullata dall'utente.", vbInformation Err.Clear Resume ErrorExit End If End SubL'ho scritto con li Smartphone...spero di non aver commesso errori.
ma viene fuori sempre debug
Ma e' strano, quale errore ricevi?
Perche' premere Annulla dopo uno Show restituisce sempre False, a quanto mi risulta.
Si al momento se premo annulla nella finestra di dialogo stampa
esce il debug, domani provo con il codice di alex e poi vi aggiorno …
grazie delle risposte
Ciao ragazzi, Alex anche con il nuovo codice non funziona, in particolare esce il seguente messaggio.
errore di runtime 1004
metodo show dell'oggetto "dialog" non riuscito
Ciao Alex,
se mi consenti suggerirei una modifica alla "logica" con cui gestisci il flusso del codice:
Prova questo codice:
On Error GoTo ErrorHandler Application.Dialogs(xlDialogPrint).Show Worksheets("MASCHERA RICERCA").Select Range("A1").Select ErrorExit: Set wsMR = Nothing Set wsST = Nothing Exit Sub ErrorHandler: If Err.Number <> 0 Then MsgBox "Operazione annullata dall'utente.", vbInformation Err.Clear Resume ErrorExit End If End Subnon trovi che sia poco "lineare"? E' come se per andare da Milano a Verona facessi Milano (Verona) - Venezia - Verona.
Non è più semplice e leggibile:
On Error GoTo ErrorHandler Application.Dialogs(xlDialogPrint).Show Worksheets("MASCHERA RICERCA").Select Range("A1").Select ErrorHandler: If Err.Number <> 0 Then MsgBox "Operazione annullata dall'utente.", vbInformation Err.Clear End If End Subsenza "salti avanti" e "rimbalzi indietro" ?
Ciao, ho inserito il tuo codice e funziona perfettamente, ho aggiunto solo una riga per tornare al foglio principale in caso di annullamento operazione.
Grazie mille a tutti per il tempo dedicato
se mi consenti
Caro tu puoi tutto
Avevo pensato a questo Avanti/Dietro perché ci sono queste 2 variabili:
Set wsMR = Nothing Set wsST = Nothingda liberare dalla memoria.
Quindi se l'esecuzione del codice non crea problemi allora le 2 variabili si cancellano senza problemi. Se invece c'è l'errore allora ci vuole il ritorno a ErrorExit:
Comunque la cosa strana che non mi spiego è perché adesso la procedura funziona?! Non è che è cambiato tanto rispetto alla mia. Boh...
Avevo pensato a questo Avanti/Dietro perché ci sono queste 2 variabili:
Set wsMR = Nothing Set wsST = Nothingda liberare dalla memoria.
scusami, nell'editare il post mi sono rimaste quelle due istruzioni nella tastiera
, era da intendersi: On Error GoTo ErrorHandler Application.Dialogs(xlDialogPrint).Show Worksheets("MASCHERA RICERCA").Select Range("A1").Select ErrorHandler: If Err.Number <> 0 Then MsgBox "Operazione annullata dall'utente.", vbInformation Err.Clear End If Set wsMR = Nothing Set wsST = Nothing End SubMannaggia Ale, era la mia occasione per riprendere scossa, per una volta, su una cosa che gli era sfuggita
pazienza
Peccato che mi collego sempre tardi
pero' rimango sempre perplesso sul fatto che non si riesca ad ottenere False quando si preme Annulla sulla Dialog in questione, senza quindi bisogno di intercettare errori.
Mannaggia Ale, era la mia occasione per riprendere scossa
Ahahahah...come si fa a riprendere @scossa?? Non si può!
Comunque resta il fatto che non ho capito perché adesso la routine funziona e prima no pur restando simile. Pazienza...
Buongiorno a tutti volevo solo fare una domanda
Sono anni che sto utilizzando questa macro è sempre andata benissimo , ma solo che se apro l'anteprima e la chiudo . mi scompare la schermata di diaologo stampa invece dovrebbe rimanere
IL messaggio di stampa annullata non mi interessa anzi meglio se non c'è
O forse con Excel non è possibile
Grazie a chiunque risponda
Private Sub CommandButton1_Click() Stampa = Application.Dialogs(xlDialogPrint).Show If Stampa = True Then Foglio1.Select Range("A1").Select Else MsgBox "Operazione annullata", vbInformation End If End Subpero' rimango sempre perplesso sul fatto che non si riesca ad ottenere False quando si preme Annulla sulla Dialog in questione, senza quindi bisogno di intercettare errori.
Ma non è che invece restituisca Null??
Ho trovato questi 2 link:
https://learn.microsoft.com/it-it/office/vba/api/excel.application.dialogs
https://learn.microsoft.com/it-it/office/vba/api/excel.dialogs
Dove si evince che Application.Dialogs ha la possibilità di aprire diverse finestre di dialogo tramite i vari parametri dentro le parentesi, restituendo una collezione di oggetti. Detto questo, non parla né di False e né di Null ma presuppongo sia più inerente il Null 🤔
Ciao Luca
E cosa te ne fai del (Application.Dialogs(xlDialogOpen).Show ) se devo aprire il dialogo di stampa
Ciao Luca
E cosa te ne fai del (Application.Dialogs(xlDialogOpen).Show ) se devo aprire il dialogo di stampa
??? 🤔
Ciao Luca
E cosa te ne fai del (Application.Dialogs(xlDialogOpen).Show ) se devo aprire il dialogo di stampa
Apro il dialogo di stampa visualizzo l'anteprima , chiudo l'anteprima la maschera di dialogo si chiude anche lei , ma mi deve rimanere aperta
Io continuo a non capire cosa tu voglia dire 🤷🏽♂️
Io sto partendo del valore restituito dopo aver aperto un qualsiasi Dialogs. Ho letto che non si sia riuscito ad intercettare il valore False dopo aver cliccato su Annulla ed ho presupposto che sia perché questo restituisca Null.
Ma non è che invece restituisca Null??
Se in una finestra Immediata chiedo
? Application.Dialogs(xlDialogOpen).Showe poi clicco su Annulla, ottengo
Falso.In realta' quindi ottengo "Falso" che non e' proprio uguale a False.
Ma questo test dice che secondo lui sono equivalenti:
Sub test() Dim v As Variant v = Application.Dialogs(xlDialogOpen).Show Debug.Print v If v Then Debug.Print "ok" If v = False Then Debug.Print "ok ok" If v = "Falso" Then Debug.Print "ok ok ok" Debug.Print VarType(v) End Sube il controllo sul tipo di variabile che il tipo di v e' 11 cioe' booleano. Quindi e' proprio False, non Null.
Ma non è che invece restituisca Null??
no, il metodo Application.Dialogs(xlDialogOpen).Show, se non si seleziona la voce OK restituisce False.
Comunque nemmeno io ho capito cosa vuole fare Oscar: se seleziona Anteprima, poi per stampare deve selezionare, nella finestra dell'anteprima la voce Stampa, che senso ha riaprire la finestra di dialogo?
Ma se proprio vuole:
Sub test() Dim vRet As Variant vRet = Application.Dialogs(xlDialogPrint).Show If vRet = True Then Foglio1.Select '?? Range("A1").Select '?? Else vRet = stampa.Show End If End Subgiusto per far capire che la cosa non ha gran senso.
-
AutoreArticoli
