Вопрос или проблема
У меня есть рабочий лист, который позволяет пользователю вставлять данные, а затем вставлять их на скрытый лист в книге, который управляет сводной таблицей. Это делается с помощью кнопки команды.
Мой код выбирает данные в диапазоне до последней строки, затем вставляет их в следующую строку без данных на другом листе. Затем я пытаюсь удалить данные с листа загрузки, как только процесс завершится. Все работает, кроме удаления данных. Не уверен, что не так. Я также пытался использовать ‘Вырезать’ вместо копирования, но результат был тем же. Буду признателен за помощь.
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
, но он не дал желаемого результата.
Шаги по Решению Проблемы
-
Копирование Данных: Код правильно копирует диапазон данных. Он выбирает данные с первого ряда начиная с A2 до последнего, и затем вставляет их на нужный лист.
-
Удаление Данных: Для удаления данных лучше всего использовать метод
Clear
по завершении вставки. Однако важно убедиться, что вы указываете правильный диапазон для удаления. -
Возврат Пользователя на Исходный Лист: Корректно возвращать пользователя на лист "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
Объяснение Кода
-
Оптимизация кода: Указание диапазона
sourceRange
для загрузки упрощает удаление данных. Теперь вы можете легко ссылаться на этот диапазон. -
Удаление данных: Используя
sourceRange.Clear
, вы удаляете нужный диапазон без необходимости повторно указывать его в коде. -
Удобство для пользователя: Добавление
Sheets("Upload Data").Select
последним шагом позволяет пользователю оставаться на месте, которое он ожидает увидеть после выполнения скрипта.
Заключение
Работа с макросами в VBA может быть достаточно простой, если правильно структурировать код и понимать логику выполнения действий. Использование простых методов, таких как Clear
, и правильное управление интерфейсом пользователя помогут вам избежать многих проблем. Надеюсь, этот ответ поможет вам устранить ошибку и оптимизировать ваш рабочий процесс.