Беда с кодированием логического теста в VBA - PullRequest
0 голосов
/ 24 декабря 2018

Я создаю улучшенное расписание для своего рабочего места, пытаюсь реализовать макросы для проверки ошибок данных, которые вводятся вручную.

У меня есть один код, который работает, как ожидалось, но когда я изменилсялогический тест, он перестает работать.

Я сам не разбираюсь в кодировании 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.

1 Ответ

0 голосов
/ 24 декабря 2018

Предложение «Или» работает иначе, здесь приведен соответствующий фрагмент:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...