Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Copiare foglio con VBA

  • Messaggi
  • OFFLINE
    BG66
    Post: 361
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Senior
    2010
    00 10/08/2022 19:54
    Buon Agosto a tutti.
    Sarà l'aria di montagna o solo il tempo che passa ma non riesco a fare una cosa cosi semplice 🤬
    Vorrei "semplicemente" avere una macro che copia l'intero e unico foglio (Sheet) presente in FileSorgente nel foglio Sheet presente nel file destinazione.

    Grazie in anticipo.
    [Modificato da BG66 10/08/2022 19:54]
    BG66
    Excel 2010
  • OFFLINE
    tanimon
    Post: 1.526
    Registrato il: 27/06/2011
    Utente Veteran
    excel 2007
    00 10/08/2022 22:42
    Ciao,
    soluzione più semplice e veloce?

    Usa il registratore di macro!😉
    Ciao
    Frank









    Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
    Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
  • OFFLINE
    Marius44
    Post: 1.009
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 11/08/2022 06:37
    Ciao
    In aggiunta a quanto suggerito da @tanimon (ciao Frank), se ho capito cosa vuoi fare:
    a) seleziona la freccetta che c'è nell'angolo in alto a sinistra del FoglioSorgente, tasto destro e seleziona Copia
    b) seleziona la cella A1 del FoglioDestinazione, tasto destro e incolla.

    Ciao,
    Mario
  • OFFLINE
    BG66
    Post: 361
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Senior
    2010
    00 11/08/2022 06:43
    Ciao Tanimon,
    avevo escluso il registratore perche mi "costringe" ad aprire entrambi i files.
    Mentre il codice del mitico Ennius
    Sub CopiaFoglioEnnius()
    X = "C:\Users\DirStab\Desktop\Lavori & Prove\DashBoard Corsi\FileSorgente.xlsx" 'con X prendiamo tutto il percorso che mira alla cartella chiusa
    Workbooks.Open Filename:=X, ReadOnly:=False   'apriamo la cartella di origine
    Y = Mid(X, 13)  'con Y otteniamo, estratto con Mid, solo il nome della cartella di origine
    Workbooks(Y).Sheets("Sheet").Copy _
    After:=Workbooks("FileDestinazione.xlsm").Sheets("Sheet") 'usiamo quindi Y al posto del nome della cartella
    
    Workbooks(Y).Close  ' e quindi si chiude la cartella Y (la cartella di origine)
    End Sub 

    mi andava in errore e da questo nasceva l'apertura del post ripartendo da zero.


    [Modificato da BG66 11/08/2022 06:44]
    BG66
    Excel 2010
  • OFFLINE
    BG66
    Post: 362
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Senior
    2010
    00 11/08/2022 06:51
    Ciao Mario,
    avevo fatto anche quello ma all'apertura del file destinazione cliccando su aggiorna non succede nulla.
    BG66
    Excel 2010
  • OFFLINE
    by sal
    Post: 6.928
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 11/08/2022 07:50
    Ciao Prova questa macro da inserire nel file di destinazione

    Sub Trascrivi()
    Dim Ind, file, sh1 As Worksheet
    
    Application.DisplayAlerts = False
    Set sh1 = Worksheets("Sheet") 'nome del foglio destinazione
    file = "FileSorgente.xlsx" 'nome del file sorgente
    sh1.Range("A1").CurrentRegion.Clear
    Ind = ActiveWorkbook.Path & "/" & file
    Workbooks.Open Filename:=file, UpdateLinks:=3
    Range("A1").CurrentRegion.Copy sh1.Range("A1")
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    sh1.Activate
    End Sub


    cancella il foglio di destinazione e scrive i dati dal foglio sorgente, ma attenzione il foglio sorgente deve contenere solo il foglio da copiare

    inoltre i 2 file devono stare nella stessa cartella oppure insieme sul desktop.

    Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    BG66
    Post: 363
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Senior
    2010
    00 11/08/2022 09:39
    Ciao By Sal,
    ottengo medesimo errore sia con i due files sul desktop che nella stessa cartella.

    BG66
    Excel 2010
  • OFFLINE
    by sal
    Post: 6.929
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    10 11/08/2022 09:54
    Ciao BG ma i tuoi 2 file come si chiamano, il file destinazione non è importante ma il file sorgente si deve essere uguale

    file = "FileSorgente.xlsx" 'nome del file sorgente


    anche l'estensione, ti faccio un esempio con i tuoi 2 file



    e ti allego anche i tuoi 2 file con la macro

    Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    by sal
    Post: 6.930
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 11/08/2022 10:00
    Hoops dimenticavo, il file sorgente deve essere chiuso ed inoltre ha più fogli, altrimenti devo dargli il nome del foglio, se ne contiene 1 va bene, e non dovrebbe comparire la finestra per l'aggiornamento dei collegamenti, perche l'ho disabilitata con vba.

    al limite il nome del file sorgente potrebbe anche essere messo in una cella nel file destinazione, in modo da non correggere la macro ogni volta che cambia nome, si cambia solo nella cella.

    Ciao By Sal (8-D

    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    darionardella
    Post: 51
    Registrato il: 18/10/2016
    Città: COSENZA
    Età: 65
    Utente Junior
    Excel 2007
    00 15/08/2022 11:41
    BG66 Copia foglio con VBA
    Prova.....
    A me funziona.

    Sub CopiaFoglio()
    On Error Resume Next
    Dim sht As Worksheet
    Dim dest As Worksheet
    Set sht = ActiveSheet
    destinazione = InputBox("Nome Cartella,Foglio destinazione: es: Cartella,Foglio")
    If Len(destinazione) = 0 Then Exit Sub
    mat = Split(destinazione, ",")
    If UBound(mat) < 1 Then Exit Sub
    cartella = mat(0)
    foglio = mat(1)
    Set dest = Workbooks(cartella).Sheets(foglio)
    If dest Is Nothing Then
    percorso = ThisWorkbook.Path & 2 \ " & cartella"
    test = Dir(percorso, vbArchive)
    If Len(test) = 0 Then Exit Sub
    Set wb = Workbooks.Open(percorso)
    bsht = False
    For Each sh In wb.Worksheets
    If UCase(sh.Name) = UCase(foglio) Then
    bsht = True
    Exit For
    End If
    Next sh
    If btrue = False Then Exit Sub
    Set dest = Workbooks(cartella).Sheets(foglio)
    End If
    Set target = dest.Cells(1, 1)
    sht.UsedRange.Copy Destination:=target 'intero range utilizzato nel foglio
    'in alernativa sht.[a1]].currenregion.copy per la tabella che nasce in a1
    esci:
    sht.Cells(1, 1).Select 'deseleziona la selezione copy
    End Sub



  • OFFLINE
    dodo47
    Post: 3.337
    Registrato il: 06/04/2013
    Utente Master
    2010
    00 16/08/2022 10:25
    ciao BG

    il codice di Salvatore (saluti) va leggermente modificato così, tenendo presente che Sorgente e Destinazione debbano risiedere nella medesima cartella;

    Il codice va inserito nel file di destinazione:
    Sub Trascrivi()
    Dim file, sh1 As Worksheet
    Application.DisplayAlerts = False
    Set sh1 = Worksheets("Sheet") 'nome del foglio destinazione
    file = ActiveWorkbook.Path & "\FileSorgente.xlsx" 'nome del file sorgente
    sh1.Range("A1").CurrentRegion.Clear
    Workbooks.Open Filename:=file, UpdateLinks:=3
    Range("A1").CurrentRegion.Copy sh1.Range("A1")
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    sh1.Activate
    End Sub


    Entrambi avete ignorato la variabile Ind che avrebbe contenuto il nome del file con la path completa.
    Ma nel suddetto modo, è inutile utilizzarla.

    Quanto sopra presuppone che tu ogni volta debba copiare il sorgente, eliminando quanto presente in Destinazione.

    Sorgente deve essere chiuso nel momento di esecuzione della macro, altrimenti bisogna variare il codice.

    saluti




    [Modificato da dodo47 16/08/2022 10:27]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    by sal
    Post: 6.938
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 16/08/2022 14:59
    Ciao Domenico, ricambio i saluti, l'avevo fatto il quel modo, solamente perche fosse possibile fare riferimento ad una cella del foglio destinazione inserendo il nome del file sorgente per non intervenire nella macro.


    File = Range("A1")



    Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • 15MediaObject5,00112 1