Как вернуть значение ячейки с циклом For Next, используя 2 листа и несколько условий - VBA - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь сопоставить значения между двумя листами и, если найдено и условия выполнены, выполнить действие по изменению цвета ячейки.

ПРОБЛЕМА:

Я получаю ошибку в цикле For...Next, хотя я думал, что у меня есть NEXT для каждого оператора FOR.Не уверен, что я сделал неправильно.

Кроме того, я не уверен, что мои счетчики настроены правильно для точного сканирования каждого необходимого листа / столбца.Любая помощь будет оценена.

Sub ReadData()

Dim wb As Workbook
Dim ws As Worksheet
Dim lastrow As Long
Dim i As Long

Set wb = ActiveWorkbook
Set ws = wb.Sheets("Ref1")
Set ws2 = wb.Sheets("TRA")
lastrow = Sheets("Ref1").Cells(Rows.Count, "A").End(xlUp).Row
lastrow2 = Sheets("TRA").Cells(Rows.Count, "A").End(xlUp).Row

Sheets("Ref1").Activate


i = 2
k = 2


For i = 2 To lastrow
    For k = 2 To lastrow2
        If Cells(i, 4).Value = "Active" Then
            If ws.Cells(i, 18).Value = ws2.Cells(i, 1).Value And (ws2.Cells(i, 23).Value <> "Cancelled" Or ws2.Cells(i, 23).Value <> "Completed") Then
    Cells(i, 20).Interior.ColorIndex = 9

End If
    Next

Next

End Sub

1 Ответ

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

Быстрое восстановление

  • Чтобы лучше понять код, часто предпочтительнее использовать буквы, а не цифры, для столбцов.

Код

Sub ReadData()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim ws2 As Worksheet
    Dim lastrow As Long
    Dim lastrow2 As Long
    Dim i As Long
    Dim k As Long

    ' Use ThisWorkbook instead of ActiveWorkbook, if the code is
    ' in the same workbook where these sheets are.
    With ActiveWorkbook
        Set ws = .Worksheets("Ref1")
        Set ws2 = .Worksheets("TRA")
    End With

    lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lastrow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastrow
        If ws.Cells(i, "D").Value = "Active" Then
            For k = 2 To lastrow2
                If ws.Cells(i, "R").Value = ws2.Cells(k, "A").Value _
                        And ws2.Cells(k, "W").Value <> "Cancelled" _
                        And ws2.Cells(k, "W").Value <> "Completed" Then
                    ws.Cells(i, "T").Interior.ColorIndex = 9 ' Brown
                    Exit For
                End If
            Next
        End If
    Next

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...