Sviluppare funzionalita su Microsoft Office con VBA Copiare range celle da un file ad un altro di excel

Login Registrati
Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)
  • Autore
    Articoli
  • #44689 Score: 0 | Risposta

    FROST220684
    Partecipante

      Ciao a tutti sto cercando di compilare un codice che mi permette di copiare un range di celle da una file ad altri 2/3 tutti uguali.

      Mi spiego meglio ho 3 file identici (3 operatori) che periodicamente devono essere aggiornati in alcune celle per l'esattezza il Range(A1:J48) del foglio "Tabella Prezzi" vorrei inserire una macro che mi permetta di aggiornare i dati sul mio file e copiare i dati sui fogli dei miei colleghi. Sto usando questo codice che pero mi crea alcuni problemi:

      1. Mi funziona solo sul primo file di copia dati, quando arriva il secondo file mi da errore 13 - Tipo non corrispondente, mi apre il file ma non copia i dati, non lo salva e non lo chiude

      2. Sul primo file invece mi salva i dati parzialmente praticamente mi arriva fino al range (a1:j23)

      Non capisco cosa c'è che non va

      Public Sub CopiaDati()
       
          'dichiaro le variabili
          Dim wk1 As Workbook
          Dim wk2 As Workbook
          Dim wk3 As Workbook
          Dim sh1 As Worksheet
          Dim sh2 As Worksheet
          Dim sh3 As Worksheet
          Dim V As Variant
      
      'gestione errori
      On Error GoTo RigaErrore
       
          Application.ScreenUpdating = False
       
          'metto i riferimenti ai files
          Set wk1 = ThisWorkbook
          Set wk2 = Workbooks.Open("C:\Users\Eurolido\Desktop\immagini userform\Preventivi 5.0 prova.xlsm")
          Set wk3 = Workbooks.Open("C:\Users\Eurolido\Desktop\immagini userform\Preventivi 5.0 prova 2.xlsm")
          'metto i riferimenti ai fogli
          Set sh1 = wk1.Worksheets("Tabelle Prezzi")
          Set sh2 = wk2.Worksheets("Tabelle Prezzi")
          Set sh3 = wk2.Worksheets("Tabelle Prezzi")
       
          With sh1
              'copio i dati da un file all'altro
              .Range("A:J").CurrentRegion.Copy Destination:=sh2.Range("A1")
              
          End With
          For Each V In wk2.LinkSources(Type:=xlLinkTypeExcelLinks)
              wk2.BreakLink Name:=V, Type:=xlLinkTypeExcelLinks
          Next
          wk2.Save
          wk2.Close
      'Elimino i collegamenti ai nuovi file e salvo e chiudo
          With sh1
          .Range("A:J").CurrentRegion.Copy Destination:=sh3.Range("A1")
          End With
          For Each V In wk3.LinkSources(Type:=xlLinkTypeExcelLinks)
              wk3.BreakLink Name:=V, Type:=xlLinkTypeExcelLinks
              Next
          wk3.Save
          wk3.Close
         
          
       
          Application.ScreenUpdating = True
       
      
      RigaChiusura:
         
          Set sh2 = Nothing
          Set sh1 = Nothing
          Set sh3 = Nothing
          Set wk1 = Nothing
          Set wk2 = Nothing
          Set wk3 = Nothing
          Exit Sub
       
      'in caso di errore
      RigaErrore:
          MsgBox Err.Number & vbNewLine & Err.Description
          Resume RigaChiusura
       
      End Sub

      allego file, per fare delle prove basta creare 3 file identici, cambiare i percorsi con quelli corretti e modificare qualche dato del range(a1:j48) per vedere se la copia va a buon fine

      Allegati:
      You must be logged in to view attached files.
      #44692 Score: 0 | Risposta

      Luca73
      Partecipante
        58 pts

        Ciao:

        Attenzione c'è un errore nella definizione di Sh3 deve far riferimento a Wk3 non a wk2

        Così come è scritto non incolla in sh3 perchè è chiuso in quanto è un sheet di Wk2

        Perchè invece di copiare ed eliminare i link non fai una copia di solo valori?

        #44694 Score: 0 | Risposta

        FROST220684
        Partecipante

          eh si...grazie mille il problema della conclusione della macro era proprio quello.

          Luca73 ha scritto:

          Perchè invece di copiare ed eliminare i link non fai una copia di solo valori?

          sono aperto a nuove possibilità se hai da consigliare non saprei come fare

          Rimane cmq un problema che non mi spiego:

          io in questo codice gli chiedo di copiarmi le colonne che vanno da (A:J), mi dovrebbe copiare tutte le colonne invece mi copia i dati fino alla riga 24 in effetti nella 25 c'è uno spazio quindi secondo me trova lo spazio e si ferma ma non so come modificarlo

          #44695 Score: 0 | Risposta

          FROST220684
          Partecipante

            FROST220684 ha scritto:

            Rimane cmq un problema che non mi spiego:

            io in questo codice gli chiedo di copiarmi le colonne che vanno da (A:J), mi dovrebbe copiare tutte le colonne invece mi copia i dati fino alla riga 24 in effetti nella 25 c'è uno spazio quindi secondo me trova lo spazio e si ferma ma non so come modificarlo

            vabbè ho risolto è bastato mettere un carattere nella riga vuota. In effetti si ferma alla prima riga vuota

            #44697 Score: 0 | Risposta

            Aldo Ercolini
            Partecipante
              19 pts

              Vedo che hai gia' risolto. In ogni caso io varei fatto cosi' (Non da nemmeno l'errore tipo non corrispondente)

              `Public Sub CopiaDati()
               
                  'dichiaro le variabili
                  Dim wk2 As Workbook
                  Dim wk3 As Workbook
                  Dim uRiga As Long
                  Dim r As Range
              
                  'gestione errori
                  On Error GoTo RigaErrore
               
                  Application.ScreenUpdating = False
              
                  With Sheets("Tabelle Prezzi")
                      uRiga = .Range("A" & Rows.Count).End(xlUp).Row
                      Set r = .Range(.Cells(1, 1), .Cells(uRiga, "K"))
                  End With
                     
                  'copio i dati da un file all'altro
                  Set wk2 = Workbooks.Open("("C:\Users\Eurolido\Desktop\immagini userform\Preventivi 5.0 prova.xlsm")
                  r.Copy wk2.Sheets("Tabelle Prezzi").Range("A1")
                  Application.CutCopyMode = False
                  wk2.Close SaveChanges:=True
              
                  Set wk3 = Workbooks.Open("C:\Users\a.ercolini.INTRA\Desktop\Preventivi 5.0 prova 2.xlsm")
                  r.Copy wk3.Sheets("Tabelle Prezzi").Range("A1")
                  Application.CutCopyMode = False
                  wk3.Close SaveChanges:=True
                 
                  Application.ScreenUpdating = True
               
              
              RigaChiusura:
                 
                  Set wk2 = Nothing
                  Set wk3 = Nothing
                  Exit Sub
               
              'in caso di errore
              RigaErrore:
                  MsgBox Err.Number & vbNewLine & Err.Description
                  Resume RigaChiusura
               
              End Sub
              `
            Login Registrati
            Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)
            Rispondi a: Copiare range celle da un file ad un altro di excel
            Gli allegati sono permessi solo ad utenti REGISTRATI
            Le tue informazioni: