Stampa file su stampante diversa dalla predefinita

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Stampa file su stampante diversa dalla predefinita

    Vi richiedo ancora un aiuto, per favore,

    vorrei stampare il pdf impostando la stampante in landscape, ma tra le varie guide su internet non ho trovato nulla, mi potreste aiutare?

    grazie

    
    Dim strDefaultPrinter As String
    
    strDefaultPrinter = Application.Printer.DeviceName   '***prendo la stampante predefinita e la memorizzo
    
    On Error GoTo Handler_uno   '***se in errore non far nulla e non stampare perchè non c'è la stampante installata della constante
    
    CreateObject("WScript.Network").SetDefaultPrinter const_stampante_dove_stampare
            
    ShellDocument "C:\ASILO_NIDO\RIEPILOGHI\" & "Riepilogo_per_bambino_Giugno_2019.pdf", "Print", , , START_HIDDEN  'stampa documento
    Sleep 1000 'ritardo in Millosecondi quindi 1s
    CreateObject("WScript.Network").SetDefaultPrinter strDefaultPrinter   'reimposto la predefinita
            
    Handler_uno:
    
  • Re: Stampa file su stampante diversa dalla predefinita

    Detto molto sinceramente credo possa essere oltre la tua portata, se quanto ti ho esposto sopra non ti è stato di aiuto.

    In ogni caso, in questo LINK il codice è completo per fare qualsiasi impostazione sulla stampante... è codice complesso e proverai in autonomia a fare test, debug e quanto serve per fare quello che devi ottenere:
    http://www.lessanvaezi.com/changing-printer-settings-using-the-windows-api/
  • Re: Stampa file su stampante diversa dalla predefinita

    Seguendo il consiglio di Alex ho lasciato perdere e mi apro il report gestendo la stampa con Printout, ho però questo problema:
           
           
           Dim strDefaultPrinter As String
    
    	strDefaultPrinter = Application.Printer.DeviceName   '**registro la stampante predefinita sulla variabile
    	
            '***manda in stampa il primo report
            On Error GoTo Handler_uno   '***se in errore non far nulla perchè non c'è la stampante installata
            CreateObject("WScript.Network").SetDefaultPrinter const_stampante_dove_stampare
            DoCmd.OpenReport "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5", acViewDesign, , , acHidden
    
            DoCmd.SelectObject acReport, "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5"
            Reports![r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5]!etk_def.Visible = True
    
            DoCmd.PrintOut
    
            DoCmd.Close acReport, "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5", acSaveNo
    
            CreateObject("WScript.Network").SetDefaultPrinter strDefaultPrinter   'reimposto la predefinita
          
    Handler_uno:
            CreateObject("WScript.Network").SetDefaultPrinter strDefaultPrinter   'reimposto la predefinita
            
            
            '***manda in stampa il secondo report
            
            On Error GoTo Handler_due   '***se in errore non far nulla perchè non c'è la stampante installata
            CreateObject("WScript.Network").SetDefaultPrinter const_stampante_dove_stampare               '********qui ho l'errore
            DoCmd.OpenReport "r_q_Presenze_non_fatturate_raggruppata_senza_N_EDU_A5", acViewDesign, , , acHidden
    
            DoCmd.SelectObject acReport, "r_q_Presenze_non_fatturate_raggruppata_senza_N_EDU_A5"
            Reports![r_q_Presenze_non_fatturate_raggruppata_senza_N_EDU_A5]!etk_def.Visible = True
    
            DoCmd.PrintOut
    
            DoCmd.Close acReport, "r_q_Presenze_non_fatturate_raggruppata_senza_N_EDU_A5", acSaveNo
    
            CreateObject("WScript.Network").SetDefaultPrinter strDefaultPrinter   'reimposto la predefinita
          
    Handler_due:
            CreateObject("WScript.Network").SetDefaultPrinter strDefaultPrinter   'reimposto la predefinita
            
    
    in un modulo ho una costante const_stampante_dove_stampare dove è registrato il nome della stampante su cui voglio stampare
    all'inizio mi registro in una variabile la stampante predefinita
    se c'è un errore (quindi non trova la stampante della costante) vai all'Handler_xxx

    ho un errore sulla linea

    CreateObject("WScript.Network").SetDefaultPrinter const_stampante_dove_stampare '********qui ho l'errore

    errore run time 440 nessuna stampante con nome .....

    ma non dovrebbe andare all'Handler_due in caso di errore? il primo step (quello riferito al primo report) lo passa tranquillamente
  • Re: Stampa file su stampante diversa dalla predefinita

    Faccio fatica perchè a mio avviso hai una dose di confusione in testa che è elevata.
    Se usi i Report di ACCESS non serve usare WSH... basta usare l'oggetto PRINTER di Access, come ti ho detto sopra.
    Con la collection Printers puoi anche rilevare la presenza della TUA stampante e renderla attiva solo per la stampa senza modificare la DEFUALT...!

    Insomma fatti un minimo di chiarezza, ma cerca di capire quello che stai facendo altrimenti continui a fare solo della confusione.
  • Re: Stampa file su stampante diversa dalla predefinita

    Consiglio accettato, grazie Alex, metterò il controllo della stampante sull'evento Load della form di apertura
    Dim var_stampante_predefinita As String
    Dim var_stampanti As Printer
    Dim var_check_stampante As Boolean
    
    var_check_stampante = False
    
    
    var_stampante_predefinita = Activeprinter
    
    Dim var_stampante_dove_stamp As String
    var_stampante_dove_stamp = "\\DTC01\TA261ci_COMMERCIALE"
       
    
    For Each var_stampanti In Application.Printers
        
        If var_stampante_dove_stamp = var_stampanti.DeviceName Then
            var_check_stampante = True
        End If
    Next
    
    If var_check_stampante = True Then   '***se ho trovato
    
        Set Application.Printer = Application.Printers(var_stampante_dove_stamp)
        DoCmd.OpenReport "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5", acViewDesign, , , acHidden
    
        DoCmd.SelectObject acReport, "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5"
        Reports![r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5]!etk_def.Visible = True
    
        DoCmd.PrintOut
    
        DoCmd.Close acReport, "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5", acSaveNo
        
        
    End If
    
  • Re: Stampa file su stampante diversa dalla predefinita

    ocrot ha scritto:


        DoCmd.OpenReport "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5", acViewDesign, , , acHidden
        DoCmd.SelectObject acReport, "r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5"
        Reports![r_q_Presenze_non_fatturate_raggruppata_senza_N_BAMBI_A5]!etk_def.Visible = True
    
    Perché hai bisogno di aprire il reporto in modalità design? è una roba un po' ... orribile! (e che se ci fosse il solo runtime non funzionerebbe)
    Riformulo: perché hai bisogno di rendere visibile il controllo etk_def? (il modo con cui lo fai è orribile, c'è sicuramente una via migliore)
  • Re: Stampa file su stampante diversa dalla predefinita

    PEr controllare se una stampante esiste, come ti avevo detto sopra, ma evidentemente la fretta supera la tecnica... basta passare il NOME alla Collection Printers... non serve CICLARE TUTTO INUTILMENTE.
    
    Function PrinterExist(NomePrinter As String) As Boolean
        On Error Resume Next
        Dim vRes  As Variant
        vRes = Application.Printers(NomePrinter).DeviceName
        PrinterExist = Err = 0
    End Function
    Ovviamente se è una Stampante di Rete o se esiste un PrinterServer, avrà anche il Percorso o IP..."\\NomeServer\NomeStampante"

    Ovviamente concordo con Phil, non si apre MAI nessun Oggetto(Form/Report) in modalità acDesign...! MAI.

    L'oggetto PRINTER, è meglio sia quello del Report Specifico...
    
    DoCmd.OpenReport "MioReport", acViewPreview, , , acHidden
    Reports!MioReport.Printer = Application.Printers("NomeDiAltraStampante")
    ....
  • Re: Stampa file su stampante diversa dalla predefinita

    Grazie ancora per i consigli,
    per l'apertura del report chiedo venia, ok quindi per il nuovo consiglio

    per il ciclo avevo messo un exit for appena trovata ok quindi per il nuovo consiglio

    per l'etk_def visibile non è nient'altro che una etichetta con scritto "DEFINITIVO" che mi serve per capire se la stampa che è partita stampi anche la parola DEFINITIVO nel cartaceo

    il report puo' essere lanciato per un controllo preventivo prima della fatturazione
    ma viene anche lanciato in automatico una volta conclusa la fatturazione con l'etichetta "DEFINITIVO" cosi' so riconoscere che quella è l'ultima stampa fatta
    di default non è visibile

    c'è un altro modo per gestire questo?
  • Re: Stampa file su stampante diversa dalla predefinita

    ocrot ha scritto:


    ...
    il report puo' essere lanciato per un controllo preventivo prima della fatturazione
    ma viene anche lanciato in automatico una volta conclusa la fatturazione con l'etichetta "DEFINITIVO" cosi' so riconoscere che quella è l'ultima stampa fatta
    di default non è visibile
    Mi vengono subito in mente 2 vie.
    1) uso di OpenArgs da applicare al comando DoCmd.OpenReport e gestire nell'evento Format della sezione in cui si trova quel controllo la sua visualizzazione.
    2) che va un po' oltre il semplice discorso della stampa: memorizzare da qualche parte (quindi in una tabella) lo stato di "definitivo", ma non saprei in quale tabella o campo visto che non so di cosa si tratta. La visualizzazione dell'etichetta, poi, la gestisci nello stesso evento di prima, con una sorta di codice tipo questo
    Me!etk_def.Visible = campodef
    ipotizzando che campodef sia un campo boolean (vero-falso), oppure potrebbe essere una data: se c'è una data significa che è definitivo altrimenti non lo è
    Me!etk_def.Visible = Not IsNull(campoDef)
    (un campo data/ora senza data è Null)
Devi accedere o registrarti per scrivere nel forum
23 risposte