![Список форумов on-line-teaching.com](templates/subSilver/images/logo_phpBB.gif) |
on-line-teaching.com Онлайн курсы MS Office: Word, Excell. Как сделать сайт: HTML, JS, PHP
|
Предыдущая тема :: Следующая тема
|
Автор |
Сообщение |
Ju_andr Prizivnik - draftee
![Prizivnik - draftee Prizivnik - draftee](images/zvanie_img/z1.gif)
Зарегистрирован: 18.06.2008 Сообщения: 2 Откуда: Украина
|
Добавлено: Ср Июн 18, 2008 4:19 pm Заголовок сообщения: Проверка наличия записи |
|
|
Добрый день!
Подскажите пожалуйста (если возможно в Excel) - имеется таблица где бодее тысячи записей (в колонке). Как сделать, чтобы при вводе новой записи осуществлялась проверка, может такая запись уже существует выше???? Запись текстовая.
Заранее спасибо |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
abcde Rjadovoj - the ranks
![Rjadovoj - the ranks Rjadovoj - the ranks](images/zvanie_img/z2.gif)
Зарегистрирован: 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 |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Ju_andr Prizivnik - draftee
![Prizivnik - draftee Prizivnik - draftee](images/zvanie_img/z1.gif)
Зарегистрирован: 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)
При вводе любой записи появляетсяшибка.
Что делать???? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
abcde Rjadovoj - the ranks
![Rjadovoj - the ranks Rjadovoj - the ranks](images/zvanie_img/z2.gif)
Зарегистрирован: 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, обзовите ее как угодно, но и там и там одно и то же).
Пожалуйста, не считайте такое пространное объяснение за высокомерие. Эту тему просмотрели уже полторы сотни человек, возможно к ней и дальше будут проявлять интерес, а эта метода иногда очень выручает при поиске ошибок в программе. Кстати в “ловли блох” в программах очень помогает режим пошагового выполнения. Если инструкция (строка программы) что-то меняет на рабочем листе, то это можно увидеть, не дожидаясь завершения всей программы. Но об этом при следующем удобном случае. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|