如何通过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
相关产品推荐
相关产品推荐

