На листе может быть только одно Worksheet_Change
событие.Простой обходной путь - превратить ваши два Events
в Sub Procedures
, а затем создать мастер Event
, который просто вызывает оба ваших других сабвуфера.
Настройка будет выглядеть примерно так
Событие
Private Sub Worksheet_Change(ByVal Target As Range)
AddDate Target
Dropdown Target
End Sub
Подпроцедура 1
Sub AddDate (Target as Range)
'Your first code goes here
End Sub
Подпрограмма 2
Sub Dropdown (Target as Range)
'Your second code goes here
End Sub
Я бы лично установил ваши проверки в Event
и соответственно назвал бы ваши процедуры.Тогда ваши подпрограммы могут строго сосредоточиться на утверждениях действия, скорее всего, не нужно выполнять какую-либо проверку.
Это может выглядеть примерно так (обратите внимание, что все переменные диапазона уже инициированы и больше не нуждаются в объявлении)
Private Sub Worksheet_Change(ByVal Target As Range)
'DateAdd Validation
Dim WorkRng As Range
Set WorkRng = Intersect(Application.ActiveSheet.Range("O:O"), Target)
If Not WorkRng Is Nothing Then
DateAdd Target, WorkRng
End If
'Dropdown Validation
Dim rngDV As Range
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
If Target.Count = 1 Then
If Not rngDV Is Nothing Then '<-- I believe this is redundant
If Not Intersect(Target, rngDV) Is Nothing Then
Dropdown Target, rngDV
End If
End If
End If
End Sub
Sub DateAdd(Target As Range, WorkRng As Range)
End Sub
Sub Dropdown(Target As Range, rngDV As Range)
End Sub