繁体   English   中英

使用 VBA 将所有命名范围复制到另一个工作簿

[英]Copy All Named Ranges To Another Workbook With VBA

请先阅读以下帖子; 将所有命名范围复制到另一个工作簿 我正在尝试相同的方法,此页面上的答案和其他网站上的信息使我无处可去。

我稍微修改了代码。 使用此代码,我收到以下错误; 错误 1004“应用程序定义或对象定义的错误”。 非常感谢帮助。 错误显示在以下行:'ThisWorkbook.Names.Add Name:=x.Name, RefersTo:=x.Value'

Sub CopyNames()
'Gedefineerde namen kopiëren naar andere werkmap.
    Dim x As Name
    Dim wbDatabase As Workbook
    Set wbDatabase = Workbooks("Database.xlsx")
    
    For Each x In wbDatabase.Names
        ThisWorkbook.Names.Add Name:=x.Name, RefersTo:=x.Value
    Next x
End Sub

我偶然找到了我的问题的解决方案。 Excel 创建了一个隐藏名称,名为 _FilterDatabase。 我在以下网站 ( https://www.reddit.com/r/excel/comments/78t8mw/what_function_do_the_automatically_generated/ ) 上了解到,只要您在工作簿中过滤某些内容,就会创建此名称。 由于 _FilterDatabase 不以字母开头,因此会在 CopyNames 代码中给出错误。 由于我经常使用过滤器,从长远来看,删除名称对我没有帮助。 当我使用过滤器时,Excel 将再次创建该名称。 我在以下网站上找到了解决方案; https://www.mrexcel.com/board/threads/excel-keeps-creating-a-hidden-_xlfn-iferror-name-why.1081695/


首先,我在数据库工作簿中使用以下宏取消隐藏所有定义的名称:

Sub ShowAllNames()
   Dim x As Name
   For Each x In ActiveWorkbook.Names
       x.Visible = True
   Next x
End Sub

取消隐藏所有定义的名称后,我立即在列表顶部看到了 _FilterDatabase 名称。 然后我将“If Not x.Name Like "_Filter*" Then”行添加到我的其他工作簿中的 CopyNames 代码中。 通过将此行添加到代码中,代码将跳过所有以 _Filter 开头的名称。 这是完整的代码;

Sub CopyNames()
'Gedefineerde namen kopiëren naar andere werkmap.
    Dim x As Name
    Dim wbDatabase As Workbook
    Set wbDatabase = Workbooks("Database.xlsx")
    
    For Each x In wbDatabase.Names
        If Not x.Name Like "_Filter*" Then
          ThisWorkbook.Names.Add Name:=x.Name, RefersTo:=x.Value
        End If
    Next x
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM