VBA – Копировать, Вставить, затем удалить из старого листа

Вопрос или проблема

У меня есть рабочий лист, который позволяет пользователю вставлять данные, а затем вставлять их на скрытый лист в книге, который управляет сводной таблицей. Это делается с помощью кнопки команды.

Мой код выбирает данные в диапазоне до последней строки, затем вставляет их в следующую строку без данных на другом листе. Затем я пытаюсь удалить данные с листа загрузки, как только процесс завершится. Все работает, кроме удаления данных. Не уверен, что не так. Я также пытался использовать ‘Вырезать’ вместо копирования, но результат был тем же. Буду признателен за помощь.

Sub TestingPaste()

    Application.ScreenUpdating = False
    Dim lst As Long

    Sheets("Upload Data").Range(Range("A2:N2"), Range("A2:N2").End(xlDown)).Copy
    With Sheets("Test")
        lst = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & lst).PasteSpecial xlPasteColumnWidths
        .Range("A" & lst).PasteSpecial xlPasteValues
        Sheets("Upload Data").Range(Range("A2:N2"), Range("A2:N2").End(xlDown)).Clear
    End With

    Application.ScreenUpdating = True

End Sub

Спасибо всем. @BruceWayne, спасибо за совет. Я использовал некоторые из ваших предложений, но обнаружил, что после завершения подпрограммы пользователь оставался на листе ‘тест’. С тех пор я добавил Sheets("Upload Data").Select, чтобы вернуть пользователя на лист загрузки. Ниже представлен окончательный результат для всех заинтересованных.

Dim lst As Long

Sheets("Upload Data").Range(Range("A2:N2"), Range("A2:N2").End(xlDown)).Copy
With Sheets("Test")
    lst = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & lst).PasteSpecial xlPasteColumnWidths
    .Range("A" & lst).PasteSpecial xlPasteValues
    Sheets("Upload Data").Range(Sheets("Upload Data").Range("A2:N2"), Sheets("Upload Data").Range("A2:N2").End(xlDown)).Clear
End With

    Sheets("Upload Data").Select

Application.ScreenUpdating = True

End Sub

Ответ или решение

VBA: Копирование, Вставка и Удаление Данных из Старого Листа

Работа с данными в Excel с помощью VBA может быть весьма эффективной, но иногда могут возникать проблемы, такие как удаление данных после копирования. Этот ответ предоставит вам детальное объяснение процесса и предложит возможные решения вашей задачи.

Проблема

Вы столкнулись с проблемой: хотя данные корректно копируются из одного листа в другой, их удаление после операции вызывает трудности. Вы пытались использовать метод Cut, но он не дал желаемого результата.

Шаги по Решению Проблемы

  1. Копирование Данных: Код правильно копирует диапазон данных. Он выбирает данные с первого ряда начиная с A2 до последнего, и затем вставляет их на нужный лист.

  2. Удаление Данных: Для удаления данных лучше всего использовать метод Clear по завершении вставки. Однако важно убедиться, что вы указываете правильный диапазон для удаления.

  3. Возврат Пользователя на Исходный Лист: Корректно возвращать пользователя на лист "Upload Data" можно добавлением соответствующей строки в код.

Вот улучшенный вариант вашего кода, включая комментарии для лучшего понимания:

Sub TestingPaste()

    Application.ScreenUpdating = False
    Dim lst As Long
    Dim sourceRange As Range

    ' Определяем диапазон для копирования
    Set sourceRange = Sheets("Upload Data").Range(Range("A2:N2"), Range("A2:N2").End(xlDown))

    ' Копируем данные на лист "Test"
    With Sheets("Test")
        lst = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & lst).PasteSpecial xlPasteColumnWidths
        .Range("A" & lst).PasteSpecial xlPasteValues
    End With

    ' Очищаем исходные данные
    sourceRange.Clear

    ' Возвращаем пользователя на лист "Upload Data"
    Sheets("Upload Data").Select

    Application.ScreenUpdating = True

End Sub

Объяснение Кода

  1. Оптимизация кода: Указание диапазона sourceRange для загрузки упрощает удаление данных. Теперь вы можете легко ссылаться на этот диапазон.

  2. Удаление данных: Используя sourceRange.Clear, вы удаляете нужный диапазон без необходимости повторно указывать его в коде.

  3. Удобство для пользователя: Добавление Sheets("Upload Data").Select последним шагом позволяет пользователю оставаться на месте, которое он ожидает увидеть после выполнения скрипта.

Заключение

Работа с макросами в VBA может быть достаточно простой, если правильно структурировать код и понимать логику выполнения действий. Использование простых методов, таких как Clear, и правильное управление интерфейсом пользователя помогут вам избежать многих проблем. Надеюсь, этот ответ поможет вам устранить ошибку и оптимизировать ваш рабочий процесс.

Оцените материал
Добавить комментарий

Капча загружается...