vba - 从 Outlook 打开时的 Excel 安全设置

标签 vba excel outlook

我有一个启用 Excel 宏的工作簿保存在受信任的位置。我正在尝试打开该工作簿并从 Outlook 运行宏。

Sub run_Excel_Macro()
    Dim App As Excel.Application
    Dim wkbk As Excel.Workbook

    Set App = New Excel.Application
    App.Visible = True
    Set wkbk = App.Workbooks.Open("C:\file.xlsm")
    App.OnTime DateAdd("s", 5, Now()), wkbk.Name & "!macro"

    Set App = Nothing
    Set wkbk = Nothing
End Sub

我遇到的问题是,Excel 的安全通知会弹出,询问我是否信任该内容以及是否应启用宏。

为什么会弹出安全通知?我该如何解决这个问题?

最佳答案

一种选择是为您的宏创建数字签名: https://support.office.com/en-ca/article/Digitally-sign-your-macro-project-956e9cc8-bbf6-4365-8bfa-98505ecd1c01

由于您创建的数字证书不是由正式的受信任证书颁发机构颁发的,因此使用此类证书签名的宏项目称为自签名项目。 Microsoft Office 仅信任已将自签名证书添加到“证书 - 当前用户”存储中的“受信任的根证书”文件夹中的计算机上的自签名证书。

创建自签名证书 Windows 7、Windows Vista 或 Windows XP

  • 单击“开始”,指向“所有程序”,单击“Microsoft Office”,单击 Microsoft Office 工具,然后单击 VBA 的数字证书 项目。
  • 出现“创建数字证书”对话框。
  • 在“您的证书名称”框中,输入证书的描述性名称。
  • 单击“确定”。
  • 当出现 SelfCert Success 消息时,单击“确定”。

创建数字签名对话框 使用Internet Explorer查看证书

要查看个人证书存储中的证书,请执行以下操作:

  • 打开 Internet Explorer。
  • 在“工具”菜单上,单击“Internet 选项”,然后单击“内容”选项卡。
  • 点击“证书”,然后点击“个人”选项卡。

对 Excel、PowerPoint、Publisher、Visio 或 Word 中的宏项目进行数字签名

  • 打开包含您要签名的宏项目的文件。
  • 在“开发人员”选项卡的“代码”组中,单击“Visual Basic”。
  • 在 Visual Basic 中的“工具”菜单上,单击“数字签名”。
  • 出现“数字签名”对话框。
  • 选择证书并单击“确定”。

注意如果您尚未选择数字证书或想要使用其他数字证书,请单击“选择”。选择一个证书并单击“确定”。

注释

  • 建议您仅在解决方案经过测试并准备好分发后才对宏进行签名:当已签名的宏项目中的代码以任何方式更改时,其数字签名将被删除。但是,如果您之前在计算机上拥有用于对项目进行签名的有效数字证书,则在保存宏项目时会自动重新对其进行签名。

  • 如果您希望防止解决方案的用户意外更改您的宏项目并使您的签名无效,请在签名之前锁定宏项目。您的数字签名意味着您保证该项目自您签署以来没有被篡改。您的数字签名并不能证明您编写了该项目。因此,锁定宏项目不会阻止其他用户用另一个签名替换该数字签名。企业管理员可以重新签署模板和加载项,以便控制用户在其计算机上运行的内容。

  • 如果您创建一个向宏项目添加代码的加载项,您的代码应确定该项目是否经过数字签名,并应在用户继续之前通知用户更改已签名项目的后果。

  • 当您对宏进行数字签名时,获取时间戳非常重要,以便在用于签名的证书已过期或在签名后已被吊销时其他用户可以验证您的签名。如果您签署没有时间戳的宏,则签名在您的证书有效期内仍然有效。

关于vba - 从 Outlook 打开时的 Excel 安全设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27691990/

相关文章:

excel - VBA - 写入 4 列数据的所有可能组合

jquery - 循环日历控件 - Jquery

javascript - Google 脚本或 VBA - 输入输入值时插入行 (Excel)

excel - 上传到 Dropbox 但文件很小

sql - 如何使用Excel VBA获取新插入记录的id?

excel - 在单元格中显示公式(平均函数)

c++ - 捕获 Outlook 事件

vba - Outlook 获取 Exchange 用户图片

vba - Excel VBA 语言困难

excel - 如何使用 VBA 在 Excel 单元格中输入大字符串?