Загрузка данных


Private Sub Worksheet_Change(ByVal Target As Range)
    ' 1. Проверка: изменилась ли ячейка в столбце со статусом (Столбец B = 2)
    If Target.Column <> 2 Then Exit Sub
    
    ' 2. Проверка: не изменили ли мы заголовок (строка 1)
    If Target.Row < 2 Then Exit Sub
    
    ' 3. Проверка: если изменили сразу несколько ячеек (макрос сработает только для одной)
    If Target.CountLarge > 1 Then Exit Sub

    ' 4. Проверка: статус действительно "Окончена"? (Trim убирает случайные пробелы)
    If Trim(Target.Value) <> "Окончена" Then Exit Sub

    ' Объявляем переменные
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim nextRow As Long
    
    Set ws1 = Me ' Текущий лист (Таблица 1)
    
    ' ВНИМАНИЕ: Измените "Лист2" на точное имя вашего второго листа!
    Set ws2 = ThisWorkbook.Sheets("Лист2") 

    ' Находим первую пустую строку во второй таблице (по столбцу A)
    nextRow = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row + 1
    ' Если вторая таблица абсолютно пустая (нет даже заголовков), ставим в 1 строку
    If nextRow = 2 And ws2.Cells(1, 1).Value = "" Then nextRow = 1 

    ' Отключаем события и обновление экрана для ускорения и защиты от зацикливания
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    On Error GoTo CleanUp ' Обработка возможных ошибок

    ' --- КОПИРОВАНИЕ ВО ВТОРУЮ ТАБЛИЦУ ---
    ws2.Cells(nextRow, 1).Value = ws1.Cells(Target.Row, 1).Value ' Номер скважины
    ws2.Cells(nextRow, 2).Value = "Окончена"                     ' Статус

    ' --- ОЧИСТКА В ПЕРВОЙ ТАБЛИЦЕ ---
    ws1.Cells(Target.Row, 1).ClearContents ' Очищаем номер
    ws1.Cells(Target.Row, 2).ClearContents ' Очищаем статус

CleanUp:
    ' Включаем всё обратно
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
    ' Если произошла ошибка, выводим сообщение
    If Err.Number <> 0 Then MsgBox "Произошла ошибка: " & Err.Description, vbCritical, "Ошибка макроса"
End Sub