Ситуация следующая: есть основная процедура, обрабатывающая большой объём данных. Данные берутся с листа Excel. Внутри основной процедуры выполняется подпроцедура, выявляющая ячейки, не подходящие для дальнейшей обработки. Задача в том, чтобы приостановить выполнение основной процедуры до выполнения условий, проверяемых в под_процедуре.
Если подробнее, то существует закономерность, если содержит слово "Item", то следующая за ней строка обязательно должна содержать номер, начинающийся с букв "PR". Однако, иногда этот порядок нарушается, и в случае дальнейшей обработки таких ячеек, итоговый результат будет неверным. Поэтому решено было написать под_процедуру, которая находит несоответствующие закономерности строки и выделяет их(код ниже).
[vba]
Код
Sub FindEmptyLines() With Лист1 Dim i&, a(), rg As Range, s As String With .Range("A1", .Cells(Rows.Count, "A").End(xlUp)) a = WorksheetFunction.Transpose(.Value) End With
For i = LBound(a) To UBound(a) If InStr(a(i), "Item") Then If InStr(a(i + 1), "PR No.") = 0 Then If rg Is Nothing Then Set rg = .Rows(i + 1) Else Set rg = Union(rg, .Rows(i + 1)) If Len(s) = 0 Then s = "A" & i + 1 Else: s = s & Chr(44) & "A" & i + 1: End If End If End If Next i
If Not rg Is Nothing Then rg.Interior.Color = 255 rg.Font.Color = 16777215 MsgBox "Не указаны PR номера в следующих ячейках: " & vbNewLine & s, vbCritical, "ВНИМАНИЕ!" End If End With End Sub
[/vba]
Выделенные ячейки будут исправляться вручную, после чего под_процедура запускается вновь. Вопрос в том, как сделать так, чтобы основная процедура приостанавливалась тех пор, пока в под_процедуре не будет выполнено условие s<>""? То есть когда, все ячейки будут соответствовать закономерности.
Буду благодарен за идеи и подсказки.
Привет всем форумчанам!
Ситуация следующая: есть основная процедура, обрабатывающая большой объём данных. Данные берутся с листа Excel. Внутри основной процедуры выполняется подпроцедура, выявляющая ячейки, не подходящие для дальнейшей обработки. Задача в том, чтобы приостановить выполнение основной процедуры до выполнения условий, проверяемых в под_процедуре.
Если подробнее, то существует закономерность, если содержит слово "Item", то следующая за ней строка обязательно должна содержать номер, начинающийся с букв "PR". Однако, иногда этот порядок нарушается, и в случае дальнейшей обработки таких ячеек, итоговый результат будет неверным. Поэтому решено было написать под_процедуру, которая находит несоответствующие закономерности строки и выделяет их(код ниже).
[vba]
Код
Sub FindEmptyLines() With Лист1 Dim i&, a(), rg As Range, s As String With .Range("A1", .Cells(Rows.Count, "A").End(xlUp)) a = WorksheetFunction.Transpose(.Value) End With
For i = LBound(a) To UBound(a) If InStr(a(i), "Item") Then If InStr(a(i + 1), "PR No.") = 0 Then If rg Is Nothing Then Set rg = .Rows(i + 1) Else Set rg = Union(rg, .Rows(i + 1)) If Len(s) = 0 Then s = "A" & i + 1 Else: s = s & Chr(44) & "A" & i + 1: End If End If End If Next i
If Not rg Is Nothing Then rg.Interior.Color = 255 rg.Font.Color = 16777215 MsgBox "Не указаны PR номера в следующих ячейках: " & vbNewLine & s, vbCritical, "ВНИМАНИЕ!" End If End With End Sub
[/vba]
Выделенные ячейки будут исправляться вручную, после чего под_процедура запускается вновь. Вопрос в том, как сделать так, чтобы основная процедура приостанавливалась тех пор, пока в под_процедуре не будет выполнено условие s<>""? То есть когда, все ячейки будут соответствовать закономерности.