Вложенное выполнение VBA в цикле For

#excel #vba

#превосходить #vba

Вопрос:

У меня возникли некоторые проблемы с вложенным циклом Do While и For в VBA.

По сути, у меня есть две таблицы. Я пытаюсь повторить каждую строку первой таблицы, сколько бы строк ни было во второй таблице. Количество строк во второй таблице может меняться со временем, поэтому, к сожалению, я не могу жестко указать количество строк в ней.

В своем текущем состоянии цикл for только правильно повторяет первую строку моей таблицы на листе «Var Admin» и не собирается делать то же самое со второй строкой в первой таблице.

Вот что я пробовал до сих пор:

 Sheets("Managers").Select  Range("Table6").Select  managers = ActiveSheet.UsedRange.rows.Count  managers = managers - 1   Set myTable = Worksheets("Var").ListObjects("var_no_format")   my = 1  looper = 1    For Each lr In myTable.ListRows  Do While looper lt;= managers  lr.Range.rows.Copy Sheets("Var Admin").Range("A" amp; my)  my = my   1  looper = looper   1  Loop  Next lr  

Что я могу попробовать дальше?

Ответ №1:

Я скопировал значения в массив для скорости.

 Option Explicit  Sub copyrows()    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet  Dim managers As Long, tbl As ListObject  Dim n As Long, i As Long, r As Long, c As Long  Dim trow As ListRow, ar    With ThisWorkbook  Set ws1 = .Sheets("Managers")  Set ws2 = .Sheets("Var")  Set ws3 = .Sheets("Var Admin")  End With    managers = ws1.ListObjects("Table6").ListRows.Count  Set tbl = ws2.ListObjects("var_no_format")  ReDim ar(1 To managers * tbl.ListRows.Count, 1 To tbl.ListColumns.Count)    i = 1  For r = 1 To tbl.ListRows.Count  For c = 1 To tbl.ListColumns.Count  ar(i, c) = tbl.DataBodyRange(r, c).Value2  For n = 1 To managers - 1  ar(i   n, c) = ar(i, c)  Next  Next  i = i   managers  Next    ' output  ws3.Range("A1").Resize(UBound(ar), UBound(ar, 2)) = ar  MsgBox "Table rows copied for " amp; managers amp; " times", vbInformation   End Sub  

Комментарии:

1. Привет! Большое вам спасибо за ваш ответ. К сожалению, это не совсем то, что мне нужно. Этот код копирует всю таблицу в Var Admin n раз, но мне нужна строка 1 таблицы, скопированная в Var Admin n раз, затем строка 2, скопированная в Var Admin n раз, и так далее.

2. @AleksLi Вы тоже хотите скопировать форматы или только значения ?

3. Просто значения-это нормально.

4. @AleksLi кстати, ваш код будет работать, если вы переместите looper = 1 строку в после For Each lr In myTable.ListRows

5. Похоже, это сработало. Большое вам спасибо!!!