Как добраться до другого массива, прогрессирующего в цикле - PullRequest
0 голосов
/ 14 февраля 2019

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

    Sub TransAll()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.EnableEvents = False

    Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook
    Dim Arr1 As Variant, Arr2 As Variant, Arr3 As Variant, Arr4 As Variant
    Dim i As Integer
    Dim x As Integer

    Set wb1 = Workbooks("primecost.xlsm")
    Set wb2 = Workbooks("inventory.xlsm")
    Set wb3 = Workbooks("transmanager.xlsm")

    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)


    'for "I" works fine by iteself, but it needs "I" and "X" to progress accordingly in the same loop according to the different arrays.

    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 i
    'Next x


    '------------------------------------------------------------------
        'this works but on at a time... very slow and a pain
        'wb1.Sheets(6).Cells.Copy
            'wb3.Sheets(1).Cells.PasteSpecial Paste:=xlPasteValues    
    '------------------------------------------------------------------      

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    End Sub

Мне просто нужно знать, как получить оба варианта в одном цикле.

1 Ответ

0 голосов
/ 14 февраля 2019

Чтобы увеличить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...