Я получаю ежедневные отчеты с несколькими сгруппированными таблицами на нескольких листах. В каждой интересующей меня таблице есть только определенные строки. В значении ячейки в каждой из этих строк есть подмножество, определяющее, интересует ли меня это или нет. Это значение должно соответствовать значению в столбце, который у меня есть на другом листе. После того, как у меня есть совпадение, я могу определить, какой цвет я хочу применить к этой линии.
Я уже потратил много времени на это, и пока все, что я пробовал, я мог найти Бег получил кое-что из того, что я хочу работать, но не все. Как только я получу его для первой таблицы, я смогу масштабировать макрос для обработки остальной части рабочей книги.
Я начал с определения MyList как диапазона ячеек, с которым я хочу сравнивать данные из другой лист. Затем я устанавливаю другие переменные, которые в конечном итоге меняю, когда масштабирую это. Затем я удаляю существующее условное форматирование из всей книги, так как мне это не понадобится, как только я все это заработаю. Затем я активирую рабочую таблицу, над которой хочу работать. Кажется, что для l oop работает нормально. У меня настроены часы для переменной NB, и я вижу, что это обновление корректно для каждого l oop. Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, что я делаю с IsError (Match ()), он никогда не обновляется с каждой итерацией для l oop. Таким образом, он либо остается на false все время и окрашивает каждую строку в таблице, либо остается на true все время и ничего не окрашивает (в зависимости от того, какое расположение кода я пробую).
Я сделал кучу Google ищет и читает и не может найти нужную информацию, чтобы выяснить, как это исправить. Пытаюсь ли я использовать то, что мне не следует, или я не правильно что-то определяю? Что еще мне не хватает?
Я новичок в VBA и практически не занимался программированием в течение ряда лет. Таким образом, в дополнение к исправлению этого я действительно заинтересован в причинах этого, поэтому я надеюсь, что не буду повторять эти ошибки.
Set MyList = Worksheets("Sheet1").Range("A1", "A500")
Dim NBcol As Integer, MZcol As Integer, blcol As Integer, NB As String
NBcol = 13
MZcol = 16
blcol = 12
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Cells.FormatConditions.Delete
Next ws
Worksheets("Sheet2").Activate
For i = 7 To 26
NB = Left(Cells(i, NBcol), 6)
If Not IsError(Application.Match(NB, MyList, 0)) Then
If Cells(i, MZcol) >= 3.5 Then
ActiveSheet.Range(Cells(i, blcol), Cells(i, MZcol)).Interior.Color = RGB(250, 191, 143)
Else
ActiveSheet.Range(Cells(i, blcol), Cells(i, MZcol)).Interior.Color = RGB(197, 217, 241)
End If
Else
End If
Next i