【发布时间】:2018-03-28 15:40:42
【问题描述】:
因此,我一直对 Microsoft 支持对此问题的回答大惊小怪,但他们的代码根本无法正常工作。我很困惑他们如何不定义 x,或者 x 总是等于 VBA 中的变量?无论如何,我正在尝试将 all 命名范围复制到一个工作簿中并将它们带到另一个工作簿中。我必须为 50 多个工作簿执行此操作,并且基础工作簿中有 30-40 个命名范围。我真的不想手动复制粘贴这些虫子。这是他们为这个问题提供的代码:
Sub Copy_All_Defined_Names()
' Loop through all of the defined names in the active
' workbook.
For Each x In ActiveWorkbook.Names
' Add each defined name from the active workbook to
' the target workbook ("Book2.xls" or "Book2.xlsm").
' "x.value" refers to the cell references the
' defined name points to.
Workbooks("trial run.xlsm").Names.Add Name:=x.Name, _
RefersTo:=x.Value
Next x
End Sub
运行它会给我以下错误:
并突出显示以下代码:
“试运行.xlsm”只是一个空白工作簿,保存为启用宏;这是我的目标工作簿。不得不寻求帮助调试微软编写的宏似乎很愚蠢,但我在这里有点走投无路。
对于我从中获得的原始页面,请参见此处:Microsoft Support
这是我的命名范围的样子:
【问题讨论】:
-
试运行工作簿是否打开?
-
您是否尝试将 x 调暗为范围?
-
@EvanCallahan,您会立即得到类型不匹配,因为
Names集合包含Name对象。您应该标注 x,但Dim x As Name(您还应该给它一个更好的变量名!) -
哈哈抱歉,是
Name:=x.Name部分让我认为 x 可能是一个范围,然后 VBA 会识别该范围的名称。还在自学! -
@EvanCallahan 我不怪你。这就是恰当的例子——如果你不仔细命名变量,就会发生这种情况!
标签: excel vba copy named-ranges