Как мне установить значение внутреннего цикла do while, вложенного в цикл for? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть отчет, который загружается с клиентского SharePoint.Отчет варьируется по длине в зависимости от сайта и временного диапазона, для которого я его запускаю.Большинство элементов встречаются там, где их информация аккуратно разложена в столбцах по одной строке для каждого элемента, но в случае раздельного решения это решение помещается в несколько строк и не сохраняет другую необходимую информацию в этих строках.Я пытаюсь взять разделенные диспозиции и найти цикл в следующих строках, чтобы скопировать количества и вставить их в столбцы в зависимости от их расположения.

У меня настроен внешний цикл, и он работает.Когда я настраиваю внутренний цикл, он не берет значение внешнего цикла и не добавляет к нему 1 строку.

Sub Split_Dispositions_One_Line()
    Dim LastRow As Integer
    Dim i As Integer
    i = x + i
    LastRow = Worksheets("Data").UsedRange.Rows.Count
    With Worksheets("Data")
        For x = 1 To LastRow
            If InStr(Range("Y" & x).Value, "Split Disposition") Then
                Do While Application.WorksheetFunction.IsText(Range("AI" & i).Value)
                    If InStr(Range("AI" & i).Value, "Release to Good Inventory") Then
                        Range("AH" & i).Copy Range("AK" & x)
                    ElseIf InStr(Range("AI" & i).Value, "Donate") Then
                        Range("AH" & i).Copy Range("AL" & x)
                    ElseIf InStr(Range("AI" & i).Value, "Destroy, Landfill") Then
                        Range("AH" & i).Copy Range("AM" & x)
                    ElseIf InStr(Range("AI" & i).Value, "Destroy, Animal Feed") Then
                        Range("AH" & i).Copy Range("AN" & x)
                    ElseIf InStr(Range("AI" & i).Value, "Return To Plant") Then
                        Range("AH" & i).Copy Range("AO" & x)
                    End If
                Loop
            End If
        Next x
    End With
End Sub

Моя цель - циклически проходить по строкам и, когда я сталкиваюсь, «Разделить расположение»"в столбце Y он затем перейдет во внутренний цикл, опустится на 1 строку вниз от того места, где он обнаружил" Разделить расположение "в Y, и проведет цикл по этим строкам, и если AI содержит текст, он скопирует значение в AH и вставит его в столбецэто соответствует AH в исходной строке, где он обнаружил «Разбить расположение» в столбце Y. Число этих строк различается, но они всегда располагаются одна за другой.

Сказано по-разному, если цикл находит «Разбить расположение»"в ячейке Y5 внутренний цикл начнется с AI6, если у него есть текстовая копия AH6 и вставка в столбец AK5, тогда, если AI7 содержит текст, он скопирует AH7 и может вставить его в AL5 (если этот столбец соответствует AH7).

1 Ответ

1 голос
/ 08 мая 2019

Изменен внутренний цикл на цикл for с опцией выхода, и это, похоже, работает.

Sub Split_Dispositions_One_Line()
        Dim LastRow As Integer
        Dim i As Integer
        LastRow = Worksheets("Data").UsedRange.Rows.Count
        With Worksheets("Data")
            For x = 1 To LastRow
                If InStr(Range("Y" & x).Value, "Split Disposition") Then
                    For i = x + 1 To LastRow
                        If Application.WorksheetFunction.IsText(Range("AI" & i).Value) Then
                            If InStr(Range("AI" & i).Value, "Release to Good Inventory") Then
                                Range("AH" & i).Copy Range("AK" & x)
                            ElseIf InStr(Range("AI" & i).Value, "Donate") Then
                                Range("AH" & i).Copy Range("AL" & x)
                            ElseIf InStr(Range("AI" & i).Value, "Destroy, Landfill") Then
                                Range("AH" & i).Copy Range("AM" & x)
                            ElseIf InStr(Range("AI" & i).Value, "Destroy, Animal Feed") Then
                                Range("AH" & i).Copy Range("AN" & x)
                            ElseIf InStr(Range("AI" & i).Value, "Return To Plant") Then
                                Range("AH" & i).Copy Range("AO" & x)
                            End If
                        ElseIf IsEmpty(Range("AI" & i).Value) Then
                            Exit For
                        End If
                    Next i
                End If
            Next x
        End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...