Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5531|回复: 10

[已解决]如何批量删除文件夹内的除本文件以外的所有文件中的代码?

[复制链接]
发表于 2013-11-8 15:38 | 显示全部楼层 |阅读模式
请教:如何批量删除文件夹内的除本文件以外的所有文件中的代码?
以前zjdh老师写过一个代码,我想请各位修改或重新写一下  不要选择文件夹,就是说    点出按钮   直接将本文件夹下除本工作簿以外的所有工作簿中的代码删除。谢谢!
zjdh老师的原代码以下http://www.excelpx.com/thread-250005-1-1.html
Sub 删除宏()  '2003可用
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.DisplayAlerts = False
    On Error Resume Next
    Set Myf = CreateObject("Shell.Application").BrowseForFolder(0, "请选择文件目录:", &H1)
    If Not Myf Is Nothing Then
        Directory = Myf.self.Path
    End If
    MyName = Dir(Directory & "\*.xls")
    Do While MyName <> ""
        Workbooks.Open (Directory & "\" & MyName)
        With ActiveWorkbook
        '**删除各模块内容及窗体
            For Each m In .VBProject.VBComponents
                If m.Type = 100 Then
                    m.CodeModule.DeleteLines 1, m.CodeModule.CountOfLines
                Else
                    .VBProject.VBComponents.Remove m
                End If
            Next
        '*****************
        .Close True
        End With
        MyName = Dir
    Loop
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
最佳答案
2013-11-9 17:27
  1. Sub 删除宏()  '2003可用

  2.     Dim strPath As String
  3.     Dim wb As Workbook

  4.     On Error Resume Next
  5.     Application.ScreenUpdating = False
  6.     Application.EnableEvents = False
  7.     Application.DisplayAlerts = False
  8.     strPath = ThisWorkbook.Path & Application.PathSeparator
  9.     myname = Dir(strPath & "*.xls")
  10.    
  11.     Do While myname <> ""
  12.         If myname <> ThisWorkbook.Name Then
  13.             Set wb = GetObject(strPath & myname)
  14.             With wb
  15.                 '**删除各模块内容及窗体
  16.                 For Each m In .VBProject.VBComponents
  17.                     If m.Type = 100 Then
  18.                         m.CodeModule.DeleteLines 1, m.CodeModule.CountOfLines
  19.                     Else
  20.                         .VBProject.VBComponents.Remove m
  21.                     End If
  22.                 Next
  23.                 '*****************
  24.                 Windows(.Name).Visible = True
  25.                 '.Windows(1).Visible = True
  26.                 '两种方法,你都可以试试。
  27.                 .Close True
  28.             End With
  29.         End If
  30.         myname = Dir
  31.     Loop
  32.    
  33.     Application.EnableEvents = True
  34.     Application.DisplayAlerts = True
  35.     Application.ScreenUpdating = True
  36. End Sub
复制代码
发表于 2013-11-8 16:48 | 显示全部楼层
回复

使用道具 举报

发表于 2013-11-8 16:52 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-11-8 16:54 编辑
  1. Sub 删除宏()  '2003可用

  2.     Dim strPath As String

  3.     Dim wb As Workbook

  4.     Application.ScreenUpdating = False
  5.     Application.EnableEvents = False
  6.     Application.DisplayAlerts = False
  7.     On Error Resume Next

  8.     strPath = ThisWorkbook.Path & Application.PathSeparator
  9.     myname = Dir(strPath & "*.xls")

  10.     Do While myname <> ""
  11.         If myname <> ThisWorkbook.Name Then
  12.             Set wb = GetObject(strPath & myname)
  13.             With wb
  14.                 '**删除各模块内容及窗体
  15.                 For Each m In .VBProject.VBComponents
  16.                     If m.Type = 100 Then
  17.                         m.CodeModule.DeleteLines 1, m.CodeModule.CountOfLines
  18.                     Else
  19.                         .VBProject.VBComponents.Remove m
  20.                     End If
  21.                 Next
  22.                 '*****************
  23.                 .Close True
  24.             End With
  25.         End If
  26.         myname = Dir
  27.     Loop
  28.     Application.EnableEvents = True
  29.     Application.DisplayAlerts = True
  30.     Application.ScreenUpdating = True
  31. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
小雨饰品 + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 2013-11-8 16:59 | 显示全部楼层
  1. Sub 删除宏()  '2003可用
  2.     Application.ScreenUpdating = False
  3.     Application.EnableEvents = False
  4.      Application.DisplayAlerts = False
  5.     On Error Resume Next
  6.     MyName = Dir(ThisWorkbook.Path & "\*.xls")
  7.     Do While MyName <> ""
  8.         If MyName <> ThisWorkbook.Name Then
  9.             Workbooks.Open (MyName)
  10.             With ActiveWorkbook
  11.                 '**删除各模块内容及窗体
  12.                 For Each m In .VBProject.VBComponents
  13.                     If m.Type = 100 Then
  14.                         m.CodeModule.DeleteLines 1, m.CodeModule.CountOfLines
  15.                     Else
  16.                         .VBProject.VBComponents.Remove m
  17.                     End If
  18.                 Next
  19.                 '*****************
  20.                 .Close True
  21.             End With
  22.         End If
  23.         MyName = Dir
  24.     Loop
  25.     Application.EnableEvents = True
  26.     Application.DisplayAlerts = True
  27.     Application.ScreenUpdating = True
  28. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
小雨饰品 + 3 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-11-9 15:09 | 显示全部楼层
zjdh 发表于 2013-11-8 16:59

谢谢老师的帮助,但不知什么原因,我试了一下(我勾选了信任对于'Visual BASIC"的访问)没能将同文件 夹中代码去除。
回复

使用道具 举报

 楼主| 发表于 2013-11-9 15:11 | 显示全部楼层
hwc2ycy 发表于 2013-11-8 16:52

里面的代码是删除了,但运行后工作表被隐藏了起来,烦请老师抽空再修改一下。谢谢啦!
回复

使用道具 举报

发表于 2013-11-9 17:27 | 显示全部楼层    本楼为最佳答案   
  1. Sub 删除宏()  '2003可用

  2.     Dim strPath As String
  3.     Dim wb As Workbook

  4.     On Error Resume Next
  5.     Application.ScreenUpdating = False
  6.     Application.EnableEvents = False
  7.     Application.DisplayAlerts = False
  8.     strPath = ThisWorkbook.Path & Application.PathSeparator
  9.     myname = Dir(strPath & "*.xls")
  10.    
  11.     Do While myname <> ""
  12.         If myname <> ThisWorkbook.Name Then
  13.             Set wb = GetObject(strPath & myname)
  14.             With wb
  15.                 '**删除各模块内容及窗体
  16.                 For Each m In .VBProject.VBComponents
  17.                     If m.Type = 100 Then
  18.                         m.CodeModule.DeleteLines 1, m.CodeModule.CountOfLines
  19.                     Else
  20.                         .VBProject.VBComponents.Remove m
  21.                     End If
  22.                 Next
  23.                 '*****************
  24.                 Windows(.Name).Visible = True
  25.                 '.Windows(1).Visible = True
  26.                 '两种方法,你都可以试试。
  27.                 .Close True
  28.             End With
  29.         End If
  30.         myname = Dir
  31.     Loop
  32.    
  33.     Application.EnableEvents = True
  34.     Application.DisplayAlerts = True
  35.     Application.ScreenUpdating = True
  36. End Sub
复制代码
回复

使用道具 举报

发表于 2013-11-9 17:52 | 显示全部楼层
本帖最后由 zjdh 于 2013-11-9 18:05 编辑
小雨饰品 发表于 2013-11-9 15:09
谢谢老师的帮助,但不知什么原因,我试了一下(我勾选了信任对于'Visual BASIC"的访问)没能将同文件 夹中 ...


4楼的宏我可是在2003测试过的,没问题啊!
回复

使用道具 举报

 楼主| 发表于 2013-11-9 18:06 | 显示全部楼层
zjdh 发表于 2013-11-9 17:52
4楼的宏我可是测试过的,没问题啊!

谢谢您的帮助。我也感到很奇怪 ,原来你发的那个可选择文件 夹再删除代码的那个在我家里电脑上竟然也不能运行(以前我在办公室电脑上很好用的)。后天上班我再用办公室电脑测试 一下。再次感谢老师的帮忙。
回复

使用道具 举报

 楼主| 发表于 2013-11-9 18:08 | 显示全部楼层
hwc2ycy 发表于 2013-11-8 16:48
直接改一下就成了啦。

这个代码运行很好。非常感谢hwc2ycy大师的多次出手相助。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 08:39 , Processed in 0.348034 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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