ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] Excel 2003另存为新工作簿时,去除模块里的宏,其实只需这一句。

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-21 10:55 | 显示全部楼层
本帖最后由 shenghua8 于 2013-11-21 10:58 编辑
liucqa 发表于 2013-11-21 10:43
你话好多

说了半天,你也没理解我要告诉你什么


我还能说什么呢,
我只是说了一句关于那片“大陆”的个人看法。
其实与你我都无关。
引发这么长的争论。
算了吧!
你很认真,认真是好事。
我对你本无成见。
都不说了!

就当为我发的这篇帖子炒作了。
至此为止。

TA的精华主题

TA的得分主题

发表于 2013-11-21 11:12 | 显示全部楼层
本帖最后由 liucqa 于 2013-11-21 12:09 编辑
shenghua8 发表于 2013-11-21 10:55
我还能说什么呢,
我只是说了一句关于那片“大陆”的个人看法。
其实与你我都无关。

好吧,看你态度不错,人也不傻,我告诉你去除模块的最简单思路

另存成xlsx,然后open,再另存成xls,代码你自己写

这比那些操作VBE的代码省事多了,至少不用信任工程,也不用引用什么库

TA的精华主题

TA的得分主题

发表于 2013-11-21 12:07 | 显示全部楼层
帮楼主完善一下:
  1. Sub MacroDel_ThisFile()
  2.     myName = ActiveWorkbook.Path & "\Backup_" & ActiveWorkbook.Name
  3.     '备份文件名称。可自己修改。
  4.    
  5.     '操作模块需要事先引用 Microsoft Visual Basic For Application Extensibility 5.3
  6.     For Each vbc In ThisWorkbook.VBProject.VBComponents
  7.         If vbc.Type = 100 Then vbc.CodeModule.DeleteLines 1, vbc.CodeModule.CountOfLines
  8.     Next
  9.     '上面3句代码是检查并删除Sheets中的代码

  10.     Sheets.Copy '复制所有sheets但排除所有模块、类模块、窗体
  11.     Application.DisplayAlerts = False '已有同名备份文件时不出现选择是否覆盖的对话框
  12.    '如希望有提醒功能则把上面这一句注释掉。

  13.     Workbooks(Application.Windows.Count).SaveAs myName '另存为备份文件
  14.     ActiveWorkbook.Close 'Backup File Close 关闭备份文件

  15.     ActiveWorkbook.Close 'Source File Close 关闭源文件
  16. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-21 12:44 | 显示全部楼层
把下面代码放在个人宏文件中(Personal.xls)
运行宏以后可以打开别的文件并去除所有代码和模块。
  1. Sub MacroDel_OtherFile()
  2.     '引用 Microsoft Visual Basic For Application Extensibility 5.3
  3.    
  4.     With Workbooks.Open(Application.GetOpenFilename(",*.xls"))
  5.         For Each vbc In .VBProject.VBComponents
  6.             Select Case vbc.Type
  7.                 Case 1, 2, 3 'vbext_ct_StdModule/ClassModule/MSForm
  8.                     With Application.VBE.ActiveVBProject.VBComponents
  9.                         .Remove .Item(vbc.Name)
  10.                     End With
  11.                 Case Else '100=vbext_ct_Document (Sheet/ThisWorkbook)
  12.                     vbc.CodeModule.DeleteLines 1, vbc.CodeModule.CountOfLines
  13.             End Select
  14.         Next
  15.         Application.DisplayAlerts = False
  16.         .SaveAs .path & "\Backup" & Format(Date, "-yyyy-mm-dd") & ".xls"
  17.         .Close False
  18.     End With
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-11-21 12:48 | 显示全部楼层
Sheets.Copy 这一句代码就可以去掉模块和窗体,确实是很牛逼的一句代码。


如果是在自己明白可控的范围内,那么用好这一句代码就能达到很好的效果,何乐而不为呢?


…………
当然,如果要考虑通用性和逻辑性,那么确实光凭这一句代码是无法保证的。


这句代码的用法,我是从Zamyi 大侠那里得知的。


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-21 13:59 | 显示全部楼层
如果还需要删除Sheet中的宏按钮,那么增加代码如下:

   For Each Sht In Worksheets
        Sht.Activate
        For Each Shp In ActiveSheet.Shapes
            If Shp.Type = 8 Or Shp.Type = 12 Then Shp.Delete Else Shp.OnAction = ""
        Next
    Next
   
除了简易按钮(Type=8)和控件按钮(Type=12)以外,
还可能有图片(Type=12)以及其它图形可以被用作宏按钮。

那么上述代码的作用是:
删除按钮,保留其它图形但除去宏启动链接。(解除 .OnAction 属性)


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-21 14:22 | 显示全部楼层
我的另类办法:
把EXCEL文档放到Lotus Notes邮箱发送到另一个邮箱,再从这个接收的邮箱中下载EXCEL文档。这时里面除了工作表,什么代码按钮窗体之类的全无踪影了.
原因:邮件在服务器上经过了趋势防毒墙过滤,除了工作表,什么都不会留下!
{:soso_e113:}

点评

你这是卖趋势呢吧  发表于 2013-11-22 15:18

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-22 13:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2013-11-21 11:12
好吧,看你态度不错,人也不傻,我告诉你去除模块的最简单思路

另存成xlsx,然后open,再另存成xls,代 ...

拜托!
是写到宏代码里,由宏代码来执行。要你这个思路有何用。
你骂也骂了,咒也咒了,我不和你计较。行了吧。
看看楼上的侠圣,既细心又完美。
亏你还是18级。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-22 13:35 | 显示全部楼层
香川群子 发表于 2013-11-21 12:48
Sheets.Copy 这一句代码就可以去掉模块和窗体,确实是很牛逼的一句代码。

哇!
得到 香川群子 老师的支持和补充,我实在太感荣幸了。
你的完善,对我来说,实在是太完美了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-22 13:38 | 显示全部楼层
老谭酸菜 发表于 2013-11-21 14:22
我的另类办法:
把EXCEL文档放到Lotus Notes邮箱发送到另一个邮箱,再从这个接收的邮箱中下载EXCEL文档。这 ...

谭老师这是一个好特别的主意。
按你这么说,清除得好干净,找机会我也试试看。

我用这句代码的意思,是想在宏执行到最后,自动保存成另一个文件,然后分发给其他人。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 03:34 , Processed in 0.044014 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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