Sviluppare funzionalita su Microsoft Office con VBA Printer dialog non visibile

LoginRegistrati
Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
  • Autore
    Articoli
  • #21719 Risposta

    roberto21
    Partecipante
      2 pts

      Il codice riportato serve a fare un merge della lettera con i valori di un record excel e stampare la lettera sulla stampante di dafault. E il codice funziona. 

      La variante del codice riportata sotto dovrebbe invece presentare all'utente il dialogo per consentire di scegliere un'altra stampante per stampare la medesima lettera. Sono arrivato a questo codice dopo alcuni tentativi, e non sono sicuro sia logico o corretto, ma funziona: con un grave problema. Il dialogo per la scelta della stampante rimane sepolto sotto la finestra di excel contenente la form in cui viene fatta la richiesta di stampa, per cui la procedura si ferma aspettando l'input dell'utente. Questo l'ho scoperto per caso, ma non è elegante aspettarsi che l'utente ogni volta vada a pescarsi il dialogo nascosto. 

      Assumo che il dialogo venga fuori sul file di word che deve essere stampato, e infatti così sembra: cliccando l'iconcina di word nella barra delle applicazioni, ecco che emerge il file e il dialogo. Non sono riuscito a far comparire il dialogo sopra le altre finestre direttamente da programma. Qualcuno ha qualche idea? Grazie

      With WordApp
          .ActiveDocument.MailMerge.OpenDataSource Name:=filepath & "\" & ThisWorkbook.Name, _
              ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
              AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
              WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
              Format:=wdOpenFormatAuto, _
              SQLStatement:="SELECT * FROM rangesoci WHERE [Numero Tessera] =" & numerotessera, SQLStatement1:="", _
              SubType:=wdMergeSubTypeAccess
          With .ActiveDocument.MailMerge
              .Destination = wdSendToPrinter
              .SuppressBlankLines = True
                            
              With .DataSource
                  .FirstRecord = wdDefaultFirstRecord
                  .LastRecord = wdDefaultLastRecord
              End With
              .Execute Pause:=False
          End With
                     
      End With
      
      
      *************************************************************************************
      
      With WordApp
          .ActiveDocument.MailMerge.OpenDataSource Name:=filepath & "\" & ThisWorkbook.Name, _
              ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
              AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
              WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
              Format:=wdOpenFormatAuto, _
              SQLStatement:="SELECT * FROM rangesoci WHERE [Numero Tessera] =" & numerotessera, SQLStatement1:="", _
              SubType:=wdMergeSubTypeAccess
          With .ActiveDocument.MailMerge
              .Destination = wdSendToNewDocument
              .SuppressBlankLines = True
                            
              With .DataSource
                  .FirstRecord = wdDefaultFirstRecord
                  .LastRecord = wdDefaultLastRecord
              End With
              .Execute Pause:=False
          End With
          Set WDoc = ActiveDocument
              'Show the Print dialog box
          Dialogs(wdDialogFilePrint).Show
          WDoc.Close 0
                 
      End With

       

       

      #21720 Risposta
      Marius44
      Marius44
      Moderatore
      • Sfida #4
        12 pts

        Ciao

        Credo non si stia parlando di VBA (anzi ne sono sicuro).

        L'unica cosa che mi sento di consigliarti è di inserire nel codice di richiesta di stampa (visto che, come dici, "rimane sepolto sotto la finestra di excel contenente la form") di minimizzare la form e riportarla a grandezza max dopo la stampa.

         

        Ciao,

        Mario

        #21728 Risposta

        roberto21
        Partecipante
          2 pts

          Grazie della risposta, anche se non sono sicuro di aver capito perchè il codice non sembra VBA. ERo convinto lo fosse. 

          Ho una novità. Con la modifica qui riportata, ho fatto riemergere word e dialogo. 

          With WordApp
              .Visible = True
              Set WordDoc = .Documents.Open(filepath & "\LetteraNuoviSoci.docx")
          End With
          
          'MailMerge selected records from table to Word document
          With WordApp
              .ActiveDocument.MailMerge.OpenDataSource Name:=filepath & "\" & ThisWorkbook.Name, _
                  ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
                  AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
                  WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
                  Format:=wdOpenFormatAuto, _
                  SQLStatement:="SELECT * FROM rangesoci WHERE [Numero Tessera] =" & numerotessera, SQLStatement1:="", _
                  SubType:=wdMergeSubTypeAccess
              With .ActiveDocument.MailMerge
                  .Destination = wdSendToNewDocument
                  .SuppressBlankLines = True
                                
                  With .DataSource
                      .FirstRecord = wdDefaultFirstRecord
                      .LastRecord = wdDefaultLastRecord
                  End With
                  'Set WDoc = ActiveDocument
                  .Execute Pause:=False
                  'Show the Print dialog box
                  Dialogs(wdDialogFilePrint).Show
                 ' WDoc.Close SaveChanges:=False
                  WordDoc.Close SaveChanges:=False
                  ActiveDocument.Close SaveChanges:=False
              End With
              
                     
          End With
          Application.DisplayAlerts = False
          'WordDoc.Close SaveChanges:=False
          WordApp.Quit
          Application.DisplayAlerts = True

          In pratica, prima ho spostato set WDoc prima di .execute, poi ho tolto  completamente WDOC dalla procedura. Ora succede che attivando la stampa, word apre il documento con i segnaposti del merge, poi quello riempito con i campi giusti e appare il print dialog.

          I due close senza salvare sembrano necessari: il primo chiude il documento word merged originale (WordDoc??) , mentre il secondo chiude il Newdocument (WDSendToNewDocument) della .destination.

          Sembra tutto a posto, se non che la cosa mi lascia ancora qualche dubbio,. E' necessario il gioco fra wordDoc e newDocument? Ed è possibile evitare che word visualizzi i file mentre esegue il merge?

        LoginRegistrati
        Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
        Rispondi a: Printer dialog non visibile
        Gli allegati sono permessi solo ad utenti REGISTRATI
        Le tue informazioni:



        vecchio frac - 2750 risposte

        albatros54
        albatros54 - 791 risposte

        patel
        patel - 689 risposte

        Marius44
        Marius44 - 592 risposte

        Luca73
        Luca73 - 553 risposte