Code VBA pour copier des feuilles de calcul contenant des plages nommées de la source au classeur de destination

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

Question

J'ai 2 classeurs. Un classeur source et un classeur de destination. Ils sont complètement les mêmes, sauf pour 1 feuille de calcul qui a le même nom dans les deux mais différentes données (les deux contiennent environ 30 feuilles). Ce que je voulais, c'était copier le reste des feuilles de travail identiques du classeur source au classeur de destination, laissant cette feuille de calcul qui s'engage dans les données.

Fondamentalement, les feuilles de calcul identiques présentes dans le classeur de destination doivent être remplacées par celles du classeur source. Les feuilles de calcul contiennent des formules et des gammes nommées. J'ai réussi à rédiger le code VBA pour copier les feuilles de calcul. Mais puisque les gammes nommées ont une portée du classeur. Les gammes nommées se réfèrent toujours aux emplacements dans les classeurs source. J'ai donc 2 gammes nommées avec le même nom. Quelque chose comme:

'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 

Je veux que les gammes nommées se réfèrent au classeur de destination et non au classeur source lorsque je les copie. Étant donné que toutes les feuilles des deux classeurs sont les mêmes et que je les remplace.

Était-ce utile?

La solution

Un moyen facile de contourner la création de liens par inadver

Capture d'écran pour XL2010

  • EDIT .... Liens
  • «Changer la source» et choisissez le fichier actuel comme nouvelle source

enter image description here

Autres conseils

Cela modifiera les plages nommées pour supprimer la référence de fichier externe:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top