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

如何通过VBA检测用户是否运行Office 365?

判断Office 365的VBA解决方案

问题说明

  • 使用Application.Version无法区分Office 365和Office 2016,两者均返回16.0
  • 直接读取注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration\ProductReleaseIds时,32位Office运行在64位Windows环境下会返回空值——这是因为32位程序默认会读取注册表的Wow6432Node重定向路径,而非原路径

解决方法

通过判断系统和Office的位数,选择对应注册表路径读取,以此区分Office 365:

Function IsOffice365() As Boolean
    Dim wsh As Object
    Dim regPath As String
    Dim releaseId As String
    
    Set wsh = CreateObject("WScript.Shell")
    
    ' 识别32位Office在64位系统的场景,切换到Wow6432Node路径
    If Environ("PROCESSOR_ARCHITECTURE") = "AMD64" And Environ("PROCESSOR_ARCHITEW6432") <> "" Then
        regPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\ClickToRun\Configuration\ProductReleaseIds"
    Else
        ' 64位Office或32位系统,读取原注册表路径
        regPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration\ProductReleaseIds"
    End If
    
    ' 捕获注册表项不存在的错误
    On Error Resume Next
    releaseId = wsh.RegRead(regPath)
    On Error GoTo 0
    
    ' Office 365的ProductReleaseIds会包含O365、Monthly、SemiAnnual等标识
    IsOffice365 = (InStr(1, releaseId, "O365", vbTextCompare) > 0) Or _
                  (InStr(1, releaseId, "Monthly", vbTextCompare) > 0) Or _
                  (InStr(1, releaseId, "SemiAnnual", vbTextCompare) > 0)
                  
    Set wsh = Nothing
End Function

补充说明

  • Office 365采用ClickToRun部署模式,该注册表项仅存在于这类部署中;而传统Office 2016多为MSI安装,无此配置项
  • 错误处理可避免因非ClickToRun安装导致的程序崩溃
  • 可根据实际需求调整releaseId的匹配规则,比如添加更具体的版本标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:02:02