Макрос не работает, когда у меня есть два условия - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь создать трекер, который, если в раскрывающемся списке «Закрыт вовремя» или «Закрыт поздно», автоматически скрывает весь ряд.В настоящее время я использую приведенный ниже код: закрыто поздно работает, но не закрыто вовремя.Кто-нибудь может помочь?

Private Sub Worksheet_Change(ByVal Target As Range)
    BeginRow = 3
    EndRow = 700
    ChkCol = 14

    For RowCnt = BeginRow To EndRow
        If (Cells(RowCnt, ChkCol)(.Value = "Closed late")) And (.Value = "Closed on time") Then
            Cells(RowCnt, ChkCol).EntireRow.Hidden = True
        Else
            Cells(RowCnt, ChkCol).EntireRow.Hidden = False
        End If
    Next RowCnt
End Sub

1 Ответ

0 голосов
/ 25 января 2019

Проблема в том, что

If (Cells(RowCnt, ChkCol)(.Value = "Closed late")) And (.Value = "Closed on time") Then

не является допустимым синтаксисом.Это должно быть

If Cells(RowCnt, ChkCol).Value = "Closed late" And Cells(RowCnt, ChkCol).Value = "Closed on time") Then

Тем не менее, я рекомендую следующие улучшения:

С Intersect(Target, Target.Parent.Range(Cells(BeginRow, ChkCol), Cells(EndRow, ChkCol))) вы можете убедиться, что ваш код работает только в измененных ячейках в столбце 14. Поэтому вы не можетецикл через ненужные неизмененные ячейки.

Также я рекомендую активировать Option Explicit: в редакторе VBA перейдите на Инструменты Параметры Требуется декларация переменной .

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim BeginRow As Long
    BeginRow = 3

    Dim ChkCol As Long
    ChkCol = 14

    Dim EndRow As Long
    EndRow = 700 'could be replaced with dynamic solution below
    'EndRow = Target.Parent.Cells(Target.Parent.Rows.Count, ChkCol).End(xlUp).Row

    Dim ChangedCells As Range
    Set ChangedCells = Intersect(Target, Target.Parent.Range(Cells(BeginRow, ChkCol), Cells(EndRow, ChkCol)))

    If Not ChangedCells Is Nothing Then
        Dim Cell As Range
        For Each Cell In ChangedCells
            If Cell.Value = "Closed late" Or _
               Cell.Value = "Closed on time" Then
                Cell.EntireRow.Hidden = True
            End If
        Next Cell
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...