Sviluppare funzionalita su Microsoft Office con VBA Formattare una serie di fogli

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

    Ghido
    Partecipante

      Buongiorno a tutti

      premetto che sono alle prime armi con le macro e avrei gentilmente bisogno di una dritta...

      Dovrei formattare nello stesso modo una serie di fogli esistenti e già contenenti dati.

      A titolo esemplificativo allego un paio di file (ovviamente ridotti rispetto all'originale e privi di dati sensibili).

      Mi trovo in una situazione analoga a quella del file 2, e la formattazione la devo applicare a tutti i fogli (eccetto al primo). Ogni foglio ha già un proprio nome assegnato... e questa è la cosa che mi complica la vita!!!

      Tra i vari tentativi che ho fatto, sono riuscito a raggiungere l'obiettivo con un file analogo, ma con i fogli numerati (da 2 a 6), come vedete nella macro contenuta nel file 1.

      Chiedo se sia possibile fare la stessa operazione, ma passando come argomento della variabile il testo contenente il titolo dell'etichetta del foglio anzichè un numero progressivo.

      Riporto anche il codice della macro e vi ringrazio anticipatamente per i preziosissimi consigli che riuscirete a darmi.

      Ghido

      Sub Macro1()
      '
      ' Macro1 Macro
      '
      
      Dim Righe As Integer
      Dim Foglio As Worksheet
      Dim NrFogli As Integer
      Dim i As Integer
      
          NrFogli = 5
          
          For i = 2 To NrFogli + 1
              Set Foglio = Sheets(i)
              Foglio.Select
              Righe = Range("A" & Rows.Count).End(xlUp).Row
              Range("A1:A" & Righe).Select
              Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous
              Selection.Borders(xlEdgeTop).LineStyle = xlContinuous
              Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous
              Selection.Borders(xlEdgeRight).LineStyle = xlContinuous
              Selection.Borders(xlInsideVertical).LineStyle = xlContinuous
              Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous
          Next
          
      End Sub
      
      Allegati:
      You must be logged in to view attached files.
      #36263 Score: 0 | Risposta

      rollis13
      Partecipante
        8 pts

        Presumendo che tu voglia escludere dalla formattazione il foglio "MATRICE ORIGINE" ed evitando tutti quei Select suggerisco una modifica così:

        Option Explicit
        Sub Macro1()
            Dim Righe  As Integer
            Dim Foglio As Worksheet
            Dim i      As Integer
            For i = 1 To Sheets.Count 'conto i fogli presenti
                Set Foglio = Sheets(i)
                If Not Sheets(i).Name = "MATRICE ORIGINE" Then 'escludo questo
                    With Foglio
                        Righe = .Range("A" & Rows.Count).End(xlUp).Row
                        With .Range("A1:A" & Righe)
                            .Borders(xlEdgeLeft).LineStyle = xlContinuous
                            .Borders(xlEdgeTop).LineStyle = xlContinuous
                            .Borders(xlEdgeBottom).LineStyle = xlContinuous
                            .Borders(xlEdgeRight).LineStyle = xlContinuous
                            .Borders(xlInsideVertical).LineStyle = xlContinuous
                            .Borders(xlInsideHorizontal).LineStyle = xlContinuous
                        End With
                    End With
                End If
            Next
        End Sub
        #36264 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          Mentre mi rileggo la tua accurata descrizione ed esamino i file allegati, ti informo che puoi semplificare un pochino il codice accorpando istruzioni, inoltre spesso non c'è necessità di pre-selezionare un range per formattarlo. La proprietà Borders contiene già tutti i bordi in se stessa senza bisogno di precisarli a meno che non si debba applicare una formattazione precisa ad uno solo di essi.

          Il tuo codice diventa:

          Sub Macro1()
          '
          ' Macro1 Macro
          '
          
          Dim Righe As Integer
          Dim NrFogli As Integer
          Dim i As Integer
          
              NrFogli = 5
              For i = 2 To NrFogli + 1
                  With Sheets(i)
                      Righe = .Range("A" & Rows.Count).End(xlUp).Row
                      .Range("A1:A" & Righe).Borders.LineStyle = xlContinuous
                  End With
              Next    
          End Sub
          #36265 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            rollis13 ha scritto:

            If Not Sheets(i).Name = "MATRICE ORIGINE" Then 'escludo questo

            Alla fine Rollis mi ha preceduto 🙂
            Aggiungo solo di stare attenti ai confronti secchi come questo perché in caso di mescolanza di maiuscole/minuscole il confronto fallisce.
            Io preferisco utilizzare StrComp con il parametro vbTextCompare, che permette un confronto case insensitive.

             

            #36266 Score: 0 | Risposta

            rollis13
            Partecipante
              8 pts

              vecchio frac ha scritto:

              Io preferisco utilizzare StrComp con il parametro vbTextCompare, che permette un confronto case insensitive.

              Eh, ma questo significa non aver fiducia negli utilizzatori; e poi, ci vuole sempre un po' di strizza quando poi qualcosa non funziona più .

              #36267 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                rollis13 ha scritto:

                ma questo significa non aver fiducia negli utilizzatori

                 io soprattutto non mi fido di me stesso   

                #36271 Score: 0 | Risposta

                Ghido
                Partecipante

                  Grazie ad entrambi per i preziosi consigli!!!   

                Login Registrati
                Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
                Rispondi a: Formattare una serie di fogli
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni: