Страницы: 1
RSS
Сохранение значения ячейки при ее изменении.
 
Нужен макрос который сохранял бы значение ячейки перед ее изменением.Делаю что то на подобии ctr+z так как известно что макросы не отменяются. Например А1 =  "Hellow world!", при изменении значения ячейки на А1 = "Hi" предыдущие значение ячейки сохранилось на другом листе как мини бек ап а потом дело техники.
 
По-моему собиьия срабатывают после изменения ячейки. Если только заносить весь массив данных, к примеру при активации листа, а из него выберать что поменялось при изменении ячейки.
«Бритва Оккама» или «Принцип Калашникова»?
 
Исходим из того, что для ввода в ячейку А1 на первом листе, её всегда нужно сначала активировать. Скопировать в модуль листа с изменяемой ячейкой. Копия будет на втором листе.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Sheets("Лист2").Range("A1") = Target
    End If
End Sub
 
Мой вариант. В отличии от варианта Юрий М, не запоминает значение контролируемой ячейки если ее выделили, но не изменили
Код
Public oldValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [A1]) Is Nothing And Target.Count = 1 Then
        If Target.Value <> Empty And Target.Value <> oldValue Then
            With Worksheets("Лист2")
                .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1) = Target.Value
            End With
        End If
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    oldValue = Target.Value
End Sub
Согласие есть продукт при полном непротивлении сторон
 
 Гениально!:) Спасибо!
 
Есть нюанс - если в контролируемую ячейку внесли значение равное предыдущему, то оно тоже не сохраниться. И если предыдущее значение было пустым, то оно тоже не сохраниться (это можно исправить)
Согласие есть продукт при полном непротивлении сторон
 
А почему не так?
Код
Public oldValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("Лист2").Range(Target.Address) = oldValue
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    oldValue = Target.Value
End Sub
«Бритва Оккама» или «Принцип Калашникова»?
 
Прекрасно! Давно искал что-то подобное. У самого не особо большой опыт в vba, не могу понять как Вы так макросы в лёгкую пишете. Мне бы сделать так чтобы с другой ячейки с L10 данные переносились на "лист 2" в ячейку А2, но и чтобы предыдущий макрос тоже работал. Буду признателен!
 
Супер, а можно еще добавить дату и время изменения ячейки.
Заранее сп
 
Зпрcт:
Код
Su
En

пж
 
Цитата
vikttur написал:
Код ? 12SuEn
не понятно, немного слабоват в кодах.
Еще такой момент, где в макросе прописать какую ячейку сохроняем историю
сп.
 
Правило: один вопрос - одна тема. Создайте свою тему с названием, отражающим суть задачи.
 
:D  понятно
Страницы: 1
Читают тему
Наверх