VBA代码复制包含从源到目标工作簿的命名范围的工作表

时间:2011-12-06 18:15:57

标签: excel-vba worksheet named-ranges vba excel

我有2本工作簿。源工作簿和目标工作簿。它们是完全相同的,除了1个工作表,它们在两个但不同的数据中都有相同的名称(两者都包含大约30张)。我想要的是将其余相同的工作表从源工作簿复制到目标工作簿,留下一个延迟数据的工作表。

基本上,目标工作簿中存在的相同工作表应替换为源工作簿中的工作表。工作表包含公式和命名范围。 我成功地编写了VBA代码来复制工作表。但由于命名范围具有工作簿范围。命名范围仍引用源工作簿中的位置。所以我得到了两个名字相同的名字。类似的东西:

'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 

我希望命名范围在复制时引用目标工作簿而不是源工作簿。由于两个工作簿中的所有工作表都是相同的,我只是替换它们。

2 个答案:

答案 0 :(得分:1)

这将修改命名范围以删除外部文件引用:

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

答案 1 :(得分:1)

在从源工作簿移动到目标工作簿时,一种简单的方法来解决无意中的链接创建是将目标工作簿从Source重新链接到自身

xl2010的截图

  • 编辑....链接
  • '更改来源'并选择当前文件作为新来源

enter image description here