Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 不需要的范围名称移动怪异_Vba_Excel_Excel Formula - Fatal编程技术网

Vba 不需要的范围名称移动怪异

Vba 不需要的范围名称移动怪异,vba,excel,excel-formula,Vba,Excel,Excel Formula,2天后编辑:更好的问题解释,固定的复制步骤,增加额外的结论;现在,这也是- 我需要将工作表的内容移动到同一工作簿中的新工作表的内容,请参见这个相当愚蠢的练习。我最初的猜测是使用sourceSheet.Cells.Cut destSheet.Cells 但是,我的工作表都定义了工作表范围的名称,它们在工作表之间被引用。当您执行此剪切/粘贴操作时,您会假定指向正在移动的数据的所有链接都将保持原样,并且名称的所有用户都将正确更新。令我震惊的是,在某些情况下,Excel将“有益地”添加并切换到工作簿范围

2天后编辑:更好的问题解释,固定的复制步骤,增加额外的结论;现在,这也是-

我需要将工作表的内容移动到同一工作簿中的新工作表的内容,请参见这个相当愚蠢的练习。我最初的猜测是使用sourceSheet.Cells.Cut destSheet.Cells

但是,我的工作表都定义了工作表范围的名称,它们在工作表之间被引用。当您执行此剪切/粘贴操作时,您会假定指向正在移动的数据的所有链接都将保持原样,并且名称的所有用户都将正确更新。令我震惊的是,在某些情况下,Excel将“有益地”添加并切换到工作簿范围的工作表范围名称副本

手动执行此操作时也会发生这种情况。采用以下设置:

图纸1和图纸2在A1上都有一个名为Source set的图纸特定名称 表1和表2均通过公式=源在B1中使用该名称 Sheet2还通过公式=Sheet1在C1中引用Sheet1的来源!来源 现在选择Sheet1上的所有内容,并将其粘贴到Sheet3上 打开“名称管理器”时,其效果是源名称仍然在Sheet2和Sheet3上定义为图纸范围的名称,但它也仍然在Sheet1本身上定义。但是,表1上的版本指向表3!A1。。。单元格C1中的Sheet2公式仍然使用此重定向Sheet1名称版本

但是,由于我需要实际“刷新”工作表,以便移动内容,然后删除原始内容,因此我需要采取的下一步是:

把旧床单从它的痛苦中放出来,然后 此处不相关请将旧表的名称告知新表 完成后,Excel会看到Sheet2仍然使用Sheet1的名称!显然,Source决定将其升级为工作簿范围的名称“Source”,仍然指向Sheet3!A1。Sheet2在C1中的公式现在转换为=!来源i、 e.它现在指的是特定于工作簿的工作簿

然而,在我的情况下,这是不可接受的,因为此工作簿范围的版本严重阻碍了我解决方案的进一步操作,例如再次复制工作表,这将使Excel询问用户在副本中需要使用这些名称的哪个版本。我真的只想“刷新”表格,而不是随着时间的推移收集它的一百万个旧骨架

我已经尝试添加名称消除重复代码,在这里,我将工作表范围的版本保留在Sheet3上,并将工作簿范围核化为一个cq。工作表的作用域是一个,很快就会关闭Sheet1,恢复之前的专有名称定义。然而,这将改变表2中的公式!C1到NAME?,这是合乎逻辑的,因为我们只是把它使用的名称从它的脚下推出来。现在,我还可以添加额外的代码来扫描所有工作表上的所有公式,以便在之前或之后修复公式,但这还不够,因为例如,数据验证列表也可以使用名称-这很快就会成为我不希望拥有的大量专门代码

因此,似乎移动工作表的内容(与工作表本身分离)会使范围名称在该点分叉,分叉的两个分支随后将被工作簿的不同部分使用。换句话说就是一团糟


有没有人对我如何绕过这一不幸局面提出建议

您的方案不会在my Excel 2010上造成重复。然而,我也不时观察到这一点

您可以通过代码将公式结果转换为REF!来删除全局名称!,然后添加一个相同的工作表范围名称。工作表上的公式将在不更改任何内容的情况下拾取新名称,重新计算就足够了


这也适用于数据验证源。据我所知,在图表中不能使用命名引用。至于其他可以使用名称的地方,只需测试…

您的场景不会在my Excel 2010上造成重复。然而,我也不时观察到这一点

您可以通过代码将公式结果转换为REF!来删除全局名称!,然后添加一个相同的工作表范围名称。工作表上的公式将在不更改任何内容的情况下拾取新名称,重新计算就足够了


这也适用于数据验证源。据我所知,在图表中不能使用命名引用。至于其他可以使用名字的地方,只需测试一下…

很抱歉我的回复太晚了,我和Flu女士约会了。我也尝试了我的步骤,发现我也无法复制它们——我真正试图描述的情况还包括在之后删除Sheet1。我将用这个细节更新这个问题。不幸的是,在这种情况下,recalc再也不能修复它了……很抱歉我和Flu女士约会的回复太晚了。我也尝试了我的步骤,发现我也无法重现它们——我真正试图描述的情况还包括删除Sheet1 aft 埃尔沃兹。我将用这个细节更新这个问题。不幸的是,在这种情况下,recalc无法修复它。。。