You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Access VBA代码点击Microsoft Office安全弹窗的确定按钮?

如何用Access VBA点击Office安全提示弹窗的确定按钮?

我正尝试用Access VBA为PDF填充数据,测试代码时出现了Microsoft Office安全提示弹窗(如下),导致后续按Tab键定位输入行的操作无法正常执行。

Microsoft Office提示框

我的现有代码:

FollowHyperlink "C:/Users/Dexter/CA_AgreementForm.pdf"
    
    Sleep 1000 ' wait for PDF to load
    
    ' send 2 TAB keys
    For X = 1 To 2
        SendKeys "{TAB}", True
        Sleep 200
    End If

我尝试过以下操作但均无效:

  • 组策略编辑器:依次进入用户配置>管理模板>Windows组件>附件管理器,启用「不要在文件附件中保留区域信息」策略
  • 注册表编辑器:定位至HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments,新建DWORD(32位)值ScanWithAntiVirus并将数据改为1

解决方法

方法1:通过Windows API定位并点击弹窗按钮

利用API找到弹窗句柄,模拟点击「确定」按钮。在Access VBA模块中添加以下代码:

首先在模块顶部声明API函数:

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr

Const BM_CLICK = &HF5

修改主代码,加入弹窗处理逻辑:

Sub FillPDF()
    Dim hwndDialog As LongPtr
    Dim hwndButton As LongPtr
    
    FollowHyperlink "C:/Users/Dexter/CA_AgreementForm.pdf"
    Sleep 1500 ' 延长等待时间确保弹窗加载完成
    
    ' 查找安全提示弹窗(窗口标题需匹配实际弹窗文本,示例为"Microsoft Office")
    hwndDialog = FindWindow(vbNullString, "Microsoft Office")
    If hwndDialog <> 0 Then
        ' 查找弹窗中的「确定」按钮
        hwndButton = FindWindowEx(hwndDialog, 0, "Button", "确定")
        If hwndButton <> 0 Then
            ' 发送点击指令
            SendMessage hwndButton, BM_CLICK, 0, 0
            Sleep 500 ' 等待弹窗关闭
        End If
    End If
    
    ' 发送2次Tab键(修复原代码语法错误:将End If改为Next X)
    For X = 1 To 2
        SendKeys "{TAB}", True
        Sleep 200
    Next X
End Sub

方法2:用Shell替代FollowHyperlink打开PDF

FollowHyperlink会触发Office安全校验,改用Shell调用默认PDF阅读器,可绕过该弹窗:

Sub OpenPDFWithShell()
    Dim pdfPath As String
    pdfPath = "C:\Users\Dexter\CA_AgreementForm.pdf" ' 注意路径使用反斜杠
    
    ' 调用默认程序打开PDF
    Shell "rundll32.exe url.dll,FileProtocolHandler " & Chr(34) & pdfPath & Chr(34), vbNormalFocus
    Sleep 2000 ' 等待PDF阅读器加载完成
    
    ' 发送2次Tab键
    For X = 1 To 2
        SendKeys "{TAB}", True
        Sleep 200
    Next X
End Sub

方法3:清除文件的区域标识(彻底解决弹窗)

从政府网站下载的文件带有「互联网区域」标记,可通过PowerShell清除:

  1. 打开PowerShell,执行以下命令(替换为你的PDF实际路径):
Remove-ItemProperty -Path "C:\Users\Dexter\CA_AgreementForm.pdf" -Name "Zone.Identifier" -ErrorAction SilentlyContinue
  1. 执行完成后,再用VBA打开文件就不会触发安全提示了。

内容的提问来源于stack exchange,提问作者Dexter Ellison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:00:22