Страницы: 1
RSS
удаление дубликатов макрос VBA, необходимо удалить дубликаты, если одинаковый текст в 12 столбцах
 
Добрый день! Подскажите код для удаления дубликатов строк по условию одинакового значение во всех 12 столбцах.
На данный момент применяю код

Private Sub CommandButton1_Click()

With Sheets("Материалы")
       Set tng = Range("A1", Range("l1").End(xlDown))
       tng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Header:=xlYes
   End With

End Sub

но он работает только если кнопка расположена на листе "Детали", а мне нужно чтобы код работал при нажатии кнопки на форме которая запускается с другого листа.
Заранее спасибо
 
Лидия Кунакова, Доброго времени суток. Так вставьте в вашей форме кнопку далее скопируйте ваш код в форму. И самое главное когда будете кнопку вставлять на форме обратите внимание как она будет называться. И переименуйте Private Sub CommandButton1_Click() именем вашей вновь вставленной кнопки. К примеру Private Sub CommandButton8_Click(). И будет вам счастье.
 
это
Код
Set tng = .Range("A1", .Range("l1").End(xlDown))
будет работать на листе Материалы, но что вам нужно не знаю (не смог прочитать в обьяснениях задачи)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, тс скорее всего это надо
Цитата
Лидия Кунакова написал:
а мне нужно чтобы код работал при нажатии кнопки на форме
. Наверное есть некая форма уже. Выше я уже подсказал.
 
MikeVol, Ее код будет срабатывать на активном листе

Iгор все верно написал, чтобы срабатывало на листе Материалы (With Sheets("Материалы"))
Нужно добавить точку
При чем тут лист Детали сложно понять, любой активный лист должен срабатывать.
Но без файла тяжело понять, может автор вообще другой смысл закладывал
 
Цитата
Лидия Кунакова написал:
Подскажите код для удаления дубликатов строк по условию одинакового значение во всех 12 столбцах.
Для получения быстрой и качественной помощи на форуме нужно всегда подготавливать небольшой файл-пример, где показать данные какие есть и можно рядом или на соседнем листе - как хочу получить. Иначе либо не получите помощь совсем, либо разговоров на месяц, либо предложенные варианты помощи вам не подойдут и т.д. и т.д. и т.д.
 
Ham13,
Цитата
Лидия Кунакова написал:
но он работает только если кнопка расположена на листе "Детали"
вам что нибудь это говорит? И да, он
Цитата
Ham13 написал:
код будет срабатывать на активном листе
так как
Цитата
Лидия Кунакова написал:
он работает только если кнопка расположена на листе "Детали"
Соответственно код запускается с активного листа потому что кнопка CommandButton1 находится на листе Детали, а сами действия происходит с листом Материалы
Но каким-то образом
Цитата
Лидия Кунакова написал:
На данный момент применяю код
даже без точки. Да тут спорный вопрос возникает без
Цитата
New написал:
небольшой файл-пример
, согласен.
 
Цитата
MikeVol написал:
Но каким-то образом даже без точки
тут как раз все предельно ясно. Именно потому что без точки, все срабатывает на том листе, в котором код. Это действие по умолчанию для всех модулей классов - если для объекта не указан явно родитель, то в качестве родителя используется сам модуль класса. В нашем случае это сам лист. Вот и получается:
Set tng = Лист_в_котором_код.Range("A1", Лист_в_котором_код.Range("l1").End(xlDown))
Если интересно, здесь расписывал все подробно и последовательно: Как обратиться к диапазону из VBA
там много букав, но возможно, пригодится для общего понимания.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Лидия Кунакова написал:
нужно чтобы код работал при нажатии кнопки на форме которая запускается с другого листа
так и запишите свой код в виде функции с передачей нужного листа:
Код
Function RemDupes(ws as worksheet)
       Set tng = ws.Range("A1", ws.Range("l1").End(xlDown))
       tng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Header:=xlYes
End Function

А по кнопке с любого листа запускайте:
Код
Private Sub CommandButton1_Click()
'передаем в функцию лист с именем "Материалы". Именно в нем будут удалены дубликаты
Call RemDupes(Sheets("Материалы"))
End Sub
Или если надо удалять дубли на листе "Детали":
Код
Private Sub CommandButton1_Click()
'передаем в функцию лист с именем "Детали". Именно в нем будут удалены дубликаты
Call RemDupes(Sheets("Детали"))
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 05.12.2022 17:51:11
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Всем большое спасибо! Помогло. Когда вносила корректировки в код забыла про Range("l1") . Дмитрий, вам также спасибо за ссылку на статью, я обязательно ознакомлюсь.
 
Лидия Кунакова, Вот это вы Оперативно отвечаете на свои темы... Не прошло и пол года...
Страницы: 1
Наверх