-1

У меня есть 2 рабочих листа (давайте назовем их worksheet1 и worksheet2) в одной рабочей книге (один файл Excel). workseet1 содержит 2 столбца: Description и Column (2 варианта: Завершено и Выполняется).

Описание и статус(Завершено / В процессе)

Мое требование: когда я выбираю статус = Выполняется (из раскрывающегося списка), всю эту строку необходимо переместить на второй рабочий лист, т.е. на рабочий лист2. Так что у меня остались только те строки, которые имеют статус = Завершено на листе. То есть рабочий лист1 будет содержать только те строки, которые имеют статус = выполнено, и второй рабочий лист, т.е. рабочий лист2 будет содержать только строки, которые содержат статус = выполняется.

В тот момент, когда я выбираю любую опцию в статусе, она перемещается на соответствующий лист.

ТИА

1 ответ1

1

Не совсем уверен, почему вы хотите разбить ваши данные, но вы можете использовать событие Worksheet_Change() в VBA, чтобы выполнить то, что вам нужно.

Это идет в коде заполненного рабочего листа :

Private Sub Worksheet_Change(ByVal Target As Range)
    'This goes into your "Completed" worksheet's module

    Dim RngB As Range
    Set RngB = Intersect(Target, Range("B:B"))

    If RngB Is Nothing Then Exit Sub
    Application.EnableEvents = False

    Dim cel As Range, wsInProgress As Worksheet, retVal As Variant

    '!!! Change the worksheet name to whatever it is that moves from your completed
    'worksheet to the in-progress worksheet...
    Dim wsInProgress As Worksheet
    Set wsInProgress = ThisWorkbook.Worksheets("In-Progress")

    For Each cel In RngB.Cells
        Debug.Print cel.Address
        If cel.Value = "In-Progress" Then
            wsInProgress.Rows(nextrow(wsInProgress)) = cel.EntireRow.Value
            cel.EntireRow.Delete
        End If
    Next
    Application.EnableEvents = True
End Sub

Это идет в коде In-Progress Worksheet :

Private Sub Worksheet_Change(ByVal Target As Range)
    'This goes into your "In-Progress" worksheet's module

    Dim RngB As Range
    Set RngB = Intersect(Target, Range("B:B"))

    If RngB Is Nothing Then Exit Sub
    Application.EnableEvents = False

    Dim cel As Range, wsInProgress As Worksheet, retVal As Variant

    '!!! Change the worksheet name to whatever it is that moves from your completed
    'worksheet to the in-progress worksheet...
    Dim wsCompleted As Worksheet
    Set wsCompleted = ThisWorkbook.Worksheets("Completed")

    For Each cel In RngB.Cells
        Debug.Print cel.Address
        If cel.Value = "Completed" Then
            wsInProgress.Rows(nextrow(wsCompleted)) = cel.EntireRow.Value
            cel.EntireRow.Delete
        End If
    Next
    Application.EnableEvents = True
End Sub

Это входит в стандартный модуль:

Public Function nextRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
    nextRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row + 1
End Function

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .