You are here:Home-Domande su Excel VBA e MACRO-Copiare un foglio di lavoro
Copiare un foglio di lavoro2021-01-20T13:40:06+01:00

Home Forum Domande su Excel VBA e MACRO Copiare un foglio di lavoro

Taggato: 

Visualizzazione 5 filoni di risposte
  • Autore
    Post
    • AvatarGIORGIO2610
      Partecipante
        Post totali: 15

        Buongiorno a tutti

        Ho creato un foglio per l’immissione dei corrispettivi ed avrei la necessità di creare una macro che mi consenta di copiare detto foglio alla fine.

        Mi spiego meglio:

        nel foglio “inserimento” inserisco i dati dei corrispettivi provenienti dal sito dell’Agenzia delle Entrate.

        Tramite una macro ordino per data questi dati inseriti.

        A questo punto, manualmente tramite la funzione copia, creo un nuovo foglio inserendolo alla fine della lista.

        Il programma me lo inserisce come “Inserimento 2” ed io, sempre manualmente, vado a cambiare il nome.

        Vorrei sapere come si fa a creare una macro che:

        a) provveda a copiare il foglio “inserimento” e lo inserisca alla fine

        b) provveda a rinominare il foglio con il nome del mese relativo (può essere sia il nome che il numero)

        Allego il file creato http://www.filedropper.com/corrispettivi

        Sono sicuro che per gli esperti sia una cosa semplice ma io ho provato anche con la registrazione ma non mi funziona in quanto non riesco a inserire il foglio alla fine e, soprattutto, a rinominarlo.

        Grazie per l’aiuto

        Giorgio

      • AvatarKris_9951
        Partecipante
          Post totali: 203

          Ciao GIORGIO2610.

          Prova questa soluzione:

          https://www.dropbox.com/s/e8xluxf9yrz7rgj/CORRISPETTIVI.xlsm?dl=0

           

          Fai sapere (se vuoi) :bye: :bye:

          Option Explicit
          Option Compare Text
          
          Sub copiaFoglio()
          Dim ws As Worksheet
          Dim ws2 As Worksheet
          Set ws = Sheets("INSERIMENTO")
          Application.ScreenUpdating = False
          Set ws2 = nuovoFoglio(ws)
          ws2.Name = verificaNome(MonthName(ws.Cells(1, 1)))
          ws2.Cells(1, 1).ClearContents
          Application.ScreenUpdating = True
          MsgBox "Il foglio " & ws2.Name & " è stato creato", vbInformation, "Operazione effettuata"
          End Sub
          
          Private Function nuovoFoglio(foglio As Worksheet) As Worksheet
          foglio.Copy After:=Sheets(Sheets.Count)
          Set nuovoFoglio = Sheets(Sheets.Count)
          End Function
          
          Function verificaNome(nome As String) As String
          Dim x As Integer, k As Integer: k = 1
          Dim bOK As Boolean
          Dim nomeTemp As String: nomeTemp = nome
          For x = 1 To Sheets.Count
          Do Until bOK = True
          bOK = True
          If Sheets(x).Name = nome Then
          k = k + 1
          nome = nomeTemp & "_" & k
          bOK = False
          End If
          Loop
          bOK = False
          Next x
          verificaNome = nome
          End Function
        • AvatarKris_9951
          Partecipante
            Post totali: 203

            Ciao GIORGIO2610.

            Prova questa soluzione:

            https://www.dropbox.com/s/e8xluxf9yrz7rgj/CORRISPETTIVI.xlsm?dl=0

            Fai sapere (se vuoi) :bye: :bye:

            Option Explicit
            Option Compare Text
            
            Sub copiaFoglio()
            Dim ws As Worksheet
            Dim ws2 As Worksheet
            Set ws = Sheets("INSERIMENTO")
            Application.ScreenUpdating = False
            Set ws2 = nuovoFoglio(ws)
            ws2.Name = verificaNome(MonthName(ws.Cells(1, 1)))
            ws2.Cells(1, 1).ClearContents
            Application.ScreenUpdating = True
            MsgBox "Il foglio " & ws2.Name & " è stato creato", vbInformation, "Operazione effettuata"
            End Sub
            
            Private Function nuovoFoglio(foglio As Worksheet) As Worksheet
            foglio.Copy After:=Sheets(Sheets.Count)
            Set nuovoFoglio = Sheets(Sheets.Count)
            End Function
            
            Function verificaNome(nome As String) As String
            Dim x As Integer, k As Integer: k = 1
            Dim bOK As Boolean
            Dim nomeTemp As String: nomeTemp = nome
            For x = 1 To Sheets.Count
            Do Until bOK = True
            bOK = True
            If Sheets(x).Name = nome Then
            k = k + 1
            nome = nomeTemp & "_" & k
            bOK = False
            End If
            Loop
            bOK = False
            Next x
            verificaNome = nome
            End Function
          • AvatarGIORGIO2610
            Partecipante
              Post totali: 15

              Grazie tante FUNZIONA PERFETTAMENTE

              Un’ultima domanda:

              se volessi inserire, come intestazione del foglio, il numero del mese anziche’ il nome, quali parametri della macro devo correggere?

              Tante grazie ancora

              Ciao

              Giorgio

              PS: non riesco ad inserire il RISOLTO, perche’ non riesco ad individuare il pulsante modifica

               

               

               

              • AvatarKris_9951
                Partecipante
                  Post totali: 203

                  Ciao Giorgio.

                  Contento di averti aiutato  :-)

                  Per nominare il foglio con il numero del mese anzichè il nome devi sostituire questa riga:
                  ws2.Name = verificaNome(MonthName(ws.Cells(1, 1)))

                  con questa:
                  ws2.Name = verificaNome(ws.Cells(1, 1).value)
                  In questo modo prenderà il numero del mese dalla formula in A1.

                  Oppure se vuoi fare anche a meno di quella formula puoi metterci questo:
                  ws2.Name = verificaNome(Month(Cells(2, 2).Value))
                  In questo caso il numero del mese lo prenderà dalla data nella cella B2

                  P.s.
                  Non so se ci hai fatto caso ma con questa Macro puoi anche generare più fogli di uno stesso mese qualora ti serva.
                  Quindi se ad esempio crei il foglio con il nome “10” relativo al mese di Ottobre, potrai sempre generare un altro foglio sempre di Ottobre ed in questo caso il foglio verrà nominato “10_2”, “10_3” ecc…
                  Spero di essermi spiegato bene ;-)

                  Per qualsiasi altra cosa resto a disposizione
                  :bye: :bye:

                  • Questa risposta è stata modificata 1 mese, 1 settimana fa da AvatarKris_9951. Motivo: Precisazione
              • AvatarGIORGIO2610
                Partecipante
                  Post totali: 15

                  tante grazie

                  gentilissimo

                  ciao

                • AvatarGIORGIO2610
                  Partecipante
                    Post totali: 15

                    Scusa se ti disturbo di nuovo ma ti dovrei chiedere un altro favore
                    Su un altro foglio, che uso per compilare le mie notule, avrei necessità che mi creasse una copia del foglio di lavoro, sempre alla fine dei fogli, come l’altro caso, solo che il nome che dovrebbe dare al foglio deriva dalla seguente formula impostata sulla cella R1

                    Ho provato a sostituire questi due dati
                    ws2.Name = verificaNome(ws.Cells(18, 1).Value)
                    ws2.Cells(18, 1).ClearContents
                    ma, lanciando la macro, mi appare il seguente messaggio di debug
                    “Function verificaNome(nome As String) As String”
                    Quali altri dati devo modificare perché la macro funzioni?
                    Grazie e scusa per il disturbo
                    Ciao

                Visualizzazione 5 filoni di risposte
                • Devi essere connesso per rispondere a questo topic.