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

    Buongiorno,

    avrei bisogno di sapere se è possibile poter interagire con 2 listbox da 1 solo commandbutton.

    Mi spiego meglio, avendo un numero elevato di fogli da stampare, ca 30, ho creato una userform con 2 listbox, 15 fogli ciascuna, e selezionando il foglio desiderato lo mando in stampa dal cmdbutton.

    Riesco benissimo a farlo solo con 1 listbox ma con entrambe no, e vorrei utilizzare sempre lo stesse cmdbutton.

    Allego il vba che uso per stampare i fogli della listbox.3

    Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
        Dim i As Integer
        Dim j As Boolean
        Dim a As Integer
        For i = 1 To ActiveWorkbook.Worksheets.Count
        
    Sheets(i).Unprotect Password:="leo2018"
    
    Next i
        For i = 0 To ListBox3.ListCount - 1
        If ListBox3.Selected(i) Then j = True        'verifica se vi sono fogli selezionati
        Next i
        If j = False Then                               'esci se non ve ne sono
            MsgBox "Nessun foglio selezionato"
            Exit Sub
        Else
            For i = 0 To ListBox3.ListCount - 1
                If ListBox3.Selected(i) = True Then     'altrimenti stampa quelli selezionati
                    With Sheets(ListBox3.List(i, 0))
                        .Visible = True                 'serve per gestire i fogli nascosti
               .Shapes.Range(Array("Elaborazione alternativa 1")).Visible = False
    '.Shapes.Range(Array("Freccia a sinistra 3")).Visible = False
                 
    
                  .Range("$g$13:$H$70").AutoFilter Field:=1, Criteria1:="<>"
                        .PrintOut                       'stampa il foglio
                         Application.PrintCommunication = False
         With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        
        
        Application.PrintCommunication = True
        
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftHeader = ""
            .CenterHeader = ""
            .RightHeader = ""
            .LeftFooter = ""
            .CenterFooter = ""
            .RightFooter = ""
            .LeftMargin = Application.InchesToPoints(0)
            .RightMargin = Application.InchesToPoints(0)
            .TopMargin = Application.InchesToPoints(0)
            .BottomMargin = Application.InchesToPoints(0)
            .HeaderMargin = Application.InchesToPoints(0)
            .FooterMargin = Application.InchesToPoints(0)
            .PrintHeadings = False
            .PrintGridlines = False
            .PrintComments = xlPrintNoComments
            .PrintQuality = 600
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlPortrait
            .Draft = False
            .PaperSize = xlPaperA4
            .FirstPageNumber = xlAutomatic
            .Order = xlDownThenOver
            .BlackAndWhite = False
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = 1
            .PrintErrors = xlPrintErrorsDisplayed
            .OddAndEvenPagesHeaderFooter = False
            .DifferentFirstPageHeaderFooter = False
            .ScaleWithDocHeaderFooter = True
            .AlignMarginsHeaderFooter = True
            .EvenPage.LeftHeader.Text = ""
            .EvenPage.CenterHeader.Text = ""
            .EvenPage.RightHeader.Text = ""
            .EvenPage.LeftFooter.Text = ""
            .EvenPage.CenterFooter.Text = ""
            .EvenPage.RightFooter.Text = ""
            .FirstPage.LeftHeader.Text = ""
            .FirstPage.CenterHeader.Text = ""
            .FirstPage.RightHeader.Text = ""
            .FirstPage.LeftFooter.Text = ""
            .FirstPage.CenterFooter.Text = ""
            .FirstPage.RightFooter.Text = ""
            End With
    
    .Shapes.Range(Array("Elaborazione alternativa 1")).Visible = True
                       
        Application.PrintCommunication = True
                        .Visible = False
                    End With
                End If
         '   Next
    '    End If
        
    '.Shapes.Range(Array("Elaborazione alternativa 1")).Visible = True
                       
        Application.PrintCommunication = True
                     '   .Visible = False
                    'End With
               ' End If
            Next
        End If
        
        
        
        
        
        Sheets("Calendario").Select
        Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    
    End Sub
    #30769 Risposta
    patel
    patel
    Moderatore
      44 pts

      allega un file di esempio con 3 fogli per ciascuna listbox

      #30778 Risposta

      La listbox3 come le altre due contengono i nomi dei fogli da stampare e sono contenuti in una sub unica.....

      #30781 Risposta

      Allego il file così forse riesco a farmi capire.

       

      Allegati:
      You must be logged in to view attached files.
      #30792 Risposta
      patel
      patel
      Moderatore
        44 pts

        Peggio di così non potevi incasinare il codice, prova questo esempio che si adatta al file che hai allegato. Non ho dimensionato le variabili, pensaci tu.

        Private Sub UserForm_Initialize()
            nomi1 = "1234"
            nomi3 = "1516171819"
            For Each NomeFoglio In Sheets 
               If InStr(nomi1, NomeFoglio.Name) > 0 Then
                    ListBox1.AddItem NomeFoglio.Name
               End If
               If InStr(nomi3, NomeFoglio.Name) > 0 Then
                    ListBox3.AddItem NomeFoglio.Name
               End If
            Next NomeFoglio
        End Sub
        Private Sub CommandButton1_Click()
            For i = 0 To ListBox1.ListCount - 1
              If ListBox1.Selected(i) Then MsgBox "selezionato foglio " & ListBox1.List(i, 0)
            Next i
            For i = 0 To ListBox3.ListCount - 1
              If ListBox3.Selected(i) Then MsgBox "selezionato foglio " & ListBox3.List(i, 0)
            Next i
        End Sub
            
        Private Sub CommandButton2_Click()
            Unload Me
        End Sub
        
        
        #30804 Risposta

        Ho provato e mi ha dato spunti molto interessanti ma ho dovuto modificarla perché mettendo numeri da 1 a15 in listbox1 e da 16 a 31 in listbox 3 creava liste con numeri ripetuti.

        L'ho riadattato così ma sbaglio qualcosa in stampa perché nn manda in stampa la listbox1 e non capisco perché.

        La listbox 3 va bene.

        Private Sub UserForm_Initialize()
        Dim NomeFoglio As Worksheet
        Dim nomi1 As String
        Dim nomi2 As String
            nomi1 = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"
            nomi2 = "LettTrasm,Registro,All I parte III,All I parte II, Mensile,Dichiarazione,Frontespizio,Mensa obbligatoria"
            
            For Each NomeFoglio In Sheets
               If InStr(nomi1, NomeFoglio.Name) > 0 Then
                    ListBox1.AddItem NomeFoglio.Name
               End If
               If InStr(nomi2, NomeFoglio.Name) > 0 Then
                    ListBox2.AddItem NomeFoglio.Name
               End If
            Next NomeFoglio
        
        Dim ws As Worksheet
        
        For Each ws In Worksheets
        If ws.Visible = xlHidden Then UserFormStampa.ListBox3.AddItem ws.Name
        Next
        
        End Sub
        
        
        
        
        
            Private Sub CommandButton1_Click()
            Unprotect
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Application.EnableEvents = False
            Dim i As Integer
            Dim j As Boolean
            Dim a As Integer
            Dim b As Integer
               
        
        
        
            'For b = 0 To ListBox3.ListCount - 1
            'If ListBox3.Selected(b) Then j = True        'verifica se vi sono fogli selezionati
            'Next b
            'If j = False Then                               'esci se non ve ne sono
             '   MsgBox "Nessun foglio selezionato"
              '  Protect
               ' Exit Sub
            'Else
            'Unprotect
                For b = 0 To ListBox3.ListCount - 1
                    If ListBox3.Selected(b) = True Then     'altrimenti stampa quelli selezionati
                        With Sheets(ListBox3.List(b, 0))
                            .Visible = True                 'serve per gestire i fogli nascosti
                             .Range("$g$13:$H$70").AutoFilter Field:=1, Criteria1:="<>"
                             .Shapes.Range(Array("Elaborazione alternativa 1")).Visible = False
                            .PrintOut                       'stampa il foglio
                            
                            Application.PrintCommunication = False
             With ActiveSheet.PageSetup
                .PrintTitleRows = ""
                .PrintTitleColumns = ""
                
            End With
            
            
            Application.PrintCommunication = True
            
            Application.PrintCommunication = False
            With ActiveSheet.PageSetup
                .LeftHeader = ""
                .CenterHeader = ""
                .RightHeader = ""
                .LeftFooter = ""
                .CenterFooter = ""
                .RightFooter = ""
                .LeftMargin = Application.InchesToPoints(0)
                .RightMargin = Application.InchesToPoints(0)
                .TopMargin = Application.InchesToPoints(0)
                .BottomMargin = Application.InchesToPoints(0)
                .HeaderMargin = Application.InchesToPoints(0)
                .FooterMargin = Application.InchesToPoints(0)
                .PrintHeadings = False
                .PrintGridlines = False
                .PrintComments = xlPrintNoComments
                .PrintQuality = 600
                .CenterHorizontally = True
                .CenterVertically = True
                .Orientation = xlPortrait
                .Draft = False
                .PaperSize = xlPaperA4
                .FirstPageNumber = xlAutomatic
                .Order = xlDownThenOver
                .BlackAndWhite = False
                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = 1
                .PrintErrors = xlPrintErrorsDisplayed
                .OddAndEvenPagesHeaderFooter = False
                .DifferentFirstPageHeaderFooter = False
                .ScaleWithDocHeaderFooter = True
                .AlignMarginsHeaderFooter = True
                .EvenPage.LeftHeader.Text = ""
                .EvenPage.CenterHeader.Text = ""
                .EvenPage.RightHeader.Text = ""
                .EvenPage.LeftFooter.Text = ""
                .EvenPage.CenterFooter.Text = ""
                .EvenPage.RightFooter.Text = ""
                .FirstPage.LeftHeader.Text = ""
                .FirstPage.CenterHeader.Text = ""
                .FirstPage.RightHeader.Text = ""
                .FirstPage.LeftFooter.Text = ""
                .FirstPage.CenterFooter.Text = ""
                .FirstPage.RightFooter.Text = ""
                End With
        
        .Shapes.Range(Array("Elaborazione alternativa 1")).Visible = True
                           
            Application.PrintCommunication = True
             With Sheets(ListBox3.List(b, 0))
                            .Visible = xlHidden
                        End With
                        
                        
        
        
        
           'For a = 0 To ListBox1.ListCount - 1
           ' If ListBox1.Selected(a) Then j = True        'verifica se vi sono fogli selezionati
           ' Next a
           ' If j = False Then                               'esci se non ve ne sono
            '    MsgBox "Nessun foglio selezionato"
             '   Protect
              '  Exit Sub
            'Else
            'Unprotect
               For a = 0 To ListBox3.ListCount - 1
                    If ListBox3.Selected(a) = True Then     'altrimenti stampa quelli selezionati
                        With Sheets(ListBox3.List(a, 0))
                            .Visible = True                 'serve per gestire i fogli nascosti
                             .Range("$g$13:$H$70").AutoFilter Field:=1, Criteria1:="<>"
                             .Shapes.Range(Array("Elaborazione alternativa 1")).Visible = False
                            .PrintOut                       'stampa il foglio
                            
                            Application.PrintCommunication = False
             With ActiveSheet.PageSetup
                .PrintTitleRows = ""
                .PrintTitleColumns = ""
                
            End With
            
            
            Application.PrintCommunication = True
            
            Application.PrintCommunication = False
            With ActiveSheet.PageSetup
                .LeftHeader = ""
                .CenterHeader = ""
                .RightHeader = ""
                .LeftFooter = ""
                .CenterFooter = ""
                .RightFooter = ""
                .LeftMargin = Application.InchesToPoints(0)
                .RightMargin = Application.InchesToPoints(0)
                .TopMargin = Application.InchesToPoints(0)
                .BottomMargin = Application.InchesToPoints(0)
                .HeaderMargin = Application.InchesToPoints(0)
                .FooterMargin = Application.InchesToPoints(0)
                .PrintHeadings = False
                .PrintGridlines = False
                .PrintComments = xlPrintNoComments
                .PrintQuality = 600
                .CenterHorizontally = True
                .CenterVertically = True
                .Orientation = xlPortrait
                .Draft = False
                .PaperSize = xlPaperA4
                .FirstPageNumber = xlAutomatic
                .Order = xlDownThenOver
                .BlackAndWhite = False
                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = 1
                .PrintErrors = xlPrintErrorsDisplayed
                .OddAndEvenPagesHeaderFooter = False
                .DifferentFirstPageHeaderFooter = False
                .ScaleWithDocHeaderFooter = True
                .AlignMarginsHeaderFooter = True
                .EvenPage.LeftHeader.Text = ""
                .EvenPage.CenterHeader.Text = ""
                .EvenPage.RightHeader.Text = ""
                .EvenPage.LeftFooter.Text = ""
                .EvenPage.CenterFooter.Text = ""
                .EvenPage.RightFooter.Text = ""
                .FirstPage.LeftHeader.Text = ""
                .FirstPage.CenterHeader.Text = ""
                .FirstPage.RightHeader.Text = ""
                .FirstPage.LeftFooter.Text = ""
                .FirstPage.CenterFooter.Text = ""
                .FirstPage.RightFooter.Text = ""
                End With
        
        .Shapes.Range(Array("Elaborazione alternativa 1")).Visible = True
                           
            Application.PrintCommunication = True
             With Sheets(ListBox3.List(b, 0))
                            .Visible = xlHidden
                        End With
                        
                        
        
        
        
            
            
            
            Sheets("Calendario").Select
            
            Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True
        Protect
        End With
        End If
        Next
        
        End With
        End If
        Next
        
        End Sub
        #30806 Risposta
        patel
        patel
        Moderatore
          44 pts

          ti stampa soltanto gli elementi della lb3 perchè solo quelli controlli. Inoltre non ripetere la routine di stampa, fai una sub separata e richiama quella. Ripetendo sempre lo stesso codice lo incasini e poi non ti ci ritrovi.

          #30807 Risposta

          Si vero mi perdo tra i vari end if e end with farò una sub unica. Che intendi che controllo solo la lb3? Dove sbaglio? 

          #30837 Risposta

          Perfetto ho fatto come hai detto tu, macro stampa a parte da richiamare e funziona benissimo.

          Grazie mille.

        LoginRegistrati
        Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
        Rispondi a: 2 listbox
        Gli allegati sono permessi solo ad utenti REGISTRATI
        Le tue informazioni:



        vecchio frac - 2750 risposte

        patel
        patel - 1098 risposte

        albatros54
        albatros54 - 1071 risposte

        Marius44
        Marius44 - 1009 risposte

        Luca73
        Luca73 - 799 risposte