Macro per copia di fogli



  • Macro per copia di fogli
    di Pino (utente non iscritto) data: 06/04/2017 09:30:28

    Ho necessità di copiare un foglio denominato VISITA2016 da un file all'altro di Excel. Per fare questo ho creato una macro che allego, la quale copia il foglio VISITA2016 da un file all'altro. Nell'istruzione della macro ho visto che c'è il nome del file da qui deve essere copiato il foglio VISITA2016: poiché ho necessità di fare la stessa operazione con vari File, di nome ovviamente diverso, mi chiedevo se fosse possibile sostituire nell'istruzione della macro il nome del File da cui prelevare il foglio VISITA2016 con un nome generico, in modo che la macro copi il foglio VISITA2016 dal file che in quel momento è aperto, indipendentemente dal suo nome. La seconda parte dell'istruzione funziona bene (copia un determinato testo dal foglio VISITA2016 al foglio VISITA).
     
    Macro3 Macro
    '
    
    '
        Windows("CORVINO SILVIA.xlsm").Activate
        Sheets("Visita2016").Select
        ActiveSheet.Buttons.Add(130.8, 1484.4, 130.8, 37.2).Select
        ActiveSheet.Buttons.Add(7.8, 1483.2, 114, 37.2).Select
        ActiveSheet.Buttons.Add(0.6, 1457.4, 47.4, 15.6).Select
        ActiveSheet.Buttons.Add(6, 1006.2, 108, 16.2).Select
        ActiveSheet.Buttons.Add(267, 1486.2, 105, 33.6).Select
        ActiveSheet.Buttons.Add(378.6, 1485.6, 93.6, 33).Select
        Sheets("Visita2016").Copy Before:=Workbooks("NUOVO.xlsm").Sheets(2)
        ActiveWindow.SmallScroll Down:=-69
        Range("A22:I27").Select
        Selection.Copy
        Sheets("VISITA").Select
        Range("A18:I23").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    End Sub



  • di Luca73 data: 06/04/2017 10:22:44

    Capisco che tu apri due fogli di cui uno è CORVINO SILVIA.xlsm mentre l'altro varia ed nell'esempio è NUOVO.xlsm.
    E poi vuoi copiare un foglio VISITA
    Corretto?

    In questo caso l'unica è essere sicura di aver aperto solo due file e poi fargli selezionare quello giusto magari con un msgbox di domanda e di conferma.

    Cioa
    Luca







  • di Pino (utente non iscritto) data: 06/04/2017 12:32:37

    Scusa Luca, ma è il contrario: il file fisso è quello chiamato NUOVO. Io ogni volta apro due file: quello chiamato NUOVO ed un altro che varia da caso a caso (nell'esempio si chiamava Corvino Silvia, perché ogni file ha il nome e cognome di una persona). Fatto ciò, la macro che ho registrato nel file NUOVO va a copiare il foglio VISITA2016 del file variabile nel file NUOVO, e poi copia un determinato testo dal foglio VISITA2016 al foglio VISITA (che è uno dei fogli del file NUOVO). La macro, come puoi vedere, ha una prima istruzione che è Windows("Nome file".xlsm").Activate. Il fatto è che registrando la macro con il registratore prende come Nome File il nome del file che vado ad aprire, quindi Corvino Silvia; se io invece voglio aprire il file Rossi Mario ovviamente non funziona. Come posso modificare questa istruzione in modo che come Nome File".xlsm compaia il nome del file che sto aprendo in quel momento??



  • di Luca73 data: 06/04/2017 13:22:09

    OK ho capito
    una domanda
    i file da modificare li vuoi aprire uno alla volta oppure sono tutti in una o più cartelle oppure c'è un elenco?

    Ciao
    Luca





  • di Pino (utente non iscritto) data: 06/04/2017 14:17:02

    I file da cui voglio importare il foglio VISITA2016 sono in cartelle diverse, le quali a loro volta sono in una cartella generale, che prende il nome dalla città alla quale si riferiscono (es. c'è una cartella che si chiama Torino, un'altra si chiama Milano, un'altra Napoli); queste cartelle con il nome di città (sono 6-7 in tutto) a loro volta si trovano tutte quante in una cartella chiamata genericamente CITTA'. Nella cartella chiamata CITTA' si trovano quindi le 6-7 cartelle con il nome di città, nonché il file chiamato NUOVO. Io quindi procedo (manualmente) così:
    1. apro il file NUOVO
    2. vado a cercare nelle varie cartelle il file da cui voglio importare il foglio VISITA2016
    3. con sposta/copia copio il foglio VISITA2016 nel file NUOVO
    4. con la macro copio alcuni dati dal foglio VISITA2016 al foglio VISITA
    4. compilo (manualmente) gli altri vari campi del file NUOVO
    5. salvo con nome il file NUOVO: per questo utilizzo un'altra macro, memorizzata nel file NUOVO, che salva il file NUOVO 6. dandogli come nome quello della persona al quale si riferisce, nella cartella della città al quale si riferisce
    6. la stessa macro invia uno specifico foglio del file NUOVO per mai a degli indirizzi che legge da alcune caselle di uno dei fogli del file NUOVO.

    Le operazioni di cui ai n. 4, 5 e 6 sono già bene regolate.
    Le operazioni di cui al n.1 e n. 2 la faccio io manualmente
    Vorrei una macro che facesse l'operazione di cui al punto n.3: cioè, copiare il foglio VISITA2016 dal file originario (che lo contiene) al file NUOVO (il foglio VISITA2016 viene così aggiunto al file NUOVO.
    A questo punto la seconda parte dell'istruzione della macro mi consente la copia di alcuni dati dal foglio VISITS2016 al foglio VISITA (punto n. 4).
    I file che contengono il foglio VISITA2016 sono quindi aperti uno per uno, ed ogni volta il foglio VISITS2016 viene copiato nel file NUOVO, ed il giro riprende.




  • di Luca73 data: 06/04/2017 14:27:03

    Ciao Si potrebbe per semplificare il tutto fare anche la "ricerca del file" via macro ovvero aprire una finestra anologa a quella che ti compare quando fai apri file. così facendo il file aperto risulta facilmente identificabile ed utilizzabile.

    Appena posso butto giù due righe.

    CIao
    Luca





  • di Albatros54 data: 06/04/2017 14:33:02

    Vedi se ti puo essere utile:
    h t t p://www.excelvba.it/Forum/story/Excel_e_gli_applicativi_Office/vba_copia_dati_da__cartelle_e_li_accoda_in_unica_.html





  • di Luca73 data: 07/04/2017 09:35:50

    Prova un qualcosa del genere.
    Non avendo i tuoi file NON ho potuto testare e fare debug.

    Fammi sapere.

    Ciao
    Luca 

    Aggiungo: La macro va inserita in un modulo del file di origine da aprire e poi lanciare la macro (tramite pulsante o altro) la macro come prima cosa ti fa aprire il file da modificare


     
    Sub AggiungiFoglioLT()
    
    Dim WBW As Workbook
    Dim fileToOpen
    fileToOpen = Application.GetOpenFilename("Tutti i File di Excel (*.xl*; *.xlsx; *.xlsm; *.xlsb; *.xlam; *.xltx; *.xltm; *.xls; *.xlt; *.xml; *.xla; *.xlm; *.xlw), *.xl*; *.xlsx; *.xlsm; *.xlsb; *.xlam; *.xltx; *.xltm; *.xls; *.xlt; *.xml; *.xla; *.xlm; *.xlw")
    If fileToOpen = False Then Exit Sub
    If MsgBox("Apro il file " & fileToOpen & " e procedo on l'elaborazione?", vbYesNo + vbQuestion, "PROCEDO?") = vbYes Then
        Set WBW = Workbooks.Open(fileToOpen)
        Windows(Name).Activate
        With WBW.Sheets("Visita2016")
            .Select
            .Buttons.Add 130.8, 1484.4, 130.8, 37.2
            .Buttons.Add 7.8, 1483.2, 114, 37.2
            .Buttons.Add 0.6, 1457.4, 47.4, 15.6
            .Buttons.Add 6, 1006.2, 108, 16.2
            .Buttons.Add 267, 1486.2, 105, 33.6
            .Buttons.Add 378.6, 1485.6, 93.6, 33
            .Copy Before:=Workbooks("NUOVO.xlsm").Sheets(2)
            .Range("A22:I27").Copy
            Sheets("VISITA").Range("A18:I23").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        End With
    End If
    End Sub






  • di Pino (utente non iscritto) data: 07/04/2017 10:37:50

    Grazie, Luca ma non funziona. Per prima cosa, la macro va ad aprire la finestra documenti; da lì poi devo fare la ricerca del file. I file da cercare sono su una Pendrive, nella Cartella Ufficio, sottocartella Visite medica, sottocartella Città: non si potrebbe modificare la prima parte della macro per fare in modo che la ricerca punti direttamente alla cartella Città?
    Fatto questo, scelgo il file da aprire, ma la macro si blocca sull'istruzione Windows(Name).Activate per "Errore di run-tine =9. Indice non compreso nell'intervallo.
    Segnalo che nello stesso tempo vengono aperte molte finestre, nelle quali vi sono tutte e altre macro presenti nel file; chiudendo tali finestre una ad una mi accorgo che comunque il file che cercavo è stato aperto!!




  • di Luca73 data: 07/04/2017 11:08:45

    Prova Così
    inserisci la cartell giusta.
    Inoltre se usi una chiavetta forse è necessario aggiungere prima del chdir un ChDrive (vedi l'help)

    Ciao
    Luca
     
    Sub AggiungiFoglioLT_01()
    
    Dim WBW As Workbook
    Dim fileToOpen
    
    ChDir ("C:Usersxxxxxxxxxx0-yyyyyyygggggg")  '<= inserire qui la cartella comune dove hai i tuoi file
    fileToOpen = Application.GetOpenFilename("Tutti i File di Excel (*.xl*; *.xlsx; *.xlsm; *.xlsb; *.xlam; *.xltx; *.xltm; *.xls; *.xlt; *.xml; *.xla; *.xlm; *.xlw), *.xl*; *.xlsx; *.xlsm; *.xlsb; *.xlam; *.xltx; *.xltm; *.xls; *.xlt; *.xml; *.xla; *.xlm; *.xlw")
    If fileToOpen = False Then Exit Sub
    If MsgBox("Apro il file " & fileToOpen & " e procedo on l'elaborazione?", vbYesNo + vbQuestion, "PROCEDO?") = vbYes Then
        Set WBW = Workbooks.Open(fileToOpen)
        WBW.Activate
        With WBW.Sheets("Visita2016")
            .Select
            .Buttons.Add 130.8, 1484.4, 130.8, 37.2
            .Buttons.Add 7.8, 1483.2, 114, 37.2
            .Buttons.Add 0.6, 1457.4, 47.4, 15.6
            .Buttons.Add 6, 1006.2, 108, 16.2
            .Buttons.Add 267, 1486.2, 105, 33.6
            .Buttons.Add 378.6, 1485.6, 93.6, 33
            .Copy Before:=Workbooks("NUOVO.xlsm").Sheets(2)
            .Range("A22:I27").Copy
            Sheets("VISITA").Range("A18:I23").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        End With
    End If
    End Sub
    






  • di Giuseppe (utente non iscritto) data: 10/04/2017 14:02:37

    Usando la chiavetta ho inserito il seguente percorso:
    ChDir ("G:UfficioXXX_XXYYYY")
    ma non funziona ("Impossibile trovare il percorso").




  • di Luca73 data: 10/04/2017 14:33:53

    Prova con un chdrive prima del chdir

     
    ChDrive "G" o ChDrive("G")






  • di Giuseppe (utente non iscritto) data: 10/04/2017 15:56:01

    Provato con la macro allegata, non va (impossibile trovare il percorso); eppure il percorso mi sembra corretto.


     
    Sub provoinserimentofile()
    Dim WBW As Workbook
    Dim fileToOpen
    
    ChDrive ("G")
    ChDir ("G:UfficioAAA_BBB_CCCZZ")
    fileToOpen = Application.GetOpenFilename("Tutti i File di Excel (*.xl*; *.xlsx; *.xlsm; *.xlsb; *.xlam; *.xltx; *.xltm; *.xls; *.xlt; *.xml; *.xla; *.xlm; *.xlw), *.xl*; *.xlsx; *.xlsm; *.xlsb; *.xlam; *.xltx; *.xltm; *.xls; *.xlt; *.xml; *.xla; *.xlm; *.xlw")
    If fileToOpen = False Then Exit Sub
    If MsgBox("Apro il file " & fileToOpen & " e procedo on l'elaborazione?", vbYesNo + vbQuestion, "PROCEDO?") = vbYes Then
        Set WBW = Workbooks.Open(fileToOpen)
        WBW.Activate
        With WBW.Sheets("Visita2016")
            .Select
            .Buttons.Add 130.8, 1484.4, 130.8, 37.2
            .Buttons.Add 7.8, 1483.2, 114, 37.2
            .Buttons.Add 0.6, 1457.4, 47.4, 15.6
            .Buttons.Add 6, 1006.2, 108, 16.2
            .Buttons.Add 267, 1486.2, 105, 33.6
            .Buttons.Add 378.6, 1485.6, 93.6, 33
            .Copy Before:=Workbooks("NUOVO.xlsm").Sheets(2)
            .Range("A22:I27").Copy
            Sheets("VISITA").Range("A18:I23").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        End With
    End If
    End Sub



  • di Luca73 data: 10/04/2017 16:59:02

    L'approccio è Corretto
    Io ho provato a me funziona anche con dischi esterni.
    Verifica bene le stringhe.

    Ciao

     
    ChDrive ("D")
    ChDir ("D:Libriprova")
    






  • di Giuseppe (utente non iscritto) data: 10/04/2017 21:00:58

    Ci siamo Luca. Funziona benissimo. Ti ringrazio molto..