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

VBA中If语句结合And与Not函数的用法及代码问题排查

分析你的VBA代码问题及修复方案

首先,你的代码存在两个关键问题,导致无法达到预期效果:

  • 多单元格Range的比较逻辑错误:Range("'Cost Sheet'!D87", "'Cost Sheet'!D88") > 0这种写法不能正确判断D87和D88是否都大于0。当你用包含多个单元格的Range直接和数值比较时,VBA不会逐个检查单元格值,而是返回一个数组,这样的条件判断结果完全不符合你的需求(你需要的是两个单元格都满足大于0的条件)。

  • 工作表对象未明确指定:你的Range("B97")和Range("B98")没有绑定到Cost Sheet工作表,如果当前激活的不是目标工作表,代码会错误操作其他表的单元格;同时Not Range("B97") = " • BBQ"的写法不够严谨,建议用<>直接表示不等于,同时明确引用单元格的.Value属性(虽然VBA会默认读取Value,但明确写出更清晰易懂)。

修复后的代码

With ThisWorkbook.Worksheets("Cost Sheet")
    ' 判断D87和D88都大于0,且B97不等于指定文本
    If .Range("D87").Value > 0 And .Range("D88").Value > 0 And .Range("B97").Value <> " • BBQ" Then
        .Range("B98").Value = " • BBQ"
    End If
End With

额外说明

  • 用With语句可以简化代码,同时确保所有Range操作都严格指向Cost Sheet工作表,避免因激活其他工作表导致的错误。
  • 如果你的需求是D87或D88其中任意一个大于0,只需把判断里的And改成Or即可:
With ThisWorkbook.Worksheets("Cost Sheet")
    If (.Range("D87").Value > 0 Or .Range("D88").Value > 0) And .Range("B97").Value <> " • BBQ" Then
        .Range("B98").Value = " • BBQ"
    End If
End With

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:39:54