首页 > 解决方案 > 在 VBA 中编写逻辑测试时遇到问题

问题描述

我正在为我的工作场所创建一个改进的时间表,尝试实施宏来检查手动输入的数据。

我有一个按预期工作的代码,但是当我更改逻辑测试时,它就停止工作了。

我自己不擅长 VBA 编码,所以我正在寻求一些帮助。

Sub ErrorMsg2()
  Dim a As Long, b As Long
  Dim Msg As String

  For a = 28 To 44 Step 4
       For b = 4 To 8
        If Application.CountIf(Range("C" & a).Resize(, 6), "(=0.7 or =0.8)") Then
              If Cells(a, b) = (0.7 Or 0.8) And Cells(a, (b - 1)) = (0.9 Or 1) Then
                 If Msg = "" Then Msg = Cells(24, b) Else Msg = Msg & ", " & Cells(24, b)
              End If
           End If
           Next b
           MsgBox Range("A" & a) & " Has been scheduled a night shift followed by a day shift on " & Msg & vbNewLine & "Please Rectify." & vbNewLine & _
          "Press OK to acknowledge.", vbExclamation + vbOKOnly, "Error"
       Msg = ""
  Next a
End Sub

例如,如果单元格 D28 = 0.8 和单元格 C28 = 1,则应显示消息框。

但是,当 b = 9 时会出现消息框。

标签: vbalogic

解决方案


“或”子句的工作方式不同,这里是相关的片段:

If Application.CountIf(Range("C" & a).Resize(, 6), 0.7) + Application.CountIf(Range("C" & a).Resize(, 6), 0.8) > 0 Then
    If (Cells(a, b) = 0.7 Or Cells(a, b) = 0.8)  And (Cells(a, (b - 1)) = 0.9 Or Cells(a, (b - 1)) = 1) Then
        If Msg = "" Then
            Msg = Cells(24, b)
        Else
            Msg = Msg & ", " & Cells(24, b)
        End If
    End If
Next b

推荐阅读