Страницы: 1
RSS
Перенос строк/удаление строк после переноса
 
Здравствуйте, уважаемые форумчане! Подскажите, пожалуйста решить задачку.
Необходимо из одной таблицы перенести строки в другую с сохранением значений.
После переноса значений из первой таблицы необходимо удалить строки.
 
Написал макрос для удаления строк, но почему-то ничего не удаляет.
Подскажите, пожалуйста что не так
Изменено: Евгений Минаков - 06.10.2021 07:10:50
 
Здравствуйте.
Смотрите в файле, добавляется в новый список двойным щелчком
 
Msi2102, спасибо за ответ.
Только задача состоит в том, что в пустую таблицу вносятся новые сотрудники,
а после того как внесутся необходимые данные, они переносятся на другой лист,
при этом первая таблица должна очистится. Это как-то можно реализовать?
 
Вы файл открывали?
Цитата
Евгений Минаков:
Необходимо из одной таблицы перенести строки в другую с сохранением значений.
После переноса значений из первой таблицы необходимо удалить строки.

Откройте файл, включите макросы. На листе "Список сотрудников" двойной клик по любой фамилии или должности, при этом данные (по которым вы кликнули) из "Списка сотрудников" удалятся и вставятся в таблицу "Новые сотрудники".
Всё сделал как просили.
Изменено: Msi2102 - 06.10.2021 13:48:39
 
Да, открывал.
Перефразирую вопрос.
Можно ли переносить строки не по одной, а все сразу?
Например кнопкой
Изменено: Евгений Минаков - 06.10.2021 14:03:14
 
Я не понимаю, что именно Вы хотите. Скопировать весь список, выделенные позиции или может помеченные?
 
Все супер.
Приносят список с фамилиями и заполняют таблицу.
После заполнения таблицы и нужно переносить внесенные данные в уже существующий список.
Только не по одной фамилии (т.к. их может быть очень много), а сразу все
 
В фале примере есть два списка, первый "Список сотрудников" второй "Новые сотрудники". Вам нужно весь первый список вставить в конец второго после чего первый список очищаем? Если так, то я не понимаю в чем проблема. нужно просто выделить все данные (Ctrl+a) вырезать (Ctrl+x) и вставить в нужное место (Ctrl+v) (или мышкой правой кнопкой по нужным менюшка) работа в три действия. Собственно проблем написать макрос нет, просто нужно конкретно знать ваши задачи.
Посмотрите файл. Так?
Тоже двойным щелчком
Изменено: Msi2102 - 06.10.2021 14:54:57
 
Msi2102 , прошу прощения за бестактность, но я немного переделал Ваш макрос под себя.
Подскажите, пожалуйста как исправить появление пустой строки  
Изменено: Евгений Минаков - 07.10.2021 06:50:07
 
Если бы Вы пытались переделать мой код, то он бы выглядел вот так:
Код
Sub Удаление_строк_1()
Dim a As Long, ShNN_1 As ListObject, ShON_1 As ListObject
    Set ShNN_1 = Worksheets("Новые сотрудники").ListObjects("Новые_сотрудники_tb")
    Set ShON_1 = Worksheets("Списки сотрудников").ListObjects("Списки_сотрудников_tb")
    ShON_1.ListRows.Add AlwaysInsert:=True
    a = ShON_1.ListRows.Count
    ShNN_1.DataBodyRange.Copy ShON_1.ListRows(a).Range
    Application.CutCopyMode = False
    Selection.ListObject.DataBodyRange.Delete
End Sub

А Вы скорее пытаетесь написать свой, что собственно похвально.

VBA Excel. Метод Range.Insert (вставка со сдвигом ячеек), почитайте здесь про этот метод, он позволяет Вам вставить ячейки со сдвигом имеющихся ячеек.
Этой строкой:
Код
Set ONListRow = ONListObj.ListRows.Add
добавили строку в конец таблицы
Этой:
Код
Paste = ONListObj.ListRows.Count
посчитали количество строк
А этой:
Код
ONListRow = ShON.ListObjects("Списки_сотрудников_tb").ListRows(Paste).Range.Insert
вставляете скопированные строки перед вставленной строкой (т.к. она последняя и её номер соответствует количеству строк в переменной "Paste"), сдвигая её вниз.
Чтобы понятнее было, в коде закомментируйте строку добавления строки и замените переменную "Paste" на 1, тогда список будет вставляться в начало таблицы, сдвигая все данные вниз.
Код
ONListRow = ShON.ListObjects("Списки_сотрудников_tb").ListRows(1).Range.Insert

Поэтому для того, чтобы не было пустой строки напишите так:
Код
ShNN.ListObjects("Новые_сотрудники_tb").DataBodyRange.Copy ShON.ListObjects("Списки_сотрудников_tb").ListRows(Paste).Range

При этом строки:
Код
Copy = ShNN.ListObjects("Новые_сотрудники_tb").DataBodyRange.Copy
и
Код
ONListRow = ShON.ListObjects("Списки_сотрудников_tb").ListRows(Paste).Range.Insert
удалите или закомментируйте

Я не знаю, где ещё в коде Вы используете эти переменные NNListRow и NNListObj, но в этой процедуре они не используются, поэтому если код только на копирование строк, то их можно удалить.
Изменено: Msi2102 - 07.10.2021 09:07:46
 
Msi2102, спасибо за помощь!
Страницы: 1
Наверх