› Sviluppare funzionalita su Microsoft Office con VBA › Copiare range celle da un file ad un altro di excel
-
AutoreArticoli
-
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 Suballego 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.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?
eh si...grazie mille il problema della conclusione della macro era proprio quello.
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
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
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 ` -
AutoreArticoli
