Sviluppare funzionalita su Microsoft Office con VBA Macro al passaggio tra fogli

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

    FROST220684
    Partecipante

      Salve a tutti,

      E' possibile far attivare una macro quando si passa da un foglio all'altro di una cartella di lavoro?

      Spiego meglio, un file con più fogli vorrei che quando passo da un foglio all'altro si attivasse una macro senza premere tasti.

      So che è possibile farlo all'apertura del file tramite il workbook ma mi chiedevo se era possibile non all'apertura file ma all'attivarsi del foglio.

      grazie a tutti per l'aiuto

      #44228 Score: 0 | Risposta

      alexps81
      Moderatore
        58 pts

        Puoi intervenire nell'evento Private Sub Workbook_SheetActivate(ByVal Sh As Object)

        Vedi esempio che ti allego così ti fai un'idea. Passa da un foglio all'altro.

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

        FROST220684
        Partecipante

          Ciao Alex,

          ho visto il tuo file ed ho strutturato in questo modo:

          Modulo 10:

          option explicit
          
          Sub filtrivoucher()
          With Worksheets("voucher")
          
          .Range("$A$5:$D$71").AutoFilter Field:=4, Criteria1:="<>"
          End With
          
          End Sub
          
          Sub filtrivoucherweek()
          With Worksheets("voucher weekend")
          .Range("$A$5:$D$69").AutoFilter Field:=4, Criteria1:="<>"
          End With
          End Sub
          
          Sub filtrioutputweek()
          With Worksheets("output weekend")
          .Range("$A$5:$D$68").AutoFilter Field:=4, Criteria1:="<>"
          End With
          
          End Sub
          Sub filtrioutput()
          With Worksheets("output")
          .Range("$A$5:$D$70").AutoFilter Field:=4, Criteria1:="<>"
          
          End With
          
          End Sub
          

           

          mentre nel workbook ho messo questo:

          option explicit
          
          Private Sub Workbook_SheetActivate1(ByVal Sh As Object)
              filtrivoucher
          End Sub
          
          Private Sub Workbook_SheetActivate2(ByVal Sh As Object)
              filtrivoucherweek
          End Sub
          Private Sub Workbook_SheetActivate3(ByVal Sh As Object)
              filtrioutput
          End Sub
          Private Sub Workbook_SheetActivate4(ByVal Sh As Object)
              filtrioutputweek
          End Sub
          

          pero quando passo da un foglio all'altro non mi si attivano i filtri richiesti. Nel senso essendo questi fogli collegati tutti al foglio input se io cambio qualcosa nel foglio input gli altri fogli non si aggiornano ed attivando i filtri manualmente si nascondono le celle vuote e rimane solo tutto quello che c'è nell'input.

          Insomma, quando io faccio modifiche sul foglio input entro in uno di questi fogli attivo manualmente il tasto filtro sulle colonne e lui mi elimina tutte le celle vuote. Volevo automatizzare questo passaggio con un filtro automatico al passaggio dei fogli ma non so perchè non va.

          Allego file se può servire ma ho l'impressione che dipenda dai filtri più che da come ho scritto il codice

          grazie mille

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

          scossa
          Partecipante
            37 pts

            FROST220684 ha scritto:

            Private Sub Workbook_SheetActivate1(ByVal Sh As Object) filtrivoucherEnd Sub

            Non esiste l'evento Workbook_SheetActivate1 2 3 ma solo Workbook_SheetActivate().

            Senza entrare nel merito del resto del codice (Criteria1:="<>" da che??):

            Private Sub Workbook_SheetActivate(ByVal Sh As Object)
              With Sh
                If .Name = "Voucher" Then
                  .Range("$A$5:$D$71").AutoFilter Field:=4, Criteria1:="<>"
                ElseIf .Name = "Voucher Weekend" Then
                  .Range("$A$5:$D$69").AutoFilter Field:=4, Criteria1:="<>"
                ElseIf .Name = "Output WeekEnd" Then
                  .Range("$A$5:$D$68").AutoFilter Field:=4, Criteria1:="<>"
                ElseIf .Name = "Output" Then
                  .Range("$A$5:$D$70").AutoFilter Field:=4, Criteria1:="<>"
                End If
              End With
            End Sub
            
            #44245 Score: 1 | Risposta

            alexps81
            Moderatore
              58 pts

              FROST220684 ha scritto:

              Private Sub Workbook_SheetActivate1(ByVal Sh As Object)

              Cosa sono qui numeri dopo Activate? Li hai messi tu? Ora non posso soffermarmi sulla richiesta d'intervento specifica, ma l'evento Private Sub Workbook_SheetActivate(ByVal Sh As Object), quindi senza alcun numero dopo Activate, serve a far riflettere sull'intera cartella di lavoro il codice che metti al suo interno. Infatti se vedi la Sub inizia proprio con Workbook_....(cioè cartella di lavoro).

              Cmq domani se riesco leggero meglio la tua richiesta.

              #44246 Score: 0 | Risposta

              FROST220684
              Partecipante

                ma che danno che sono, grazie scossa, ero convinto di doverla far variare per ogni foglio.

                Vabbè si impara sempre qualcosa, ora funziona naturalmente.

                Grazie anche ad alex sempre tempestivi e mi avete aiutato tanto, non posso che ringraziare.

              Login Registrati
              Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
              Rispondi a: Macro al passaggio tra fogli
              Gli allegati sono permessi solo ad utenti REGISTRATI
              Le tue informazioni: