[英]Losing VBA code under 'ThisWorkbook' (Private Sub WorkBook_Open() )
背景的前三个元素:
到目前为止,一切都很好——模板在开发环境中运行良好——“个性化”代码位于“ThisWorkbook”下的WorkBook_Open(
) 例程中——它运行、删除并保存为个性化模板。 两个模板在Sheet1代码中都有“流程宏”(这里的原则是初始模板在“ThisWorkbook”和“Sheet1”中有宏;个性化模板只在“Sheet1”中有宏,从个性化模板创建的工作簿根本没有宏。
在“beta 测试”中,我在 XP(文件格式)下使用 Excel2000 时遇到了问题,在目标机器上,我的 WorkBook_Open 例程在主模板(而不是个性化模板)中被删除——即使在 Excel2007/Vista 上一切正常。
我当时觉得 Workbook_Open 的无效删除可能是一个编码错误 - 但在研究这些问题时,我发现了许多关于“Macafee 删除 VBA 模块”的引用。 我没有研究这些——但我意识到目标机器(和环境)运行 Macafee,而我的所有计算机都运行 Norton。
重新编码后,我成功地重新测试了以下内容:
a) Excel 2007/Vista/诺顿
b) Excel 2007/XP 专业版/诺顿
c) Excel 2000/XP Home/诺顿
所以在 Excel 2003/XP Professional/Macafee 中重新测试感觉很舒服
这一次我正在关注它 - 所以,再次看到 WorkBook_Open 例程被错误地从主模板中删除 - 不幸的是,这只是在 USB Memory 密钥(运行模板的位置)被完全破坏之前的片刻。
所以对于问题 - 在我 go 再次完成整个过程之前:
要回答您的实际问题...是的,许多防病毒程序绝对认为在打开 Excel 或 Word 文档时运行的自动运行代码是不安全的,并将其删除,因为十年前这实际上是一些蠕虫的工作方式。 我不知道 MacAfee 是否特别这样做,但我肯定听说过这种情况。
我已经设法再次到达客户端机器 - 并添加了一个新的简单模板来证明或以其他方式证明我的问题。 新的WorkBook_Open
例程是...
Private Sub WorkBook_Open()
MsgBox "Hello World"
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.DeleteLines 1, _
.CountOfLines
End With
MsgBox "Goodbye to all that!"
End Sub
...这完全按照要求工作,即例程执行然后删除自身(即使代码已被删除,第二个 msgbox 也会显示!
因此,此测试使我的问题无效 - McAfee 不会删除例程作为 AV 保护的一部分 - 所以我不再寻找解决方法!
现在我需要做的就是弄清楚我的问题到底是什么!
感谢您的评论
万一其他人来到这个线程 - 我现在已经完全检查了我的模板 - 并在目标环境中重新运行它 - Workbook_Open 例程再次被删除。 在目标机器上进行了一些挖掘之后,我找到了 Macafee 事件日志,你瞧……
事件类型:警告
事件来源:McLogEvent
事件类别:无
事件编号:258
日期:09/07/2011
时间:15:45:40
用户:NT AUTHORITY\SYSTEM
电脑:xxxxxxxxx
说明:文件 F:\Timesheets\Timesheet Generator.xlt\1.OLE包含 X97M/Generic Virus 。 该文件已使用扫描引擎版本 5400.1158 DAT 版本 6400.0000 成功清除。
所以有确凿的证据。 Workbook_Activate() 也会发生同样的事情
“违规”行似乎是
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.DeleteLines 1, _
.CountOfLines
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.