maurogsc.eu
mauro gamberini


home ==> Excel: come fare per ==> Copia/incolla fra due fogli di files differenti

Copia/incolla fra due fogli di files differenti - VBA

NOTA. La soluzione ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dal codice o dalla soluzione proposta se usati impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare il codice o la soluzione in files importanti.

0 - Contenuto

  1. Premessa e contesto (leggere!)
  2. Copia/incolla la cella A1 del Foglio1 del FileUno.xls nella cella A1 del Foglio1 del FileDue.xls(tutto)
  3. Copia/incolla la cella A1 del Foglio1 del FileUno.xls nella cella A1 del Foglio1 del FileDue.xls(valore)
  4. Copia/incolla del Range A1:C10 del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(tutto)
  5. Copia/incolla del Range A1:C10 del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(valore)
  6. Copia/incolla di celle non attigue(A1:A10, C1:C10) del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(tutto)
  7. Copia/incolla di celle non attigue(A1:A10, C1:C10) del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(valore)

1 - Premessa e contesto. (top)
Modificate i riferimenti alle celle, i nomi dei fogli ed i nomi dei files con i vostri. Negli esempi mi riferirò ai Fogli1 dei file: FileUno.xls, FileDue.xls. Negli esempi viene sempre utilizzata quella che in Excel è chiamata programmazione ad oggetti e vengono sempre evitati gli inutili Select/Activate che, oltre a rallentare l'esecuzione del codice, sono forieri di grossi guai.

2 - Copia/incolla la cella A1 del Foglio1 del FileUno.xls nella cella A1 del Foglio1 del FileDue.xls(tutto). (top)
Vengono copiati il contenuto (valore o funzione/formula) e le formattazioni della cella (non quelle relative alle dimensioni di riga e colonna). Codice da copia/incollare in un modulo standard del file FileUno.xls.

    1. Nell'esempio viene considerato già aperto il file FileDue.xls nella stessa sessione di Excel del FileUno.xls. Se il file FileDue.xls è chiuso, vedi il punto 2.2.

Public Sub m()
    
    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore
    
    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks("FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")
    
    With sh1
        'copio i dati da un file all'altro
        .Range("A1").Copy Destination:=sh2.Range("A1")
    End With
    
'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub
    
'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
    
End Sub

    2. Nell'esempio viene considerato chiuso il file FileDue.xls. Il file verrà aperto e quindi, una volta eseguita il copia/incolla, verrà salvato e chiuso. Se il file FileDue.xls è aperto, vedi il punto 2.1.

Public Sub m()
    
    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore
    
    Application.ScreenUpdating = False
    
    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks.Open(wk1.Path & "/" & "FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")
    
    With sh1
        'copio i dati da un file all'altro
        .Range("A1").Copy Destination:=sh2.Range("A1")
    End With
    
    'salvo le modifiche al file FileDue.xls
    wk2.Save
    'chiudo il file FileDue.xls
    wk2.Close
    
    Application.ScreenUpdating = True
    
'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub
    
'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
    
End Sub

3 - Copia/incolla la cella A1 del Foglio1 del FileUno.xls nella cella A1 del Foglio1 del FileDue.xls(valore). (top)
Viene copiato solo il valore (non la funzione/formula o le formattazioni). Codice da copia/incollare in un modulo standard del file FileUno.xls.

    1. Nell'esempio viene considerato già aperto il file FileDue.xls nella stessa sessione di Excel del FileUno.xls. Se il file FileDue.xls è chiuso, vedi il punto 3.2.

Public Sub m()
    
    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore
    
    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks("FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")
    
    With sh1
        'copio i dati da un file all'altro
        sh2.Range("A1").Value = .Range("A1").Value
    End With
    
'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub
    
'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
    
End Sub

    2. Nell'esempio viene considerato chiuso il file FileDue.xls. Il file verrà aperto e quindi, una volta eseguita il copia/incolla, verrà salvato e chiuso. Se il file FileDue.xls è aperto, vedi il punto 3.1.

Public Sub m()
    
    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore
    
    Application.ScreenUpdating = False
    
    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks.Open(wk1.Path & "/" & "FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")
    
    With sh1
        'copio i dati da un file all'altro
        sh2.Range("A1").Value = .Range("A1").Value
    End With
    
    'salvo le modifiche al file FileDue.xls
    wk2.Save
    'chiudo il file FileDue.xls
    wk2.Close
    
    Application.ScreenUpdating = True
    
'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub
    
'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
    
End Sub

4 - Copia/incolla del Range A1:C10 del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(tutto). (top)
Vengono copiati il contenuto (valore o funzione/formula) e le formattazioni delle celle (non quelle relative alle dimensioni di riga e colonna). Codice da copia/incollare in un modulo standard del file FileUno.xls.

    1. Nell'esempio viene considerato già aperto il file FileDue.xls nella stessa sessione di Excel del FileUno.xls. Se il file FileDue.xls è chiuso, vedi il punto 4.2.

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks("FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'copio i dati da un file all'altro
        .Range("A1:C10").Copy Destination:=sh2.Range("A1")
    End With

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

    2. Nell'esempio viene considerato chiuso il file FileDue.xls. Il file verrà aperto e quindi, una volta eseguita il copia/incolla, verrà salvato e chiuso. Se il file FileDue.xls è aperto, vedi il punto 4.1.

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore

    Application.ScreenUpdating = False

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks.Open(wk1.Path & "/" & "FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'copio i dati da un file all'altro
        .Range("A1:C10").Copy Destination:=sh2.Range("A1")
    End With

    'salvo le modifiche al file FileDue.xls
    wk2.Save
    'chiudo il file FileDue.xls
    wk2.Close

    Application.ScreenUpdating = True

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

5 - Copia/incolla del Range A1:C10 del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(valore). (top)
Viene copiato solo il valore (non la funzione/formula o le formattazioni). Codice da copia/incollare in un modulo standard del file FileUno.xls.

    1. Nell'esempio viene considerato già aperto il file FileDue.xls nella stessa sessione di Excel del FileUno.xls. Se il file FileDue.xls è chiuso, vedi il punto 5.2.

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks("FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'copio i dati da un file all'altro
        .Range("A1:C10").Copy
        sh2.Range("A1").PasteSpecial xlPasteValues
    End With
    Application.CutCopyMode = False

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

    2. Nell'esempio viene considerato chiuso il file FileDue.xls. Il file verrà aperto e quindi, una volta eseguita il copia/incolla, verrà salvato e chiuso. Se il file FileDue.xls è aperto, vedi il punto 5.1.

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

'gestione errori
On Error GoTo RigaErrore

    Application.ScreenUpdating = False

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks.Open(wk1.Path & "/" & "FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'copio i dati da un file all'altro
        .Range("A1:C10").Copy
        sh2.Range("A1").PasteSpecial xlPasteValues
    End With
    Application.CutCopyMode = False
    
    'salvo le modifiche al file FileDue.xls
    wk2.Save
    'chiudo il file FileDue.xls
    wk2.Close

    Application.ScreenUpdating = True

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

6 - Copia/incolla di celle non attigue(A1:A10, C1:C10) del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(tutto). (top)
Vengono copiati il contenuto (valore o funzione/formula) e le formattazioni delle celle (non quelle relative alle dimensioni di riga e colonna).

    1 -  Nell'esempio viene considerato già aperto il file FileDue.xls nella stessa sessione di Excel del FileUno.xls. Se il file FileDue.xls è chiuso, vedi il punto 6.2. Vengono copiati i Range A1:A10 e C1:C10 del Foglio1 del FileUno.xls che verranno incollati in A1:B10 del Foglio1 del FileDue.xls. Codice da copia/incollare in un modulo standard del FileUno.xls.

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim rng As Range

'gestione errori
On Error GoTo RigaErrore

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks("FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'metto un riferimento al range da copiare
        Set rng = Union(.Range("A1:A10"), .Range("C1:C10"))
        'copio da un file all'altro
        rng.Copy Destination:=sh2.Range("A1")
    End With

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set rng = Nothing
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

    2 - Nell'esempio viene considerato chiuso il file FileDue.xls. Il file verrà aperto e quindi, una volta eseguita il copia/incolla, verrà salvato e chiuso. Se il file FileDue.xls è aperto, vedi il punto 6.1. Vengono copiati i Range A1:A10 e C1:C10 del Foglio1 del FileUno.xls che verranno incollati in A1:B10 del Foglio1 del FileDue.xls. Codice da copia/incollare in un modulo standard del FileUno.xls.

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim rng As Range

'gestione errori
On Error GoTo RigaErrore

    Application.ScreenUpdating = False

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks.Open(wk1.Path & "/" & "FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'metto un riferimento al range da copiare
        Set rng = Union(.Range("A1:A10"), .Range("C1:C10"))
        'copio da un file all'altro
        rng.Copy Destination:=sh2.Range("A1")
    End With
    
    'salvo le modifiche al file FileDue.xls
    wk2.Save
    'chiudo il file FileDue.xls
    wk2.Close
    
    Application.ScreenUpdating = True

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set rng = Nothing
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

7 - Copia/incolla di celle non attigue(A1:A10, C1:C10) del Foglio1 del FileUno.xls a partire dalla cella A1 del Foglio1 del FileDue.xls(valore). (top)
Viene copiato solo il valore (non la funzione/formula o le formattazioni)..

    1 - Nell'esempio viene considerato già aperto il file FileDue.xls nella stessa sessione di Excel del FileUno.xls. Se il file FileDue.xls è chiuso, vedi il punto 7.2. Vengono copiati i Range A1:A10 e C1:C10 del Foglio1 del FileUno.xls che verranno incollati in A1:B10 del Foglio1 del FileDue.xls. Codice da copia/incollare in un modulo standard del FileUno.xls

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim rng As Range

'gestione errori
On Error GoTo RigaErrore

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks("FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'metto un riferimento al range da copiare
        Set rng = Union(.Range("A1:A10"), .Range("C1:C10"))
        'copio da un file all'altro
        rng.Copy
        sh2.Range("A1").PasteSpecial xlPasteValues
    End With
    Application.CutCopyMode = False

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set rng = Nothing
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

    2 - Nell'esempio viene considerato chiuso il file FileDue.xls. Il file verrà aperto e quindi, una volta eseguita il copia/incolla, verrà salvato e chiuso. Se il file FileDue.xls è aperto, vedi il punto 7.1. Vengono copiati i Range A1:A10 e C1:C10 del Foglio1 del FileUno.xls che verranno incollati in A1:B10 del Foglio1 del FileDue.xls. Codice da copia/incollare in un modulo standard del FileUno.xls.

Public Sub m()

    'dichiaro le variabili
    Dim wk1 As Workbook
    Dim wk2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim rng As Range

'gestione errori
On Error GoTo RigaErrore

    Application.ScreenUpdating = False

    'metto i riferimenti ai files
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks.Open(wk1.Path & "/" & "FileDue.xls")
    'metto i riferimenti ai fogli
    Set sh1 = wk1.Worksheets("Foglio1")
    Set sh2 = wk2.Worksheets("Foglio1")

    With sh1
        'metto un riferimento al range da copiare
        Set rng = Union(.Range("A1:A10"), .Range("C1:C10"))
        'copio da un file all'altro
        rng.Copy
        sh2.Range("A1").PasteSpecial xlPasteValues
    End With

    With Application
        .CutCopyMode = False
        .ScreenUpdating = True
    End With

    'salvo le modifiche al file FileDue.xls
    wk2.Save
    'chiudo il file FileDue.xls
    wk2.Close

'riga sempre eseguita
RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set rng = Nothing
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set wk1 = Nothing
    Set wk2 = Nothing
    Exit Sub

'in caso di errore
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub

Per ulteriori informazioni su Microsoft Excel ed il suo Visual Basic, utilizzate questo forum:
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads


Ultimo aggiornamento di questa pagina: 21/02/2011 - mauro gamberini