ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何删除清除指定文件夹中所有工作薄中的宏代码包括模块

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-22 17:27 | 显示全部楼层 |阅读模式
本帖最后由 yzyyyyyyy 于 2014-5-22 19:46 编辑

指定文件夹中很多工作薄文件都有代码模块,如何批量删除,让这些工作薄,打开时不会出现宏

  1. http://club.excelhome.net/thread-894712-1-1.htmlOption Explicit
  2. Sub addWK2()
  3.     Dim dic, temp, arr, tempWK, temp2
  4.     Dim rng As Range
  5.     Dim strArea As String
  6.     Const BYSHNAME As String = "事业单位人员信息" '可以修改根据哪一个工作表拆分工作簿
  7.    
  8.     Set dic = CreateObject("scripting.dictionary") '字典
  9.     '下面一句代码:设置上面设置的工作表中的哪一列的内容拆分工作簿
  10.     Set rng = ThisWorkbook.Sheets(BYSHNAME).Range("b2:b" & ThisWorkbook.Sheets(BYSHNAME).Cells(65536, 2).End(xlUp).Row)
  11.     For Each temp In rng.Cells '这个for循环实现该列的不重复值的筛选
  12.         If Not dic.exists(temp.Value) Then
  13.             dic.Add temp.Value, ""
  14.         End If
  15.     Next
  16.    
  17.     arr = dic.keys '返回此列不重复值的数组
  18.    
  19.    
  20.     For Each temp In arr '这个For循环实现按照不重复数组的内容新建工作簿,并删除不应有的内容
  21.         ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "" & temp & ".xls" '以当前temp的值为新工作簿的名称,备份当前工作簿
  22.         Set tempWK = Workbooks.Open(ThisWorkbook.Path & "" & temp & ".xls") '打开以temp的值为名称的工作簿
  23.         strArea = "" '用于储存所有需要删除的行的地址字符串
  24.         For Each temp2 In rng.Cells '这个for循环是比较源工作簿中拆分依据的工作表中,拆分依据的那一列与当前temp值是否相同,删除不相关内容
  25.             If temp2 <> temp Then
  26.                 If strArea <> "" Then
  27.                     strArea = strArea & ","
  28.                 End If
  29.                 strArea = strArea & tempWK.Sheets(BYSHNAME).Cells(temp2.Row, temp2.Column).EntireRow.Address
  30.             End If
  31.         Next
  32. For Each m In ActiveWorkbook.VBProject.VBComponents
  33.         If m.Name Like "模块*" Then ActiveWorkbook.VBProject.VBComponents.Remove m
  34.     Next
  35.         tempWK.Sheets(BYSHNAME).Range(strArea).Delete
  36.         tempWK.Save
  37.         tempWK.Close
  38.     Next
  39.    
  40.     Set dic = Nothing
  41.     Set rng = Nothing
  42.     ThisWorkbook.Sheets(1).Select
  43. End Sub

复制代码
如何应用以上宏拆分 事业单位信息采集表工作薄 ,让拆分后的工作薄不含此段代码,或者如何在另一个工作薄中运行这段代码进行拆分

TA的精华主题

TA的得分主题

发表于 2014-5-22 18:24 | 显示全部楼层
如果那些文件都没有VBA工程密码,就好办.

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-22 18:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yf_home 发表于 2014-5-22 18:24
如果那些文件都没有VBA工程密码,就好办.

假定都没有VBA密码

TA的精华主题

TA的得分主题

发表于 2014-5-22 19:51 | 显示全部楼层
yzyyyyyyy 发表于 2014-5-22 18:30
假定都没有VBA密码

代码放在模块里,试试:

Sub 删除代码1()
    Dim Wb As Workbook, vbc As VBComponent, fname, i%
    Application.DisplayAlerts = False: Application.ScreenUpdating = False: Application.EnableEvents = False
    fname = Application.GetOpenFilename(filefilter:="Excel 文件, *.xl*,所有文件, *.*", MultiSelect:=True)
    If VarType(fname) = vbBoolean Then End
    For i = 1 To UBound(fname)
           If fname(i) <> ThisWorkbook.FullName Then
            If Len(Dir(Left(fname(i), InStrRev(fname(i), ".")) & "bak")) = 0 Then
                FileCopy fname(i), Left(fname(i), InStrRev(fname(i), ".")) & "bak"
            End If
            Set Wb = Workbooks.Open(fname(i))
            With Wb
                For Each vbc In .VBProject.VBComponents
                    Select Case vbc.Type
                    Case 1, 2, 3
                        With Application.VBE.ActiveVBProject.VBComponents
                            .Remove .Item(vbc.Name) '删除模块、类模块、窗体
                        End With
                    Case Else
                        vbc.CodeModule.DeleteLines 1, vbc.CodeModule.CountOfLines '删除工作表或Thisworkbook代码区代码
                    End Select
                Next
                .Save
                .Close False
            End With
            Set Wb = Nothing
            Set vbc = Nothing
        End If
    Next i
    Application.DisplayAlerts = True: Application.ScreenUpdating = True: Application.EnableEvents = True
End Sub



....

TA的精华主题

TA的得分主题

发表于 2017-7-15 08:26 | 显示全部楼层
Dim Wb As Workbook, vbc As VBComponent, fname, i%
执行这一行就报错

TA的精华主题

TA的得分主题

发表于 2018-8-10 20:04 来自手机 | 显示全部楼层
如只删除文件夹内指定文件的宏代码呢

TA的精华主题

TA的得分主题

发表于 2018-11-21 22:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yf_home 发表于 2014-5-22 19:51
代码放在模块里,试试:

Sub 删除代码1()

如果密码是111111,如何改
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-14 15:02 , Processed in 0.040940 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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