Как остановить просмотр моего кода на текущей открытой странице. VBA - PullRequest
0 голосов
/ 17 января 2020

Справочная информация : у меня есть данные в таблице, где я сравниваю два столбца J и T. Значения, которые могут принимать J и T, включают A2B, APL, BGF, CMA и другие (см. Код) .

Если эти значения равны, скопируйте строку i в лист с именем только что отмеченных ячеек.

Если эти значения не равны, скопируйте строку i в листы, которые имеют имя только что проверенных ячеек.

Пример : сравнить J2 и T2,

Предположим, J2 = T2 = BGF, затем скопировать строку 2 и вставить в лист ("BGF" ")

Далее сравните J3 и T3

Предположим, J3 = BGF и T3 = CMA, скопируйте строку 3 и вставьте в лист (BGF) и лист (CMA)

Продолжить для J4 et c ...

Проблема : Если у меня открыт лист «Все данные», когда я запускаю свой саб, он работает отлично. Однако кнопка, назначенная этому Sub, находится на другой странице, и когда я нажимаю кнопку, она пытается скопировать данные с открытой страницы, а не со всех данных.

Sub Sortdata()

    Sheets("A2B").Cells.ClearContents
    Sheets("APL").Cells.ClearContents
    Sheets("BGF").Cells.ClearContents
    Sheets("CMA").Cells.ClearContents
    Sheets("K Line").Cells.ClearContents
    Sheets("MacAndrews").Cells.ClearContents
    Sheets("Maersk").Cells.ClearContents
    Sheets("OOCL").Cells.ClearContents
    Sheets("OPDR").Cells.ClearContents
    Sheets("Samskip").Cells.ClearContents
    Sheets("Unifeeder").Cells.ClearContents

    Dim i As Long
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim LastRow As Long


    With Worksheets("All Data")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To LastRow
            If IsEmpty(.Range("J" & i)) Then
                Set ws1 = Nothing
            Else
                Set ws1 = Worksheets(.Range("J" & i).Value)
            End If
            If IsEmpty(.Range("T" & i)) Then
                Set ws2 = Nothing
            Else
                Set ws2 = Worksheets(.Range("T" & i).Value)
            End If

            If ws1 Is Nothing Then
                If Not ws2 Is Nothing Then
                    CopyToWs ws2, .Rows(i)
                End If
            ElseIf ws2 Is Nothing Then
                If Not ws1 Is Nothing Then
                    CopyToWs ws1, .Rows(i)
                End If
            Else
                CopyToWs ws1, Rows(i)
                If ws1.Name <> ws2.Name Then
                    CopyToWs ws2, Rows(i)
                End If
            End If
        Next
    End With

End Sub

Sub CopyToWs(ws As Worksheet, rng As Range)
    rng.Copy
    ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(1, 0).EntireRow.PasteSpecial xlPasteValuesAndNumberFormats
End Sub
...