在工作簿之间移动包含表的工作表而不破坏命名范围

时间:2017-01-24 11:44:28

标签: excel excel-vba vba

- 编辑:现在这是bigger question of how to reliably move sheets about -

的一部分

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

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

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

  1. 移动Sheet2;
    • Sheet2仍会在源工作簿中正确链接到Sheet1。
  2. 移动Sheet1本身;
    • Excel'helpfully'为我创建一个与我名称相同的工作簿范围的名称,与Sheet2链接的名称相同(即使之前不存在),其中
    • 此新名称确实指向目标工作簿中已移动的工作表,之后
    • 已经移动的Sheet2的链接被修改为指向源工作簿中的这个新工作簿范围名称,因此
    • 弄乱了无法修复的链接。
  3. 即使我可以通过事先分析公式来扫描所有表单依赖关系来克服这个问题,因为表单可能在它们之间有双向链接,但似乎我不能这样做。

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

    所以看来我在这里非常运气......当然有以下选项:

    1. 单独移动工作表并在之后重建所有公式,
    2. 用范围替换所有表并在之后重建所有表
    3. 但我可以理解想要去那里,因为我无法控制床单上的内容......

      任何替代方案?

      - 编辑 -

      这个问题的真正目的是我需要将工作表移动到临时.xlsx工作簿,保存/关闭/重新打开该工作簿,然后再将它们移回原始的.xlsm工作簿,从而擦除他们离开了他们的VBA模块。请参阅我的other SO post了解背景信息,但是当我写下这个问题时,我设想只需要擦除范围名称链接层次结构中的最顶层工作表,但事实证明我需要为所有工作表安全够了。

      经过大量的反复试验后,我发现移动或复制所有纸张都是不可行的,因为它们上面的表格,并且一次处理一个真的会弄乱公式和命名范围将它们链接在一起(甚至.Copy具有与使用.Move)类似的不良副作用。虽然我可以反过来编写代码来“修复”这些破碎的名称或删除这些“有用添加”的流氓名称,但如果其他范围链接机制(如图表源,数据源,数据验证列表源,表单控件),我也不会感到惊讶连接的细胞等也表现得非常糟糕,这使得这个问题更加严重......

0 个答案:

没有答案