Graeme的工作簿中定义了许多(120+)个命名范围。他想将范围名称和定义复制到另一个工作簿中。因此,复制后,在原始工作簿中将存在一个名为MyRange1的范围,该范围引用原始工作簿中的范围C7:H22,并在目标工作簿中引用相同的范围。

不得将其他任何内容从原始工作簿复制到目标-只是范围名称和定义。

最简单的方法是使用一个宏,该宏将逐步遍历您定义的每个名称,并将名称定义复制到目标工作簿中。这是一个示例:

Sub CopyNames()

Dim Source As Workbook     Dim Target As Workbook     Dim n As Name

Set Source = ActiveWorkbook     Set Target = Workbooks("Book2.xlsx")



For Each n In Source.Names         Target.Names.Add Name:=n.Name, RefersTo:=n.Value     Next End Sub

请注意,宏中的大部分工作都是在For Each循环中完成的,该循环逐步遍历所有已定义的名称。它在目标工作簿中创建名称,并为其分配与源工作簿中相同的名称(包含在Value属性中)。

应当注意,默认情况下,命名范围在Value属性中包括工作表的名称。如果源工作簿具有一个引用了Sheet4的命名范围,而目标工作簿中没有Sheet4,则添加名称失败。宏不会产生错误。它根本不会创建新的命名范围。解决方案是(a)确保目标工作簿包含与源工作簿相同的工作表名称,或者(b)修改宏,以便它识别出缺少工作表并采取适当的措施。

如果您不想创建宏,那么最简单的方法可能是将工作表从源工作簿复制到目标工作簿。

Excel通常会将命名范围与工作表一起复制。唯一不能令人满意的方法是,如果目标工作簿已经具有与您要复制的工作表同名的工作表。在这种情况下,最好使用宏方法。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(8811)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: