Codice VBA per copiare fogli di lavoro contenenti intervalli denominati dalla cartella di lavoro di origine a quella di destinazione

StackOverflow https://stackoverflow.com/questions/8404713

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.

È stato utile?

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

inserisci qui la descrizione dell'immagine

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top