在“启用宏”工作表之前,如何检查/查看Excel宏?


13

我偶尔会收到一个xls文件,其中包含我应该使用的宏。如果我对发送方不完全信任,则希望查看宏的源,以验证其确实确实可以执行预期的操作。

但是,在Excel 2010中,除非首先启用工作表的宏,否则将禁用“查看宏”下的“编辑”按钮-但是,如果我首先启用宏,则最多只能在该代码完成后才能找到有关恶意代码的信息。正在运行...

在为文档启用宏之前,如何查看宏的源代码?

Answers:


13

通过使用Word中的“开发工具”选项卡,您可以查看文档中的所有宏,从而可以轻松访问文档中嵌入的Visual Basic例程。

首先,您需要确保已启用“开发人员”标签。转到文件->选项,然后:

开发人员标签

在现在应该出现的“开发人员”选项卡上,现在应该有一个“ Visual Basic”按钮,您可以单击该按钮以转到Visual Basic编辑器。

浏览编辑器左侧的文档树,您无需首先启用宏就可以看到嵌入在文档中的所有代码和模块。

我倾向于使用我不信任的文档来执行此操作。

注意:我已经在Word中完成了此操作,Excel中提供了相同的功能,并且启用该功能的选项位于同一位置。


9

自2003年以来(可能更早)的所有Office应用程序的所有版本中,Alt+ F11都会打开VBA编辑器。无需启用功能区中的“开发人员”选项卡(用于Office 2007及更高版本)即可使用。


2
值得注意的是,在许多版本中(至少在Excel中),Alt+ F11会导致“ ! SECURITY WARNING ... Enable Content”标语消失,这意味着现在已启用代码执行。这是误导。您可以通过使用on_open()模块创建文档来进行演示。您将可以Alt+ F11进入并检查代码,而无需触发事件。
彼得·范迪维尔

0

虽然来自Mokubai和hBy2Py的答案看起来不错,并且确实允许您显示VBA编辑器,但似乎至少从Microsoft Office Professional Plus 2016的 Excel中,您仍然无法查看代码。

我碰巧拥有该版本,而且我确定自己收到了恶意的XLS,并希望对其进行检查。在Excel中将其打开后,它会像往常一样以安全模式打开,当然我无意取消该模式。当我按照其他受访者的指示打开VBA编辑器时,看到的是... 空的VBA编辑器。尽管我尚未关闭XLS文件,“项目资源管理器”面板仍有助于显示“没有打开的项目”。只是为了测试,我打开了第二个文档(我的工作之一),该文档立即显示在VBA编辑器中,并且(完全)完全没有任何VBA。但是,来自Internet的文档未在VBA编辑器中列出

我浪费了一些时间试图找出原因,却没有找到原因。似乎在以安全模式加载文档时,我的Excel版本根本不会将VBA模块发送到VBA编辑器。可悲的是,VBA编辑器缺少一些“从Office文档打开VBA”功能,因此很明显,Excel是这里的大脑,它必须首先解压缩/解码/处理任何XLS。

事实证明解决方案非常简单。

  1. 点击Ribbon-> Developer->MacroSecurity
  2. 或者,File-> Options-> SecurityCenter(最后一个选项组)-> Settings-> Macros
  3. 记住(或写下来)当前的设置是什么
  4. 将它们更改为“阻止所有宏,而无需通知”
  5. 确认,关闭,重新打开文档,重新打开VBA编辑器
  6. 玩完火后恢复原始设置

效果:

  • 通知未显示
  • 文档已完全加载
  • 没有执行宏
  • VBA编辑器获得了模块并展示了所有代码

如果您很好奇:是的,那确实是恶意的,很小的例子:

Function marcopoloko()
marcopoloko = Left("CM to inches converter", 2) + Right("fed.ex", 4) + "e  " + "/c" + numneroop + amagilocard
End Function

'Sub Workbook_Open()
'If xlTickMarkOutside > 0 Then
'Shell marcopoloko + """", xlXmlExportSuccess
'End If
'End Sub

顺便说一句。如您所见,如果我允许宏在某个时间点以后运行,我会立即注释掉入口点并重新保存文档。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.