Код, который я сканирую на совпадения и выполняет несколько действий:
- Во-первых, он проверяет, чтобы даты назначений были на или после даты запроса на тестирование.
- Затем убедитесь, что ячейка для запроса не пуста, убедившись, что там указан точный код запроса (есть 6 столбцов для проверки кодов).
- Затем он удостоверяется, что номер счета запроса и назначения совпадают.
Ниже приведены несколько условий:
- Если в запрошенную дату или после указанной даты назначена встреча с запрошенной службой, она ничего не должна делать и переходит к следующей строке.
Если отсутствуют пропущенные встречи для запрашиваемых услуг, следует выделить ячейки желтым цветом.
Если ячейка запроса на листе C пуста, код ничего не должен делать.
Если слот запроса заполнен, но есть встреча в или после даты запроса, для той же учетной записи #, и тип запроса / тип встречи совпадают, код ничего не должен делать.
Если нет, строка запроса должна быть выделена желтым цветом.
Задача
Помимо выделения их красным цветом, с которым я могу справиться, кажется, что код выделяет ВСЕ строки, вместо того, чтобы выделять только те, у которых запрошены услуги, но пропущены встречи.
Лист запросов - C, а лист ВСЕХ запланированных встреч - B. Приятно было бы ограничить циклы For
только строками, содержащими данные, чтобы ускорить завершение процесса (возможно, добавить индикатор выполнения. ? Окно Excel и VBA отображают, что они не отвечают, но вентиляторы машин работают быстрее, поэтому я знаю, что он определенно что-то делает).
Данные
Чтобы сделать вещи немного проще:
На листе C (лист запроса):
Account # = Column A
Request Date = Column G
Request Type = Columns H-M
На листе B (основной лист назначения):
Account # = Column A (Must match Sheet C Column A)
Appointment Date = Column L (Must be >= (Greater or equal) to Sheet C Column G
Appointment Type = Column P (Must match Sheet C Column H-M)
Код
Sub check_for_copies()
Dim i As Long
Dim j As Long
For j = 2 To 1000
For i = 2 To 10000
If Sheets("C").Cells(j, 7).Value <= Sheets("B").Cells(i, 12).Value And Sheets("C").Cells(j, 1).Value = Sheets("B").Cells(i, 1).Value And Sheets("C").Cells(j, 8).Value = "CR15" And Sheets("C").Cells(j, 8).Value = Sheets("B").Cells(i, 16).Value Then
'do nothing
ElseIf Sheets("C").Cells(j, 8).Value = "" Then
'do nothing
Else
Sheets("C").Rows(j).Interior.ColorIndex = 3
End If
If Sheets("C").Cells(j, 7).Value <= Sheets("B").Cells(i, 12).Value And Sheets("C").Cells(j, 1).Value = Sheets("B").Cells(i, 1).Value And Sheets("C").Cells(j, 9).Value = "TR15" And Sheets("C").Cells(j, 9).Value = Sheets("B").Cells(i, 16).Value Then
'do nothing
ElseIf Sheets("C").Cells(j, 9).Value = "" Then
'do nothing
Else
Sheets("C").Rows(j).Interior.ColorIndex = 3
End If
If Sheets("C").Cells(j, 7).Value <= Sheets("B").Cells(i, 12).Value And Sheets("C").Cells(j, 1).Value = Sheets("B").Cells(i, 1).Value And Sheets("C").Cells(j, 10).Value = "EEG60" And Sheets("C").Cells(j, 10).Value = Sheets("B").Cells(i, 16).Value Then
'do nothing
ElseIf Sheets("C").Cells(j, 10).Value = "" Then
'do nothing
Else
Sheets("C").Rows(j).Interior.ColorIndex = 3
End If
If Sheets("C").Cells(j, 7).Value <= Sheets("B").Cells(i, 12).Value And Sheets("C").Cells(j, 1).Value = Sheets("B").Cells(i, 1).Value And Sheets("C").Cells(j, 11).Value = "EMG15" And Sheets("C").Cells(j, 11).Value = Sheets("B").Cells(i, 16).Value Then
'do nothing
ElseIf Sheets("C").Cells(j, 11).Value = "" Then
'do nothing
Else
Sheets("C").Rows(j).Interior.ColorIndex = 3
End If
If Sheets("C").Cells(j, 7).Value <= Sheets("B").Cells(i, 12).Value And Sheets("C").Cells(j, 1).Value = Sheets("B").Cells(i, 1).Value And Sheets("C").Cells(j, 12).Value = "NV30" And Sheets("C").Cells(j, 12).Value = Sheets("B").Cells(i, 16).Value Then
'do nothing
ElseIf Sheets("C").Cells(j, 12).Value = "" Then
'do nothing
Else
Sheets("C").Rows(j).Interior.ColorIndex = 3
End If
If Sheets("C").Cells(j, 7).Value <= Sheets("B").Cells(i, 12).Value And Sheets("C").Cells(j, 1).Value = Sheets("B").Cells(i, 1).Value And Sheets("C").Cells(j, 13).Value = "NV45" And Sheets("C").Cells(j, 13).Value = Sheets("B").Cells(i, 16).Value Then
'do nothing
ElseIf Sheets("C").Cells(j, 13).Value = "" Then
'do nothing
Else
Sheets("C").Rows(j).Interior.ColorIndex = 3
End If
Next
Next
End Sub
Код мучительно медленный и выглядит так, как будто он выходит из строя. Я пытался добавить
Application.Calculation = false
Application.ScreenUpdating = false
Application.EnableEvents = false
но это, похоже, не помогает!