Duplicare foglio excel



  • Duplicare foglio excel
    di Filippo (utente non iscritto) data: 17/09/2015 14:03:27

    Sottopongo alla vostra attenzione il mio problema, sperando che qualcuno possa avere una soluzione. Ho un elenco di pazienti (circa 500 nominativi), per ognuno dei quali ho una cartella costituita da 10 fogli excel. Vorrei duplicare il foglio n. 4 di ciascuna cartella, denominando la copia come foglio11. Farlo uno per uno con il comando sposta/copia è operazione molto lunga e noiosa: esiste un metodo per farlo in automatico, magari con una macro? Grazie a tutti per la risposta.



  • di Vecchio Frac data: 17/09/2015 14:07:00

    Quindi lo scenario è:
    - ci sono 500 file Excel
    - ognuno contiene dieci fogli (chiamati da "Foglio1" a "Foglio10")
    - per ogni file Excel si vuole duplicare il "Foglio4", rinominando la copia "Foglio11" e lasciando intatto il "Foglio4"
    (confermare lo scenario)

    Quanta dimestichezza hai con VBA, da compiere per esempio questa operazione una volta, registrandola col registratore di macro, adattando poi il codice alle tue esigenze?





  • di Filippo (utente non iscritto) data: 17/09/2015 18:31:47

    Ho provato con il registratore di macro, operando su un solo file aperto: la macro funziona, però non "vede" i pulsanti che ci sono sul foglio originale (e che attivano altre macro che hanno altre funzioni), nel senso che li trasforma in celle non cliccabili; il bello è che poi trasforma in tale senso anche i pulsanti del foglio originario!.
    A parte ciò, mi chiedevo: esiste un metodo per fare l'operazione che mi interessa a file chiuso, agendo su molti file contemporaneamente?? Grazie!!!!



  • di Vecchio Frac data: 17/09/2015 19:09:50

    Guarda, la risposta all'ultima domanda è naturalmente sì, in pomeriggio in ufficio ho realizzato un modellino di quello che hai chiesto, lo allego volentieri (migliorabile, come tutte le cose, ma è una proposta da cui prendere spunto).
    Solo che non avevi detto che c'erano dei pulsanti e quindi non so se la mia proposta funzionerà in questo senso (cioè non so se conserverà i pulsanti e le loro funzioni).
    Comunque per provarlo allego il file "rename_sheets_VF.xlsm".





  • di Filippo (utente non iscritto) data: 17/09/2015 22:39:00

    Ho provato il file che hai allegato, ma non mi sembra che funzioni, o almeno io non sono stato capace di capirne il funzionamento. In pratica: ho lanciato la macro "duplica", che mi chiede di indicare la cartella che contiene i file excel. Ho indicato tale cartella, ma non succede nulla, o meglio mi apre un solo file, e senza duplicare il foglio 4 che a me interessava. Preciso, se può essere importante (ora comprendo che forse è molto importante!!) che il foglio 4 di tutti i files si chiama "Visita2015", e dovrebbe essere duplicato in modo che la copia assuma il nome di "Visita2016". Per quanto riguarda i pulsanti, essi attivano alcune macro, che svolgono funzioni diverse: alcune di tali macro fanno riferimento al foglio "Visita2015" (ad esempio, c'è un pulsante che attiva una macro che inserisce una certa frase fissa in una casella di testo del foglio "Visita2015"), e mi chiedo come possono funzionare anche sul nuovo foglio denominato "Visita2016"????



  • di patel data: 18/09/2015 09:27:08

    Filippo, forse è il caso che tu alleghi un file di esempio (come ha fatto Vecchio Frac)





  • di Vecchio Frac data: 18/09/2015 09:28:49

    cit. "Preciso, se può essere importante (ora comprendo che forse è molto importante!!) che il foglio 4 di tutti i files si chiama "Visita2015""
    ---> Ma guarda che forse forse è proprio importante ^_^
    E' come se i tuoi pazienti non ti dessero tutte le informazioni e tu facessi una diagnosi (non dico sbagliata ma almeno) inesatta.

    Il codice che avevo costruito è il seguente. Vedi se riesci a fare le modifiche che ti servono.
    Per adattare i pulsanti, forse bisogna vedere un esempio del file originale.
     
    Option Explicit
    
    Sub duplica()
    Dim fso As Object, fo As String, i As Integer, j As Integer
    Dim excelfile As Object, wb As Object
        Set fso = CreateObject("scripting.filesystemobject")
        
        With Application.FileDialog(msoFileDialogFolderPicker)
            .Title = "Seleziona la cartella con i file Excel"
            If .Show = 0 Then Exit Sub
            fo = .SelectedItems(1)
        End With
        
        Application.ScreenUpdating = False
        j = fso.getfolder(fo).Files.Count
        For Each excelfile In fso.getfolder(fo).Files
            Application.StatusBar = "Restano " & j & " files da esaminare..."
            i = InStrRev(excelfile, ".")
            If Mid(excelfile, i + 1) Like "xls*" Then
                Set wb = Workbooks.Open(excelfile)
                With wb
                    .Sheets("Foglio2").Copy After:=.Sheets(.Sheets.Count)
                    .Sheets(.Sheets.Count).Name = "Foglio" & .Sheets.Count
                End With
                wb.Close True
            End If
            j = j - 1
        Next
        Application.StatusBar = ""
        Application.ScreenUpdating = True
        
        Set excelfile = Nothing
        Set fso = Nothing
        MsgBox "Tutto fatto."
    End Sub






  • di Filippo (utente non iscritto) data: 18/09/2015 19:32:24

    E' troppo complicato per le mie conoscenze (scarse!!) di VBA.
    Allego il file completo; specifico solo che i files di cui voglio duplicare il foglio "Visita2015" si trovano in Directory diverse; e che il foglio duplicato deve assumere il nome "Visita2016" e deve mantenere la formattazione del foglio originario, ivi compresi i pulsanti, e devono altresì funzionare le macro che ora puntano al foglio "Visita2015"