Impedire Stampa



  • Impedire Stampa
    di gabriele (utente non iscritto) data: 17/07/2017 16:24:12

    Un saluto a tutto il forum,
    ho una cartella di lavoro con più fogli di lavoro, ma con una macro stampo solo alcuni di essi e qui tutto bene.
    Siccome è un file usato da molti utenti, alcuni procedono alla stampa da File , Stampa o dall'icona presente nella Barra strumenti stampando fogli inutili. E' possibile impedire ciò.
    Grazie



  • di Friedrich data: 17/07/2017 18:49:33

    Ciao Gabriele,
    inserisci nel modulo Questa cartella di lavoro il seguente codice:
     
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel = True
    MsgBox "La stampa di questo file non è consentita.", vbCritical, "Attenzione!"
    End Sub



  • di Vecchio Frac data: 17/07/2017 19:22:02

    Io volevo sapere se Gabriele intende inibire la stampa dell'intero Workbook o solo di alcuni fogli determinati.
    Nel primo caso il codice proposto da Friedrich va bene come esempio (con tutte le limitazioni che il Msgbox ha).





  • di Gabriele (utente non iscritto) data: 18/07/2017 02:09:59

    Io vorrei che tutti stampassero usando la sola macro che si attiva da pulsante.



  • di Vecchio Frac data: 18/07/2017 09:36:15

    Sì, ma vuoi stampare tutti i fogli, solo il foglio corrente, un altro foglio diverso, solo un range da ... a ... e di quale foglio?
    Inoltre: il pulsante è un ActiveX, un controllo modulo o si trova su un userform? La differenza è significativa.

    Insomma, per favore non siate avari di spiegazioni e dettagli e non fatevi tirare fuori le informazioni con le tenaglie :)





  • di alfrimpa data: 18/07/2017 09:52:37

    Ciao Vecchio Frac

    A prescindere dalle tue giustissime domande io penso che Gabriele voglia disabilitare il pulsante Stampa del Ribbon e farla fare solo con il pulsante dedicato.

    Almeno così ho capito.

    Alfredo





  • di Gabriele (utente non iscritto) data: 18/07/2017 10:26:52

    Ciao
    alfrimpa ha centrato il punto
    Ho un pulsante( icona di una stampante) che attiva macro inserita in un modulo

     
    Sub Macro3()
    
    Application.ScreenUpdating = False
    Stampa = MsgBox("Vuoi proseguire ?", vbYesNo)
    If Stampa = vbNo Then
    MsgBox "Ciao !!!"
    Exit Sub
    Else
    Sheets(Array("Foglio1", "Foglio2")).Select
    Sheets("Foglio1").Activate
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    End If
    Application.ScreenUpdating = True
    End Sub
    
    



  • di Vecchio Frac data: 18/07/2017 10:34:47

    Bene, ma per quello cui stavo pensando di fare è importante distinguere tra pulsante controllo modulo (il cui riferimento può essere pescato con Application.Caller) e pulsante ActiveX (che può essere individuato con una variabile oggetto dichiarata WithEvents). Solo se è stato premuto il pulsante giusto si imposta una variabile di controllo che permette la stampa.
    Quando si intercetta l'evento BeforePrint gli si fa fare quello che si vuole una volta che il semaforo è verde :)

    Altrimenti, altra strada, ma non l'ho ancora seguita: proviamo a vedere se c'è qualche API che disabilita i pulsanti default di stampa e anteprima di stampa.





  • di scossa data: 18/07/2017 10:51:35

    Ciao,

    usa una variabile pubblica di tipo Boolean e la setti a true solo se viene cliccata l'icona.

    Vedi esempio sotto.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    '------------------------------
    ' nel modulo di classe ThisWorkBook (Questa_cartella_di_lavoro)
    '------------------------------
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
      If Not bStampami Then
        Cancel = True
        MsgBox "per stampare cliccare il pulsante 'STAMPAMI'", vbCritical + vbOKOnly, "Errore"
      End If
    End Sub
    
    
    
    '------------------------------
    ' nel modulo standard 
    '------------------------------
    
    Public bStampami As Boolean
    
    Sub Macro3()
      Dim stampa As VbMsgBoxResult
      
      Application.ScreenUpdating = False
      stampa = MsgBox("Vuoi proseguire ?", vbYesNo)
      If stampa = vbNo Then
        MsgBox "Ciao !!!"
      Else
        Sheets(Array("Foglio1", "Foglio2")).Select
        Sheets("Foglio1").Activate
        bStampami = True
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        bStampami = False
      End If
      Application.ScreenUpdating = True
    End Sub
    



  • di Gabriele (utente non iscritto) data: 18/07/2017 11:05:49

    Grazie scossa e a tutto il forum
    Funziona alla grande
    Ciao alla prossima