Кажется, что для каждого цикла по диапазону .Columns () меняется? - PullRequest
0 голосов
/ 06 мая 2020

Я просматриваю отфильтрованный набор данных на листе, а затем для каждой записи на этом листе перебираю отфильтрованный диапазон на втором листе в другой книге, чтобы вернуть каждую запись для этого «тега». По какой-то причине кажется, что индекс .Columns () прыгает. На первой итерации он извлекает столбцы (1) и столбцы (2), как и ожидалось, но на следующей итерации Columns (1) фактически возвращает значение, которое должно быть в столбцах (2), на следующей итерации - столбцы (1 ) фактически извлекает значение из столбцов (3) и так далее. Приветствуются любые советы по поводу того, чего мне не хватает.

...
flLastRowOfSheet = flWs.Cells(Rows.Count, "A").End(xlUp).Row 'Find last row of Fitting List sheet
Set flSelectionRange = flWs.Range("$A$1:$E$" & flLastRowOfSheet) 'Set range for filter on Fitting List

'-------------------------------------------------------------------
'---Loop through Settings and get all Tags--------------------------
'-------------------------------------------------------------------
For Each Rng In filRange
    If lastRow > filRangeRows Then 
        Exit For
    End If
    tag = Rng.Columns(1).Value2 
    zoneDescription = Rng.Columns(2).Value2
    pasteSheet.Range("A" & lastRow).Value2 = tag 
    InsSum.Range("$P$9") = tag
    pasteSheet.Range("B" & lastRow).Value2 = zoneDescription 

    With flSelectionRange
        .AutoFilter Field:=5, Criteria1:=tag, Operator:=xlAnd, Criteria2:="<>"
        Set flRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells
    End With
    flRangeRowCount = flRange.Rows.Count 
    pasteSheet.Range("C" & lastRow).Value = flRangeRowCount & " Fitting List Entries Found" 

    Dim i As Integer 
    i = 1 
    For Each flRng In flRange 
        If flRange.Rows.Count < i Then 
            Exit For 
        ElseIf flRangeRowCount >= i Then 'Below is where it is not working as expected

            flTag = flRng.Columns(1).Value2
            flDescription = flRng.Columns(2).Value2
            Debug.Print "Zone Tag = " & tag & " Tag = " & flTag & " Description = " & flDescription
            i = i + 1
        End If
    Next flRng
    lastRow = lastRow + 1
Next Rng

... Что я ожидаю увидеть в окне Immediate Window:

Zone Tag = UA000251 Tag = HFF837207 Description = SPG -600 Система охлаждения радиатора Тег зоны = UA000251 Тег = MAJ837239 Описание = SPG-600 ГЕНЕРАТОРНЫЙ ФИЛЬТР СМАЗОЧНОГО МАСЛА Тег резервной зоны = UA000251 Тег = MAJ837237 Описание = ГЛАВНЫЙ ФИЛЬТР СМАЗОЧНОГО МАСЛА ГЕНЕРАТОРА SPG-600

Фактический выход из непосредственного окна:

Тег зоны = UA000251 Тег = HFF837207 Описание = СИСТЕМА ОХЛАЖДЕНИЯ РАДИАТОРА SPG-600 Тег зоны = UA000251 Тег = СИСТЕМА ОХЛАЖДЕНИЯ РАДИАТОРА SPG-600 Описание = 22 Тег зоны = UA000251 Тег = 22 Описание = C Тег зоны = UA000251 Тег = C Описание = UA000251

Заранее благодарим вас за помощь.

1 Ответ

0 голосов
/ 06 мая 2020

flRng.Columns(1) относится к первому столбцу в диапазоне. Если внешний диапазон flRange состоит из нескольких столбцов, тогда flrng.columns(1) изменится.

Вы можете увидеть это здесь, в этом быстром примере:

Sub testrange()
    Dim rg1 As Range
    Dim rg2 As Range

    Set rg1 = Range("A1:AA2")

    For Each rg2 In rg1
        Debug.Print rg2.Columns(1).Address
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...