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

为何`#If Not Win64 Then`代码会在32位Office执行且在64位Office中被异常调用?

针对你的两个问题,逐一解答如下:

问题1:为何#If Not Win64 Then代码会在32位Office中执行?

这是完全符合预期的正常行为。VBA的编译常量Win64是由Office环境自动赋值的:

  • 在32位Office中,Win64被解析为False
  • 在64位Office中,Win64被解析为True

所以#If Not Win64 Then等价于#If True Then(在32位Office环境下),代码块自然会被执行——这正好匹配你「仅让代码在32位Office运行」的需求。

问题2:64位Office中DoSomethingOnlyIn32BitOffice被意外调用,哪里出错了?

你遇到的问题核心是:64位Office环境中,编译常量Win64没有被正确识别为True,导致Not Win64的判断结果为True,代码块被错误执行。常见原因及解决方法如下:

  • 项目未重新编译:
    #If...Then是编译时判断,代码的执行逻辑在编译阶段就已固化。如果你的VBA项目最初是在32位Office中创建并编译的,直接在64位Office中打开时,旧的编译结果可能被保留,导致判断逻辑沿用32位环境的设定。
    解决方法:打开VBA编辑器,点击顶部菜单的「调试」→「编译VBA项目」,完成编译后重新运行代码。

  • 手动定义了同名常量:
    检查你的代码中是否存在手动声明Win64常量的语句,比如:

    Const Win64 As Boolean = False
    

    手动定义的常量会覆盖Office系统自带的编译常量,导致判断逻辑完全失效。删除这类自定义常量即可恢复正常。

  • Office位数实际不符:
    极少数情况下,64位Office的安装可能出现异常,导致VBA环境实际运行在32位模式下。你可以运行以下代码验证当前Office的实际位数:

    Sub VerifyOfficeBitness()
        Dim osInfo As String
        osInfo = Application.OperatingSystem
        If InStr(osInfo, "64-bit") > 0 Then
            MsgBox "当前环境:64位Office"
        Else
            MsgBox "当前环境:32位Office"
        End If
    End Sub
    

    如果结果显示为32位,说明你的Office安装可能存在问题,需要重新安装64位版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:07:46