Excel e gli applicativi Microsoft Office Macro di stampa solo selezionati .

Login Registrati
Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
  • Autore
    Articoli
  • #14684 Score: 0 | Risposta

    gianca53
    Partecipante

      Ciao.

      Ho queste due macro , entrambe perfettamente  funzionanti, però ciascuna fa solo una parte di quello che vorrei , ovvero escludere alcuni fogli, quindi selezionare per la stampa uno o più dei fogli restanti.  La prima macro stampa tutti eccetto alcuni da me esclusi, la seconda stamperebbe anche tra quelli che non vorrei stampare. Ergo il problema sul quale mi scontro è la fusione delle due . Ho fatto dei mix  che però non funzionano .... Se qualcuno  mi dedicasse un attimo di tempo, lo ringrazio da subito.

      `Option Explicit
      Sub stampa_Fogli()
      
          Dim xWs As Worksheet
          Application.ScreenUpdating = False
          For Each xWs In ThisWorkbook.Worksheets
              If xWs.Visible = True Then
                  If xWs.Name <> "leggimi" And xWs.Name <> "Peso" And xWs.Name <> "Tabella_Nutrienti" _
                  And xWs.Name <> "Calcolo_Dieta" And xWs.Name <> "Tab_Alimenti" And xWs.Name <> "Grafico" And xWs.Name <> "Intestazione" Then
                      With xWs.PageSetup
                          .PrintArea = "A1:P35" ' area di stampa
                          .Zoom = 105
                          .LeftMargin = Application.InchesToPoints(0.2)
                          .RightMargin = Application.InchesToPoints(0.2)
                          .TopMargin = Application.InchesToPoints(0.5)
                          .BottomMargin = Application.InchesToPoints(0.5)
                          .HeaderMargin = Application.InchesToPoints(0.3)
                          .FooterMargin = Application.InchesToPoints(0.3)
                          .FitToPagesTall = 1
                          .FitToPagesWide = 1
                          .Orientation = xlLandscape
                          .PaperSize = xlPaperA4
                          .FirstPageNumber = xlAutomatic
                      End With
                      xWs.PrintOut
                  End If
              End If
          Next xWs
          Application.ScreenUpdating = False
      End Sub
      
      ' e questa è la seconda :
      Sub Print_Select_Sheets()
          Dim ListPrint As Variant
          Dim l As Variant
          ListPrint = InputBox("Digita i fogli da stampare separandoli con ;", "Elenco Fogli da Stampare")
          ListPrint = Split(ListPrint, ";")
          With ListPrint
              For Each l In ListPrint
                   Worksheets(l).PrintOut
              Next l
          End With
      End Sub
      `
      #14685 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Ma in pratica com'è che ti aspetti il risultato finale? la seconda variante mi piace, è compatta, potresti nel ciclo For impostare tutto quel che ti serve, margini, area di stampa, impostazioni di stampa in generale relativamente al foglio corrente e poi lanciarlo in stampa. Poi, magari, si può discutere sul fatto che inputbox non è il massimo dell'eleganza o dell'efficienza, però chissà potresti anche mettere su una userform da cui scegliere in una listbox i fogli da stampare. Solo un'idea 🙂

        #14692 Score: 0 | Risposta

        gianca53
        Partecipante

          vecchio frac ha scritto:

          Ma in pratica com'è che ti aspetti il risultato finale? la seconda variante mi piace, è compatta, potresti nel ciclo For impostare tutto quel che ti serve, margini, area di stampa, impostazioni di stampa in generale relativamente al foglio corrente e poi lanciarlo in stampa.

          Il risultato finale che vorrei ottenere è : escludere a priori alcuni fogli, che è inutile stampare ,  selezionare tra quelli restanti  uno o più fogli.  In pratica  integrare le due macro sopra. Per l'input box inizialmente lo lascerei poi vediamo. Ma, date le mie scarse conoscenze di VBa,  la vedo dura . 

          #14709 Score: 0 | Risposta

          gianca53
          Partecipante

            Risolto con un macro trovata su altro forum. 

            Grazie comunque per l'interessamento e l'aiuto fornito.   

             

             

            #14716 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              272 pts

              Veramente non avevo neanche capito bene il tuo problema. Avevi già il codice che ti serviva.

              #14721 Score: 0 | Risposta

              gianca53
              Partecipante

                vecchio frac ha scritto:

                 Avevi già il codice che ti serviva.

                Forse, ma non ti è venuto il dubbio che se avessi saputo come "assemblarlo /costruirlo/aggiustarlo" non avrei chiesto aiuto ? Probabilmente hai ragionato con le tue conoscenze, non con le mie . 

                #14779 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  E' vero, hai ragione. Il dubbio però mi è venuto perchè altrimenti non ti avrei chiesto che risultato finale ti aspettavi. Per fortuna hai trovato chi te lo ha assemblato correttamente. 

                  #14785 Score: 0 | Risposta

                  gianca53
                  Partecipante

                    No, ho proprio cambiato macro  utilizzando una userform, come da te consigliato. 

                     Su quelle due sopra  sto ancora cercando di capire dove sbaglio, ma prima o poi ... 

                    #14807 Score: 0 | Risposta

                    gianluca

                      per come lavoro io avrei preferito la tua soluzione, ossia quella di avere due o più macro che svolgono parti del lavoro.

                       

                      solitamente poi le concateno (se mi serve) in una terza molto "scarna" mediante funzioni di call

                      #14822 Score: 0 | Risposta

                      gianca53
                      Partecipante

                        Ok, ho capito il tuo ragionamento, ma io sono partito da un altro approccio ovvero stampare una selezione di fogli,  quindi fatta dall' utente, escludendone a priori alcuni. Tieni conto che  uno dei fogli esclusi  contiene circa  1000 righe ( il database) che è  inutile mandare in stampa .  

                        #14835 Score: 0 | Risposta

                        gianca53
                        Partecipante

                          Niente da fare, c'è un errore che non riesco a capire e quindi a superare !!!

                          Anche questa macro, diversamente costruita sulla base delle due precedenti,  permette la selezione dei fogli ma alla fine stampa anche i fogli esclusi.    Per chi volesse fornire indicazioni : un caffè, anche corretto,  è metaforicamente offerto .  allego anche file semplificato per Vs prove.

                          `Sub FogliEscludi()
                              Dim LP As Variant  ' secondo me il pasticcio è in queste definizioni , ad esempio se ws diventa 
                                                  Worksheet  la macro si inchioda .
                              Dim l As Variant
                              Dim ws As Variant
                              On Error Resume Next
                              Application.ScreenUpdating = False
                               
                                  LP = InputBox("Digita i fogli da stampare separandoli con ;", "Elenco Fogli da Stampare")
                                  LP = Split(LP, ";")
                              
                                  With LP
                                      For Each ws In LP
                                         
                                           With ws.PageSetup
                                              .PrintArea = "A1:P35" ' area di stampa
                                              .Zoom = 105
                                              .LeftMargin = Application.InchesToPoints(0.2)
                                              .RightMargin = Application.InchesToPoints(0.2)
                                              .TopMargin = Application.InchesToPoints(0.5)
                                              .BottomMargin = Application.InchesToPoints(0.5)
                                              .HeaderMargin = Application.InchesToPoints(0.3)
                                              .FooterMargin = Application.InchesToPoints(0.3)
                                              .FitToPagesTall = 1
                                              .FitToPagesWide = 1
                                              .Orientation = xlLandscape
                                              .PaperSize = xlPaperA4
                                              .FirstPageNumber = xlAutomatic
                                          End With
                                          
                                          If ((ws.Visible = xlSheetVisible) And _
                                  (ws.Name <> "Peso" And ws.Name <> "Tabella")) Then
                                              If LP = ws Then     '<<< qui la logica sarebbe: se i fogli in LP sono 
                                                                            uguali a ws, ovvero tra i NON esclusi, la macro va 
                                                                         avanti e stampa altrimenti se  <> esce dal ciclo .
                                              Worksheets(ws).PrintOut
                                              MsgBox ("Inviato alla stampa")
                                              ElseIf ws <> LP Then Exit For
                                              End If
                                          End If
                                      Next ws
                                  End With
                              
                          
                              Application.ScreenUpdating = True
                          
                          End Sub
                          
                          
                          `
                          Allegati:
                          You must be logged in to view attached files.
                          #14843 Score: 0 | Risposta

                          gianca53
                          Partecipante

                            Aggiungo nuovamente ,senza password !

                            Allegati:
                            You must be logged in to view attached files.
                            #14845 Score: 0 | Risposta

                            Marius44
                            Moderatore
                              58 pts

                              Ciao

                              Prova con la seguente macro (che dovrai poi adattare alle tue esigenze)

                              Sub StampaRichiesti()
                              Dim FG As String
                              Dim FS() As String
                              Dim i As Long
                              FG = InputBox("Digita i fogli da stampare separandoli con ;", "Elenco Fogli da Stampare")
                              FS = Split(FG, ";")
                              
                              For i = 0 To UBound(FS)
                                With Sheets(FS(i))
                                  With .PageSetup
                                    .PrintArea = "A1:P35" ' area di stampa
                                    .Zoom = 105
                                    .LeftMargin = Application.InchesToPoints(0.2)
                                    .RightMargin = Application.InchesToPoints(0.2)
                                    .TopMargin = Application.InchesToPoints(0.5)
                                    .BottomMargin = Application.InchesToPoints(0.5)
                                    .HeaderMargin = Application.InchesToPoints(0.3)
                                    .FooterMargin = Application.InchesToPoints(0.3)
                                    .FitToPagesTall = 1
                                    .FitToPagesWide = 1
                                    .Orientation = xlLandscape
                                    .PaperSize = xlPaperA4
                                    .FirstPageNumber = xlAutomatic
                                  End With
                                End With
                              Next i
                              End Sub

                              Fai sapere. Ciao,

                              Mario

                              #14860 Score: 0 | Risposta

                              gianca53
                              Partecipante

                                Grazie Marius,     funziona perfettamente ma ne manca un pezzo, ovvero l'esclusione di taluni fogli.  considerala come una forma  aggiuntiva  contro stampe inutili  che non voglio lasciare all'utente . 

                                Ho tentato di modificarla   aggiungendo un if ma si blocca con errore 438 sulla riga qui sotto evidenziata . 

                                `Sub StampaRichiesti()
                                    'by Marius  https://www.excelvba.it/forumexcel/forums/discussione/macro-di-stampa-solo-selezionati/#post-14845
                                    Dim FG As String
                                    Dim FS() As String
                                    Dim i As Long
                                
                                    FG = InputBox("Digita i fogli da stampare separandoli con ;", "Elenco Fogli da Stampare")
                                    FS = Split(FG, ";")
                                
                                    For i = 0 To UBound(FS)
                                        With Sheets(FS(i))
                                
                                             If Sheets(FS(i)) <> Sheets("Tabella") And Sheets(FS(i)) <> Sheets("Peso") And Sheets(FS(i)) <> Sheets("Grafico") Then  '<< errore 438 proprietà o metodo non supportati
                                               
                                 With .PageSetup
                                                .PrintArea = "A1:P35" ' area di stampa
                                                .Zoom = 105
                                                .LeftMargin = Application.InchesToPoints(0.2)
                                                .RightMargin = Application.InchesToPoints(0.2)
                                                .TopMargin = Application.InchesToPoints(0.5)
                                                .BottomMargin = Application.InchesToPoints(0.5)
                                                .HeaderMargin = Application.InchesToPoints(0.3)
                                                .FooterMargin = Application.InchesToPoints(0.3)
                                                .FitToPagesTall = 1
                                                .FitToPagesWide = 1
                                                .Orientation = xlLandscape
                                                .PaperSize = xlPaperA4
                                                .FirstPageNumber = xlAutomatic
                                            End With
                                                Sheets(FS(i)).PrintOut
                                            
                                            Else
                                                MsgBox " Scelta NON ammessa per la stampa!"
                                                Exit For
                                            
                                            End If
                                     End With
                                        
                                    Next i
                                
                                End Sub
                                `
                                #14882 Score: 0 | Risposta

                                gianca53
                                Partecipante

                                  alla fine , giusto per non lasciare le cose a metà, grazie a Marius , sono riuscito nel mio intento.   Non sarà un esempio di eleganza però funziona. Ecco il codice : 

                                  Option Explicit
                                  
                                  Sub StampaRichiesti2F()
                                      'by Marius  https://www.excelvba.it/forumexcel/forums/discussione/macro-di-stampa-solo-selezionati/#post-14845
                                      Dim FG As String
                                      Dim FS() As String
                                      Dim i As Long
                                  
                                      FG = InputBox("Digita i fogli da stampare separandoli con ;", "Elenco Fogli da Stampare")
                                      FS = Split(FG, ";")
                                  
                                      If (FS(i)) <> ("Tabella") And (FS(i)) <> ("Peso") And (FS(i)) <> ("Grafico") Then  
                                            Else
                                            MsgBox " Scelta NON ammessa per la stampa!"
                                           Exit Sub
                                           End If
                                      
                                     For i = 0 To UBound(FS)
                                                  With Sheets(FS(i))
                                                                               
                                                  With .PageSetup
                                                  .PrintArea = "A1:P35" ' area di stampa
                                                  .Zoom = 105
                                                  .LeftMargin = Application.InchesToPoints(0.2)
                                                  .RightMargin = Application.InchesToPoints(0.2)
                                                  .TopMargin = Application.InchesToPoints(0.5)
                                                  .BottomMargin = Application.InchesToPoints(0.5)
                                                  .HeaderMargin = Application.InchesToPoints(0.3)
                                                  .FooterMargin = Application.InchesToPoints(0.3)
                                                  .FitToPagesTall = 1
                                                  .FitToPagesWide = 1
                                                  .Orientation = xlLandscape
                                                  .PaperSize = xlPaperA4
                                                  .FirstPageNumber = xlAutomatic
                                                  End With
                                                   Sheets(FS(i)).PrintOut
                                                End With
                                                
                                      Next i
                                  
                                  End Sub
                                  
                                  
                                  

                                  Grazie a tutti per l'aiuto.

                                  #14883 Score: 0 | Risposta

                                  Marius44
                                  Moderatore
                                    58 pts

                                    Vedo solo adesso perchè sono stato impegnato.

                                    Ottimo lavoro. Complimenti!

                                    Grazie per il riscontro.

                                    Ciao,

                                    Mario

                                    #14884 Score: 0 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      272 pts

                                      Non mi sono inserito perchè Supermario ha gestito benissimo la discussione, per precisione vorrei raccomandare di stare attento quando si effettua il confronto su stringhe di testo, per esempio qui:

                                      If (FS(i)) <> ("Tabella")

                                      se per malaugurato caso si cambia nome al foglio e lo si scrive come "tabella" oppure se scappa uno spazio ("Tabella "), il confronto fallisce... meglio essere cauti e in questi casi scrivere qualcosa come:

                                      If (LCase(Trim(FS(i))) <> "tabella") And (LCase(Trim(...

                                      In questo caso specifico poi potrebbe essere utile costruirsi una funzioncina per cercare una stringa in una sottostringa (magari con InStr). Anzi, ecco l'idea per la prossima Sfidettina a cui tutti sono invitati a partecipare    (non trovo lo smile che ride fino alle lacrime!)

                                      #14887 Score: 0 | Risposta

                                      gianca53
                                      Partecipante

                                        non so quale sia lo smile  di "fortemente imbarazzato " ma immaginatelo qui. Avevo notato che se nell'input box scrivevo "peso" invece di "Peso"  la macro mandava comunque in stampa il foglio. Il problema  è che non sapevo come intervenire o meglio non conoscevo la forma esatta .

                                        Grazie .  

                                         

                                        Per la "funzioncina" aspetto la vs prossima sfida, ora come ora manco ci provo. 

                                        p.p.s  Però mi sta dando qualche soddisfazione anche Option  Compare Text 

                                        #14888 Score: 0 | Risposta

                                        vecchio frac
                                        Senior Moderator
                                          272 pts

                                          gianca53 ha scritto:

                                          mi sta dando qualche soddisfazione anche Option  Compare Text

                                          ottima filosofia, nella vita bisogna assaporare le piccole cose che danno grandi soddisfazioni 🙂

                                        Login Registrati
                                        Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
                                        Rispondi a: Macro di stampa solo selezionati .
                                        Gli allegati sono permessi solo ad utenti REGISTRATI
                                        Le tue informazioni: