加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]自动删除VBA代码

(2015-02-08 15:54:31)
标签:

转载

原文地址:自动删除VBA代码作者:天涯孤旅

Excel文档VBA代码自动删除

  

有时候,不想让自己编写的代码让别人长期使用或换地方使用,又不想让文档自杀,就可以设计限期清除代码,或其他限制条件下清除。具体限制条件可参考博主《Excel文档自杀程序设计》Workbook_Open模块那一部分。代码清除后,与代码有关的程序就不能运行了

如设置20111231日后打开文档就清除代码,可以这样设计:

Private Sub Workbook_Open()   这个程序一定要在Thisworkbook模块中

On Error Resume Next

If Date>40908 then Then Call 删除代码

End Sub                                                  

删除代码的程序是

Sub 删除代码()   这个程序要在标准的Moudle模块中

For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count ActiveWorkbook.VBProject. 

    VBComponents(i).CodeModule.DeleteLines 1, _
    ActiveWorkbook.VBProject.VBComponents(i).CodeModule.CountOfLines

Next i

End Sub                                                  

如果要把窗体、模块、类模块一并删除可改为一下代码

Sub 删除代码()   这个程序要在标准的Moudle模块中最好

For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count ActiveWorkbook.VBProject. 

    VBComponents(i).CodeModule.DeleteLines 1, _
    ActiveWorkbook.VBProject.VBComponents(i).CodeModule.CountOfLines

Next i

Dim Vbc As Object

For Each Vbc In Application.ThisWorkbook.VBProject.VBComponents

    Select Case Vbc.Type

    Case 1, 2, 3

         With Application.VBE.ActiveVBProject.VBComponents

         .Remove .Item(Vbc.Name)    ’移除模块、类模块、窗体

         End With

     End Select

  Next

End sub                                 

  删除代码这几个字太显眼,使用时可改为其他英文字母代替程序名称,如拼音SCDM等。

一般在打开文档时设置限定清除代码条件,也可在关闭文件时设置限定条件。

   如果你设置了工程密码保护,那么在运行上程序时就会出错。代码就删除不了。因此就要添加VBA工程解除密码保护程序。修改后程序具体设置如下:

Private Sub Workbook_Open()  '这个程序一定要在Thisworkbook模块中

On Error Resume Next

If Date>40908 then Then Call 删除代码

End Sub                                                  

Sub 删除代码()   '这个程序要在标准的Moudle模块中最好

解除工程保护  '引用本模块的解除保护程序

 For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count ActiveWorkbook.VBProject. 

   VBComponents(i).CodeModule.DeleteLines 1, _
 ActiveWorkbook.VBProject.VBComponents(i).CodeModule.CountOfLines

Next i

Dim Vbc As Object

For Each Vbc In Application.ThisWorkbook.VBProject.VBComponents

    Select Case Vbc.Type

    Case 1, 2, 3

         With Application.VBE.ActiveVBProject.VBComponents

         .Remove .Item(Vbc.Name)  ’移除模块、类模块、窗体

         End With

     End Select

  Next

End Sub                                                   

Sub 解除工程保护()   ' 这个程序也要在标准的Moudle模块中

  Dim strPassWord As String

  Application.VBE.MainWindow.Visible = False

  strPassWord = "123"   引号里面必须是你的真实的工程保护密码

  Application.VBE.CommandBars.FindControl(ID:=2578).Execute

  SendKeys strPassWord & "{enter}{tab}{enter}"

  DoEvents

End Sub                                                         

程序不是很稳定,有时候会出现错误,这也可能是Excel内部原因。该程序只能删除全部代码,如果只想删除某一部分代码,可自行研究删除代码部分内容。

zqqxx@126.com

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有