Страницы: 1
RSS
Макрос события листа не выдает задуманное условие
 
Здравствуйте. Даже не знаю как правильно сформулировать тему.
В первой колонке листа значения для ввода. Во второй значения бекапов значений первой колонки.
Макрос должен при вводе значения в ячейку первой колонки проверить равно или нет занчению во второй колонке. Если не равно то нужно сохранить бекап.
Короче я выкладываю пример, тк описать тяжко, хотя задачка банальна. Заблудился в 3 соснах.
 
Не очень понятно. Что значит
Цитата
Sla_0412 написал: Если не равно то нужно сохранить бекап.
Где его сохранить?
Начнем с этого
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(1)) Is Nothing Then
        Application.EnableEvents = False
        If Target <> Target.Offset(, 1) Then Target.Offset(, 1) = Target
    End If
Application.EnableEvents = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
a1 =3, b1=2
1.ввожу в a1 значение 1
2. проверяется что 1<>2
3. "3" из a1 сохраняется "куда либо"
4. завершается п.1 (a1=1)
5. "3" из куда либо записывается в b1

результат
a1=1, b1=3 ("2" удалено)
воо как
 
Код
Dim oldVal

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [A1]) Is Nothing And Target.Count = 1 Then
        If Target <> Target.Offset(, 1) Then Target.Offset(, 1) = oldVal
        Application.EnableEvents = False
    End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, [A1]) Is Nothing And Target.Count = 1 Then
        oldVal = Target.Value
    End If
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, браво!!! Спасибо.
 
Цитата
Sanja написал:
If Not Intersect(Target, [A1]) Is Nothing And Target.Count = 1 Then
Я  код начал перерабатывать на свои таблички не очень понял смысла условия  " ... And Target.Count = 1 Then" Если его удалить вроде бы условия соблюдаются.
И вообще , значение Target.Count всегда = 1. Или нет?  (Сразу после sub ставлю msgbox target.count. для просмотра его значения)
 
Цитата
вообще , значение Target.Count всегда = 1. Или нет?
А, если вы выделили две или более ячеек
 
Цитата
Sla_0412 написал: Если его удалить вроде бы условия соблюдаются.
А Вы выделите более ОДНОЙ ячейки и условия перестанут соблюдаться. Эти события возникают не только при выделении/изменении одной ячейки, но и для целого диапазона ячеек
Согласие есть продукт при полном непротивлении сторон
 
а вы попробуйте убрать And Target.Count = 1 из Worksheet_Change, затем скопировать диапазон C1:C2, и вставить его в А1:А2.
в данном событии Count отслеживает, чтобы код работал только когда изменяется одна ячейка, а не диапазон, включающий в себя эту ячейку.

По поводу наличия Count в Worksheet_SelectionChange, если честно, затрудняюсь придумать причину его необходимости.
Изменено: heso - 15.02.2017 16:31:37
 
Цитата
heso написал:
По поводу наличия Count в Worksheet_SelectionChange
Да тоже самое. Выделите более одной ячейки (где нужный Target НЕ будет первой в выделении) и посмотрите значение переменной oldVal
Согласие есть продукт при полном непротивлении сторон
 
Sanja,
хорошо, переменной будет присвоен диапазон, но ведь с ним то мы ничего не будем делать.
И на этапе изменения А1 заново вызовем SelectionChange, и тогда уже  oldVal будет равна адекватному числу.
 
Будем считать это двойной защитой  :)
Согласие есть продукт при полном непротивлении сторон
 
Спасибо. Теперь смысл понятен. Еще вопрос. На сколько чревато использовать  переменные в данном коде для столбцов. Прикол в том что моя табличка динамичная. Те столбцы и смещения между ними могут прыгать. Поэтому для определения offset по значению столбца приходится применять метод find в шапке именованного диапазона. Меня беспокоит что при всяком изменении происходят вычисления. Могут ли быть вылеты? Будет ли стабильно это все работать?. Пока тестирую. Произошел сбой с ошибкой. Исчез после перезапуска эксель.
 
Цитата
Sla_0412 написал:
На сколько чревато использовать  переменные в данном коде
Не более чем в любом другом. Если будете контролировать значения переменных в нужный момент, то проблем не должно быть
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх