2天后编辑:更好的问题解释,固定的复制步骤和额外的结论;现在这也是the bigger question of how to reliably move sheets about -
的一部分我需要将工作表的内容移动到同一工作簿中的新工作表的内容(请参阅这个相当愚蠢的练习的the background)。我最初的猜测是使用sourceSheet.Cells.Cut destSheet.Cells
。
但是,我的工作表都定义了工作表范围的名称,并且它们在工作表之间被引用。当您执行此剪切/粘贴时,您假设所有正在移动的数据的链接将保持原样,并且名称的所有用户都将正确更新。我发现我的恐怖之处在于,Excel将会帮助我们提供帮助。在某些情况下添加并切换到工作表范围的工作表范围的重复名称。
手动执行此操作时也会发生这种情况。采取以下设置:
当您打开名称管理器时,效果是"来源" name仍然被定义为Sheet2和(现在)Sheet3上的工作表范围名称,但它仍然在Sheet1本身上定义。然而,Sheet1上的版本指向Sheet3!A1 ...单元格C1中的Sheet2&#39的公式仍然使用此重定向的Sheet1名称版本。
然而,因为我需要实际刷新'表格(因此移动内容,然后删除原文),我需要采取的下一步是:
完成此操作后,Excel,看到Sheet2仍然使用名称Sheet1!Source,显然有帮助决定将其提升为工作簿范围的名称&#39; Source&#39;仍然指向Sheet3!A1。现在,C1中的Sheet2公式转换为=<workbook file name>!Source
;即它现在指的是特定于工作簿的那个。
然而,这在我的情况下是不可接受的,因为这个工作簿范围的版本严重阻碍了我的解决方案的进一步操作,例如再次复制工作表(现在将使Excel向用户询问它需要使用哪些版本的这些名称在副本中)。我真的只想刷新&#39;这张纸,不是随着时间的推移收集了一百万个旧骨架。
我已经尝试添加名称重复数据删除代码,我将Sheet-scoped版本保留在Sheet3上并将工作簿范围内的一个cq核对。很快就要解决Sheet1的工作表范围(在所有这些之前恢复正确的名称定义)。然而,这会将Sheet2!C1中的公式转换为#NAME?
,这是合乎逻辑的,因为我们只是将它使用的名称推到了它的脚下。现在我还可以添加额外的代码来扫描所有工作表上的所有公式,以便事先或之后修复公式,但这不够,因为例如数据验证列表也可以使用名称 - 这很快就变成了许多我不想拥有的专门代码。
有没有人建议如何绕过这种不幸的情况?
答案 0 :(得分:0)
您的方案不会导致Excel 2010上的重复。但我也不时观察到这一点。
您可以按代码删除全局名称(将公式结果转换为#REF!),然后添加相同的工作表范围名称。工作表上的公式将在不改变任何内容的情况下获取新名称,重新计算就足够了。
这也适用于数据验证来源。在图表中,据我所知,您不能使用命名引用。至于可以使用名称的其他地方,只需测试......