Codice VBA per copiare fogli di lavoro contenenti intervalli denominati dalla cartella di lavoro di origine a quella di destinazione
-
28-10-2019 - |
Domanda
Ho 2 cartelle di lavoro. Una cartella di lavoro di origine e una cartella di lavoro di destinazione. Sono completamente uguali ad eccezione di 1 foglio di lavoro che ha lo stesso nome in entrambi ma dati diversi (entrambi contengono circa 30 fogli). Quello che volevo era copiare il resto dei fogli di lavoro identici dalla cartella di lavoro di origine alla cartella di lavoro di destinazione lasciando quel foglio di lavoro 1 che rimanda nei dati.
Fondamentalmente, i fogli di lavoro identici presenti nella cartella di lavoro di destinazione dovrebbero essere sostituiti con quelli della cartella di lavoro di origine. I fogli di lavoro contengono formule e intervalli denominati. Sono riuscito a scrivere con successo il codice VBA per copiare i fogli di lavoro. Ma poiché gli intervalli denominati hanno un ambito della cartella di lavoro. Gli intervalli denominati fanno ancora riferimento alle posizioni nelle cartelle di lavoro di origine. Quindi ottengo 2 intervalli denominati con lo stesso nome. Qualcosa come:
'The one already present in the destination workbook (from the worksheet which was replaced)
Name=VaccStart , Refers To =Sheet2!$A$2
'The one due to the copied worksheet.
Name=VaccStart , Refers To =[C:\Users\.....\Source.xls]Sheet2!$A$2
Voglio che gli intervalli denominati facciano riferimento alla cartella di lavoro di destinazione e non alla cartella di lavoro di origine quando li copio. Poiché tutti i fogli in entrambe le cartelle di lavoro sono uguali e li sto solo sostituendo.
Soluzione
Un modo semplice per aggirare la creazione involontaria di collegamenti quando ci si sposta da una cartella di lavoro di origine a quella di destinazione è ricollegare la cartella di lavoro di destinazione dall'origine a se stessa
Screenshot per xl2010
- Modifica .... link
- "Modifica origine" e seleziona il file corrente come nuova origine
Altri suggerimenti
Ciò modificherà gli intervalli denominati per rimuovere il riferimento al file esterno:
Sub ResetNamedRanges()
Dim nm As Name
Dim sRefersTo As String
Dim iLeft As Integer
Dim iRight As Integer
For Each nm In ActiveWorkbook.Names
sRefersTo = nm.RefersTo
iLeft = InStr(sRefersTo, "[")
iRight = InStr(sRefersTo, "]")
If iLeft > 1 And iRight > 0 Then
sRefersTo = Left$(sRefersTo, iLeft - 1) & Mid$(sRefersTo, iRight + 1)
nm.RefersTo = sRefersTo
End If
Next nm
End Sub