Считайте [приблизительно 110] указатели на участников . Для вызова метода на производном классе метод должен быть объявлен в базовом классе как виртуальный и переопределенный в базовом классе, и указатель должен указать на метод базового класса. Больше [приблизительно 111] указатели на виртуальных участников .
Я прочитал это старое сообщение, и я хотел бы предоставить другое решение.
проблема с запущенным приложением. Отмена - это выполнения 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