【问题标题】:Copy all named ranges to another workbook将所有命名范围复制到另一个工作簿
【发布时间】: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


【解决方案1】:

很难说,但我怀疑您的 RefersTo 字符串 >256 个字符:如果是这样,它将失败,因为 VBA 无法处理引用字符串>256 个字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 2020-02-27
    相关资源
    最近更新 更多