Чтобы увеличить x
до i
, просто переключите Next x
на Next i
.
Sub TransAll()
Dim wb1 As Workbook: Set wb1 = Workbooks("primecost.xlsm")
Dim wb2 As Workbook: Set wb2 = Workbooks("inventory.xlsm")
Dim wb3 As Workbook: Set wb3 = Workbooks("transmanager.xlsm")
Dim Arr1, Arr2, Arr3, Arr4
Dim i As Long, x As Long
Arr1 = Array(2, 3, 5, 6)
Arr2 = Array(2, 3, 4, 5, 6, 7)
Arr3 = Array(1, 2, 3, 4)
Arr4 = Array(5, 6, 7, 8, 9)
Application.ScreenUpdating = False
Application.DisplayAlerts = False '<-- Is this one needed?
Application.EnableEvents = False
For i = LBound(Arr1) To UBound(Arr1)
For x = LBound(Arr3) To UBound(Arr3)
wb1.Sheets(Arr1(i)).Cells.Copy
wb3.Sheets(Arr3(x)).Cells.PasteSpecial Paste:=xlPasteValues
Next x
Next i
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Также применил к вашему коду немного более чистую ( на мой взгляд ) структуру.Обратите внимание, что переменные по умолчанию не определены как Variant
, поэтому при объявлении вариантов вы можете просто использовать Dim Arr
Если вы указали код в этом порядке, вы могли заметить проблему, не публикуя сообщения.Обратите внимание, что операторы открытия и закрытия вокруг циклов выровнены.Ваш код в приведенном ниже формате сделал бы проблему немного более заметной, упрощая ее отладку / исправление, поскольку i и x имели бы разные отступы - просто пример силы принятия стандартного отступа / структуры при кодировании
'Notice the i & x statements are misaligned!
Application.Screen/Alerts/Events
For i = ..
For x = ..
'Action Statements
Next i
Next x
Application.Screen/Alerts/Events
Решение Опубликовать Комментарии
Обновите цикл до
For i = LBound(Arr1) To UBound(Arr1)
wb1.Sheets(Arr1(i)).Cells.Copy
wb3.Sheets(Arr3(i)).Cells.PasteSpecial Paste:=xlPasteValues
Next i