Попытка использовать некоторые циклы VBA, но столкнулась с проблемой. Приведенный ниже код проходит через все списки таблиц Excel, и, если значение найдено в столбцах Value1 или Value2, новая строка таблицы создается ниже обработанного значения Listrow + и извлекается в столбец «Извлечено».
Работает, однако согласно скриншотам ниже, l oop технически обрезает и не завершит обработку некоторых строк.
Может быть, l oop фиксирует количество циклов в начале (7 строк) , однако, также только что созданные строки проходят через петлю, и l oop заканчивается до обработки всей таблицы (после завершения l oop в таблице будет больше строк).
Есть ли аккуратный способ это исправить? Нужно ли поменять For For l oop на For next? Хотя жесткое кодирование количества циклов далеко от идеала (хотя и шаг вперед). Или можно заставить For каждого l oop каким-то образом игнорировать вновь созданные строки?
Таблица перед выполнением кода:
Таблица после заполнения:
Sub Extract_values()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim tbl As ListObject
Set tbl = ws.ListObjects("myTable")
Dim lstobj As ListObject
Dim lstrw As ListRow
Dim i As Long
i = 1
Set lstobj = ActiveSheet.ListObjects("myTable")
For Each lstrw In lstobj.ListRows
If Intersect(lstrw.Range, lstobj.ListColumns("Value1").Range).Value <> "" Then
Set newrow = tbl.ListRows.Add(i + 1)
With newrow
.Range(1).Value = .Range(1).Offset(-1, 2).Value
End With
End If
If Intersect(lstrw.Range, lstobj.ListColumns("Value2").Range).Value <> "" Then
Set newrow = tbl.ListRows.Add(i + 2)
With newrow
.Range(1).Value = .Range(1).Offset(-2, 3).Value
End With
End If
i = i + 1
Next lstrw
End Sub