在工作簿之间移动包含表的工作表,而不中断命名范围

– 编辑:这是如何可靠地移动床单的大问题的一部分 –

我有一个工作簿,其中有工作表包含表和工作表范围的命名范围。 这些表中的一些公式链接到其他工作表上某些名称(例如=Sheet1!Sheet1LocalName在Sheet2上的某处)。

现在已经到了创build将这些表单移动到另一个工作簿的VBA代码的时候了。 这样做,我希望所有现有的function保持不变。

当循环遍历所有工作表和Worksheet.Move一次一个到另一个工作簿时,公式之间的范围名称链接被打破。 例如,当Sheet2在其公式之一中使用Sheet1上的名称时:

  1. 移到Sheet2上面;
    • Sheet2仍将正确链接到源工作簿中的Sheet1。
  2. 移过Sheet1本身;
    • Excel'帮助'为我创build一个工作簿范围的名称与我名字Sheet2链接到的名称(即使它以前不存在),其中
    • 这个新名称将指向目标工作簿中已移动的工作表,之后
    • 已经移动的Sheet2的链接被修改为指向源工作簿中的这个新的工作簿范围名称
    • 弄乱无法修复的链接。

即使我可以通过预先分析公式来克服这个问题,以扫描所有的纸张依赖关系,因为纸张之间可能有两个方向的链接,似乎我不能这样做。

使用ThisWorkbook.Worksheets(Array(name1, name2)).Move移动所有工作表时ThisWorkbook.Worksheets(Array(name1, name2)).Move ,出现Excel错误“无法复制或移动一组包含表格的工作表”。

所以看起来我在这里运气很差……当然有以下选项:

  1. 然后单独移动纸张,然后重新制作所有配方
  2. 用范围replace所有表格,然后重build所有表格

但我可以理解,不想去那里,因为我不能控制床单上的东西。

任何替代品?

– 编辑 –

这个问题的真正目的是,我需要将工作表移到临时的.xlsx工作簿中,保存/closures/重新打开该工作簿,然后将它们移回到原始的.xlsm工作簿,从而将其清理掉他们的VBA模块。 看到我的其他SOpost的背景,虽然当我写了这个问题,我想只需要擦洗范围名称链接层次结构中的最上面的工作表,但事实certificate,我需要做的所有工作表是足够安全的。

经过大量的反复试验,我发现移动或复制所有的纸张是不可行的,因为他们的表格,一次处理一个真正的混乱公式和命名范围链接在一起(甚至.Copy也有使用.Copy类似的不想要的副作用)。 虽然我可以写代码来“修复”这些破损的名字或删除这些“有帮助添加”的stream氓名称,我不会感到惊讶,如果其他范围链接机制(如图表来源,数据透视源,数据validation列表来源,表单控件连接的细胞等)也performance不好,使得这个问题变得更加混乱。