Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2013, 09:30   #1
Number_30
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 15
По умолчанию Проверка макросом на дублирование при копировании данных с Userform

Доброго времени суток господа

Есть следующий код на кнопке "Копировать"

Код:
Private Sub CommandButton1_Click()
Dim lItem As Long
Dim strSelected As String
Dim iRow As Long
Dim newlist As Worksheet
Set newlist = Worksheets("Лист1")

For lItem = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lItem) = True Then
        
    iRow = newlist.Cells(Rows.Count, 2).End(xlUp).Offset(1, 2).Row
    
    With newlist
    .Cells(iRow, 1).Value = ListBox1.List(lItem, 0)
    .Cells(iRow, 2).Value = ListBox1.List(lItem, 1)
    .Cells(iRow, 3).Value = ListBox1.List(lItem, 2)
    End With
    
End If
Next lItem

End Sub
Суть кода в том, что при нажатии на кнопку, на новый лист копируются выбранные строки из Listbox-а. Копируются на первую пустую строку.

Вопрос - как прописать, чтобы он перед копированием проверял на дубляж - т.е., если такая строка уже существует на новом листе в предыдущих строках, он показывал бы сообщение о возможном дубляже и запретил копирование.

Спасибо заранее за помощь!
Number_30 вне форума Ответить с цитированием
Старый 06.02.2013, 10:11   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

а не проще скопировать, а потом убрать с помощью
Код:
.RemoveDuplicates
?

если строка одна, то можно использовать
Код:
.Find
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 06.02.2013, 10:29   #3
Number_30
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 15
По умолчанию

Конечно проще, но нужно чтобы было именно как описано выше - с окном о предупреждении о дубляже.
Number_30 вне форума Ответить с цитированием
Старый 06.02.2013, 11:59   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Number_30, используйте Excel-команду Find.
Чтобы получить большую часть синтаксиса команды Find, включите макрорекорер и выполните в Excel поиск чего-нибудь.

Если будет долго код работать (несколько минут), то попробуйте использовать массив или Dictionary.
Помещаете данные из Excel в массив или Dictionary, а затем данные просматриваются в массиве или Dictionary.

Последний раз редактировалось Скрипт; 06.02.2013 в 12:05.
Скрипт вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать скорость передачи данных (при копировании файлов) по сети calypso Работа с сетью в Delphi 0 02.12.2012 19:56
Отключение автоформата при копировании данных alebed Microsoft Office Excel 7 31.12.2011 10:11
Проверка на дублирование (Delphi+FireBird) POPOV БД в Delphi 4 31.03.2010 12:08
Удаление ненужных строк при копировании отобранных данных Gorimir Microsoft Office Excel 13 31.03.2010 10:21
Проверка на дублирование в базе данных POPOV Помощь студентам 9 04.12.2007 18:21