ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 27908|回复: 29

[求助] 如何用VBA批量删除定义名称?[貌似解决了]

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-3-12 11:15 | 显示全部楼层 |阅读模式
本帖最后由 lion3005 于 2012-1-18 17:17 编辑

如附件,打开文件--插入--名称--定义,就会看到很多的定义名称。我曾经用以下的程序删除定义名称,当时是删除了大部分,但是剩余下来的还有很多(附件就是剩余下来的顽固派!)。请问各位大侠,如何才能将剩余的定义名称删除(由于手头上这种文件比较多,所以想用VBA批量删除的方法,手工删除实在太痛苦了(而且录制宏无效))

附上手工删除的方法:用下面的程序删除后,点工具--选项--常规--将R1C1勾上--出现“名称冲突”的对话框--乱输入一堆字母(好像是一个一个名称的输,而且名称不能重复,具体原因不明)--再用用下面的程序删除--痛苦的OVER了!

Sub del_name()
On Error Resume Next
For Each na In ActiveWorkbook.Names
na.Delete
Next
End Sub
----------------------------------------------------------------------------------------------------


帖子讨论了两三天,貌似解决了(虽然没有达到完全自动的效果,但工作量已经大大减少),
强烈感谢各位跟帖的大侠们!!

总结一下:

第1步、先用以下代码删除能删除的定义名称
Sub del_name()
On Error Resume Next
For Each na In ActiveWorkbook.Names
na.Visible = True
na.Delete
Next
End Sub
第2步、手工删除(excel2003与后面的版本有点区别,后面的版本直接调出名称管理器选中全部删除即可,03版本需要以下步骤):
1)ctrl+f3调出定义名称框,结合鼠标和Alt+D【左右手配合】删除不算太顽固的定义名称。
2)工具--选项--常规--R1C1引用样式,在弹出的名称冲突框顺便输入一些不重复的字(如果重复或者不合法,会提示重输),一直输到弹出框消失为止。
3)重复第1步(如有需要之后将2)的R1C1引用样式调回来)
第3步、保存--结束。

还有一种比较笨的方法(针对03版的),但适用于超多顽固定义名称的工作表:
另外新建一个工作簿,按每个sheet选择左上角那个格子(我不知道叫什么,不是R1C1引用样式的情况下,在A的左边,1的上面的那个,点击后就选择全SHEET),复制全SHEET到新的工作簿中,并将SHEET的名字更改为原工作簿的相应SHEET的名字。
这种方法就不存在原来的定义名称的事情,根据实际情况使用即可。



补充内容 (2016-9-7 11:11):
再补充一下EXCLE 2013的方法:
上面的第1步是要的,主要是为了把隐藏的名称全部显示。除非你只想删除可见的那部分。
点工具栏的:公式→名称管理器→点第一个名称,拉垂直滚动条到底下,按shift选最后一个→删除

2.rar

21.17 KB, 下载次数: 109

TA的精华主题

TA的得分主题

发表于 2010-3-12 11:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果定义的名称杂乱无章,代码不大好写,关注。

TA的精华主题

TA的得分主题

发表于 2010-3-12 11:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-3-12 11:35 | 显示全部楼层
我也碰到过这样的问题,不知道为什么delete不让删。关注中

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-12 13:04 | 显示全部楼层
原帖由 dsmch 于 2010-3-12 11:27 发表
如果定义的名称杂乱无章,代码不大好写,关注。


好像跟名称没啥关系吧?

a=acitiveworkbook.names(i).name
就可以取得名称了吧?

TA的精华主题

TA的得分主题

发表于 2010-3-12 13:48 | 显示全部楼层
原帖由 lion3005 于 2010-3-12 13:04 发表


好像跟名称没啥关系吧?

a=acitiveworkbook.names(i).name
就可以取得名称了吧?

运行下代码就知道了,行不通。

TA的精华主题

TA的得分主题

发表于 2010-3-12 14:26 | 显示全部楼层
我也觉得和名称没什么关系
For Each na In ActiveWorkbook.Names
debug.print na.name
Next
运行是没有问题的,就是delete不行。

TA的精华主题

TA的得分主题

发表于 2010-3-12 14:45 | 显示全部楼层
录制宏时,代码是这样:
ActiveWorkbook.Names("名称" ).Delete
看到楼上几位的提醒,明白了,多谢。

TA的精华主题

TA的得分主题

发表于 2010-3-12 14:55 | 显示全部楼层
Sub test()
Dim Nm As Name
For Each Nm In ActiveWorkbook.Names
    Debug.Print Nm.Name
    Nm.Delete
Next Nm
End Sub

奇怪,以上代码在2007版里竟然可以用,是不是2003版不支持该方法啊

TA的精华主题

TA的得分主题

发表于 2010-3-12 15:00 | 显示全部楼层

回复 9楼 kevinchengcw 的帖子

是用1楼的附件测试的吗?
1楼附件delete会出错的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-5 05:12 , Processed in 1.070456 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表