Как мне получить старое значение измененной ячейки в Excel VBA?

1 ответ

Я прочитал это старое сообщение, и я хотел бы предоставить другое решение.

проблема с запущенным приложением. Отмена - это выполнения Woksheet_Change снова. У нас есть та же проблема, когда мы восстанавливаем.

, Чтобы избежать, чтобы, я использовал часть кода для предотвращения вторых шагов через Worksheet_Change.

, Прежде чем мы начнем, мы должны создать булеву статическую переменную BlnAlreadyBeenHere, чтобы сказать Excel не выполнять Worksheet_Change снова

Сюда Вы видите его:

    Private Sub Worksheet_Change(ByVal Target As Range)

    Static blnAlreadyBeenHere As Boolean

    'This piece avoid to execute Worksheet_Change again
    If blnAlreadyBeenHere Then
        blnAlreadyBeenHere = False
        Exit Sub
    End If

    'Now, we will store the old and new value
    Dim vOldValue As Variant
    Dim vNewValue As Variant

    'To store new value
    vNewValue = Target.Value

    'Undo to retrieve old value

    'To avoid new Worksheet_Change execution
    blnAlreadyBeenHere = True

    Application.Undo

    'To store old value
    vOldValue = Target.Value

    'To rewrite new value

    'To avoid new Worksheet_Change execution agein
    blnAlreadyBeenHere = True
    Target.Value = vNewValue

    'Done! I've two vaules stored
    Debug.Print vOldValue, vNewValue

End Sub

преимущество этого метода состоит в том, что не необходимо выполнить Worksheet_SelectionChange.

, Если мы хотим, чтобы стандартная программа работала от другого модуля, мы просто должны взять объявление переменной blnAlreadyBeenHere из стандартной программы и объявить это с Тусклым.

Та же операция с vOldValue и vNewValue, в заголовке модуля

Dim blnAlreadyBeenHere As Boolean
Dim vOldValue As Variant
Dim vNewValue As Variant
0
ответ дан 26 November 2019 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: