Страницы: 1
RSS
выполнение действий при изменении значения ячейки
 
Всем привет.
Сделал такой макрос:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim p As Range
Set p = [D15]
If Not Intersect(p, Target) Is Nothing Then Range("d16:d115").Value = ""
If p > 0 Then
        Range("J17:J116").Select
                 Selection.Find(What:=p, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
       Cells(ActiveCell.Row, ActiveCell.Column - 6).Value = 1
    p.activate 
          End If
        End Sub

Задача в том что если в ячейке d15 не пусто, то нужно провести поиск в диапазоне и в столбец D поставить 1 (в строку с найденным значением), а если значение в ячейке d15 удаляется значение, то просто очищяется диапазон. По отдельности каждый код работал нормально, а вместе зависает. Я наверное неправильно прописал условия на событие ячейки, подскажите в чем ошибка пожалуйста.

Заранее спасибо
 
Скорее всего процедура Private Sub Worksheet_Change(ByVal Target As Range) была написана дважды...
 
Нет, единожды.
Без 2го куска "уловия поиска значения" все работает хорошо. Я не могу разобраться почему именно вторая часть зависает. Команду поиска сделал в рекордере и откоректировал под себя. Ход действий строил что в диапазоне находим значение, и эта ячейка активируется, далее зная строку найденной ячейки, вставляю в нужный столбец "1"
 
попробуйте отключать события
Application.EnableEvents = False в начале кода
и
Application.EnableEvents = True в конце кода
Учимся сами и помогаем другим...
 
re: DSH
Будет ошибка если в диапазоне Range("J17:J116") значение p отсутствует.
 
Попробуйте лучше так:
Код
Sub qqq()
Dim Rng As Range, p
    p = [D15]
    Set Rng = Range("J17:J116").Find(what:=p, LookIn:=xlValues, lookAt:=xlWhole)
    If Not Rng Is Nothing Then
        Rng.Select 'Здесь действия вместо активации ячейки, если значение найдено
    Else
        MsgBox "Значение " & p & " не найдено в диапазоне.", 48, "Ошибка, однако!"
    End If
End Sub

Переменную р можно вообще исключить, если не требуется дальнейшее её использование - сразу искать значение из ячейки.
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$15" Then
Application.EnableEvents = False
With Range("J17:J116")
 If Target <> Empty Then
 If Not .Find(Target) Is Nothing Then
 Cells(.Find(Target).Row, 4).Value = 1
 Cells(.Find(Target).Row, 4).Activate
  End If
 Else
 .ClearContents
 End If
End With
Application.EnableEvents = True
End If
End Sub
 
Юрий, этот способ как раз решает вопрос о возможности ненахождения файла. Да и поиск делается на ура.
Я только заменил Rng.select на Cells(Rng.Row, 4).Value = 1
Вот только не могу обьединить 2 макроса вместе. Который на поиск и который на удаление если ячейка пустая :(
 
См. вариант Карена (k61) Или у меня вместо MsgBox
 
Извиняюсь не видел сообщения
Только изменил диапазон удаления на
Range("d17 :D 116" ;) .ClearContents

Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.address = "$D$15" Then 'условие 1: если выбрана данная ячейка то
Application.EnableEvents = False 'отключаем выполнение всех событий
With Range("J17:J116") выделяем диапазон
 If Target <> Empty Then ' 2 условие: если ячейка не пуста то
 If Not .Find(Target) Is Nothing Then '3 условие (что тут мы указываем?)
 Cells(.Find(Target).Row, 4).Value = 1 'если значение найдено то в нужную ячейку ставим значение 1
 Target.Activate ' выделяем ячейку
  End If 'завершаем выполнение 3го условия
 Else ' если ячейка пуста то
 Range("d17:d116").ClearContents 'очищаем выбранный диапазон
 End If 'конец 2го условия
End With 'завершаем работу с диапазоном
Application.EnableEvents = True 'включаем выполнение всех событий
End If 'конец 1го условия
End Sub

Я правильно все понял?  И что мы делаем с If Target <> Empty Then

Спасибо за помощь
Изменено: DSH - 17.05.2013 16:59:01
 
Если работает так, как хотелось, то всё поняли правильно)) Вот только я вопрос не понял))
 
Не коректно сформировал вопрос, моя вина. :)
Я хотел узнать, я приложил к коду описание. Правильно ли я уловил ход выполнения програмного кода?
 
Цитата
(что тут мы указываем?)
если значение найдено то выполняем код
Цитата
если значение найдено то в нужную ячейку ставим значение 1
в этой строке просто "в нужную ячейку ставим значение 1 если выполняется условие в строке выше"
Изменено: V - 17.05.2013 17:49:18
 
Всем большое спасибо!
Страницы: 1
Читают тему
Наверх