Как сделать сайт:
  HTML
  JavaScript
  PHP
  CMS
Microsoft Office:
  Word
  Excel
  VBA
Просто о сложном
Список форумов on-line-teaching.com on-line-teaching.com
Онлайн курсы MS Office: Word, Excell. Как сделать сайт: HTML, JS, PHP
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Проверка наличия записи

 
Начать новую тему   Ответить на тему    Список форумов on-line-teaching.com -> Excel: общие вопросы
Предыдущая тема :: Следующая тема  
Автор Сообщение
Ju_andr
Prizivnik - draftee
Prizivnik - draftee


Зарегистрирован: 18.06.2008
Сообщения: 2
Откуда: Украина

СообщениеДобавлено: Ср Июн 18, 2008 4:19 pm    Заголовок сообщения: Проверка наличия записи Ответить с цитатой

Добрый день!

Подскажите пожалуйста (если возможно в Excel) - имеется таблица где бодее тысячи записей (в колонке). Как сделать, чтобы при вводе новой записи осуществлялась проверка, может такая запись уже существует выше???? Запись текстовая.

Заранее спасибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
abcde
Rjadovoj - the ranks
Rjadovoj - the ranks


Зарегистрирован: 12.07.2008
Сообщения: 12
Откуда: Беларусь

СообщениеДобавлено: Сб Июл 12, 2008 9:49 pm    Заголовок сообщения: Ответить с цитатой

'В модуль рабочего листа, на котором вводятся
'данные вставьте такую процедуру.

Private Sub Worksheet_Change(ByVal Target As Range)
col = 1 'номер колонки(1), в которой осуществляется проверка
'== замените на номер своей колонки ==
'если введено значение в другую колонку или выделено несколько
'колонок (для удаления строки), завершаем выполнение процедуры
If Target.Column <> col Or Target.Columns.Count > 1 Then Exit Sub
' получаем введенное в ячейку значение
fCell = Trim(Target.Value)
'если ячейка пустая (удалили ранее введенное),завершаем выполнение процедуры
If fCell = Empty Then Exit Sub
'ищем введенное значение в колонке с номером col
fCell = Trim(Target.Value)
Set f = Columns(col).Find(What:=fCell, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext)
'если нашли и это было введено раньше
If Target.Address <> f.Address Then
'выделяем ячейку с ранее введенным значением
f.Select
'предупреждаем пользователя, что такая запись уже есть в такой-то строке
MsgBox ("Такая запись уже есть" & vbCrLf & "в строке " & f.Row)
'очищаем ячейку с новой записью
Target.Value = Empty
'и выделяем ее
Target.Select
End If
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ju_andr
Prizivnik - draftee
Prizivnik - draftee


Зарегистрирован: 18.06.2008
Сообщения: 2
Откуда: Украина

СообщениеДобавлено: Чт Июл 17, 2008 1:15 pm    Заголовок сообщения: Ответить с цитатой

Спасибо!
Однако не все получается. В модуле листа постоянно желтым цветм выделяется:
Set f = Columns(col).Find(What:=fCell, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext)

При вводе любой записи появляетсяшибка.

Что делать????
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
abcde
Rjadovoj - the ranks
Rjadovoj - the ranks


Зарегистрирован: 12.07.2008
Сообщения: 12
Откуда: Беларусь

СообщениеДобавлено: Пт Июл 18, 2008 1:01 pm    Заголовок сообщения: Ответить с цитатой

Если во время выполнения процедуры возникает ошибка, то выполнение прерывается и выводится сообщение об ошибке. В первой строке выводится номер ошибки. Во второй стоке выводится краткое описание ошибки.
Нажмите на кнопку Debug. Сообщение исчезнет и можно просмотреть значение всех переменных процедуры (макроса) в окне Locals (главное меню – Viev - Locals Window) или можно просто остановить указатель “мыши” на любой из переменных. Ниже указателя появится окошко с именем переменной и его значением, например в инструкции поиска введенного значения

Set f = Columns(col).Find(What:=fCell, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext)

проверим в каком столбце рабочего листа мы производим поиск, остановив указатель “мыши” на переменной “col” {Set f = Columns(col)…}. Если вы ничего не меняли тексте примера, то появится окошко:

col=1
Переменной col значение присваивается во второй строке примера.
Скорее всего, вы использовали разные переменные во второй строке и в инструкции поиска, т.е. переменная должна быть одна (col или stolb, обзовите ее как угодно, но и там и там одно и то же).

Пожалуйста, не считайте такое пространное объяснение за высокомерие. Эту тему просмотрели уже полторы сотни человек, возможно к ней и дальше будут проявлять интерес, а эта метода иногда очень выручает при поиске ошибок в программе. Кстати в “ловли блох” в программах очень помогает режим пошагового выполнения. Если инструкция (строка программы) что-то меняет на рабочем листе, то это можно увидеть, не дожидаясь завершения всей программы. Но об этом при следующем удобном случае.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов on-line-teaching.com -> Excel: общие вопросы Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB