Код цикла VBA и распознает ли он несколько листов для копирования в Excel? - PullRequest
0 голосов
/ 02 января 2019

example Я пытаюсь выяснить, ЕСЛИ это возможно, и если да, как запустить мой цикл, чтобы при первом запуске он копировал / вставлял в Sheet1, а во второй раз -он копирует / вставляет в лист 2. Я думал, что может быть полезен массив, но я не знаком с их использованием или синтаксисом.Буду признателен за любую помощь в правильном направлении!

 For Each a In Range("2:2").SpecialCells(xlCellTypeFormulas).Areas
     a.Resize(lrow - 1, a.Columns.Count).FillDown

 With Worksheets("Fall 2016")
     lrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
     With .Range("A3:CU" & lrow)
         On Error Resume Next
         Set erng = .SpecialCells(xlCellTypeFormulas, xlErrors)
         On Error GoTo 0
         If Not erng Is Nothing Then
             Intersect(.Parent.Range("A:CU"), erng.EntireRow).Copy
             Worksheets("Sheet1").Range("A3").PasteSpecial
         End If
     End With
 End With
 Next a

1 Ответ

0 голосов
/ 02 января 2019

Извините, я не вижу изображения, поэтому я собрал что-то, что должно работать.
Есть две процедуры - RunMe просто запускает процедуру Test и передает ее на первый лист, другой листзатем считается вторым листом.
Я не включил блок For...Each, так как он использует lrow, который не определен до тех пор, пока не будет использован, поэтому по умолчанию будет 0 - не уверен, что выпытаюсь сделать там.

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

Sub RunMe()

    Test ThisWorkbook.Worksheets("Lago")

    'If not using last line in main code, then
    'include this to run second sheet at time of your choosing.
    'Test ThisWorkbook.Worksheets("MF")

End Sub

Sub Test(FirstSheet As Worksheet)

    Dim SecondSheet As Worksheet

    Dim lrow As Long
    Dim eRng As Range

    If FirstSheet.Name = "Lago" Then
        'The "Parent" of a worksheet is the workbook.
        Set SecondSheet = FirstSheet.Parent.Worksheets("MF")
    Else
        Set SecondSheet = FirstSheet.Parent.Worksheets("Lago")
    End If

    With FirstSheet
        lrow = .Cells(.Rows.Count, 1).End(xlUp).Row
        With .Range(.Cells(3, 1), .Cells(lrow, 99))
            On Error Resume Next
            Set eRng = .SpecialCells(xlCellTypeFormulas, xlErrors)
            On Error GoTo 0

            If Not eRng Is Nothing Then
                Intersect(.Parent.Range("A:CU"), eRng.EntireRow).Copy
                SecondSheet.Range("A3").PasteSpecial
            End If

        End With
    End With

    'Now run again but with sheets reversed.
    'Include this line to run both sheets in one go.
    If FirstSheet.Name = "Lago" Then Test SecondSheet

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...