У меня есть месячный календарь с различными заданиями. У меня есть код, который работает с использованием Private Sub Worksheet_Change
для одного диапазона в календаре. Этот код отображает предупреждение в окне сообщения, когда для второй задачи в тот же период времени (одинаковый диапазон ячеек) выбрано повторяющееся значение [имена людей]. Я хочу сделать это для 15 различных диапазонов на одном листе. Каждый диапазон должен считаться независимым от других диапазонов. Другими словами, одно и то же [имя] может быть в другой день без каких-либо предупреждений.
Я нашел некоторый код и изменил его, чтобы сделать то, что мне нужно, и он работает для первого диапазона, но у меня может быть только один worksheet_change
на этом листе. Я не знаю, как использовать один и тот же код с несколькими диапазонами. Я определил (DIM xxx as range
) для каждого диапазона, а SET xxx = range(ccc)
назначил диапазон для каждой переменной.
Как включить другие диапазоны?
Private Sub Worksheet_Change(ByVal Target As Range)
'Define your variables.
Dim Sun1AM, Sun1PM, Wed1PM As Range
Dim Sun2AM, Sun2PM, Wed2PM As Range
Dim Sun3AM, Sun3PM, Wed3PM As Range
Dim Sun4AM, Sun4PM, Wed4PM As Range
Dim Sun5AM, Sun5PM, Wed5PM As Range
'Set the range where you want to prevent duplicate entries.
Set Sun1AM = Range("C4:C14")
Set Sun1PM = Range("C17:C21")
Set Wed1PM = Range("C24:C28")
Set Sun2AM = Range("E4:E14")
Set Sun2PM = Range("E17:E21")
Set Wed2PM = Range("E24:E28")
Set Sun3AM = Range("G4:G14")
Set Sun3PM = Range("G17:G21")
Set Wed3PM = Range("G24:G28")
Set Sun4AM = Range("I4:I14")
Set Sun4PM = Range("I17:I21")
Set Wed4PM = Range("I24:I28")
Set Sun5AM = Range("K4:K14")
Set Sun5PM = Range("K17:K21")
Set Wed5PM = Range("K24:K28")
'If the cell where value was entered is not in the defined range,
'if the value pasted is larger than a single cell,
'or if no value was entered in the cell, then exit the macro.
If Intersect(Target, Sun1AM) Is Nothing Or Intersect(Target, Sun1PM) Is Nothing Or _
Intersect(Target, Wed1PM) Is Nothing Or Intersect(Target, Sun2AM) Is Nothing Or _
Intersect(Target, Sun2PM) Is Nothing Or Intersect(Target, Wed2PM) Is Nothing Or _
Intersect(Target, Sun3AM) Is Nothing Or Intersect(Target, Sun3PM) Is Nothing Or _
Intersect(Target, Wed3PM) Is Nothing Or Intersect(Target, Sun4AM) Is Nothing Or _
Intersect(Target, Sun4PM) Is Nothing Or Intersect(Target, Wed4PM) Is Nothing Or _
Intersect(Target, Sun5AM) Is Nothing Or Intersect(Target, Sun5PM) Is Nothing Or _
Intersect(Target, Wed5PM) Is Nothing Or IsEmpty(Target) _
Then Exit Sub
'If the value entered already exists in the defined range on the current worksheet, throw an
'error message.
If WorksheetFunction.CountIf(Sun1AM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun1PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Wed1PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun2AM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun2PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Wed2PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun3AM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun3PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Wed3PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun4AM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun4PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Wed4PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun5AM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Sun5PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(Wed5PM, Target.Value) > 1 Then
MsgBox Target.Value & " is already used.", vbInformation, "Duplicate Entry!"
Application.EnableEvents = False
Application.EnableEvents = True
End If
End Sub
Теперь я попытался перебрать все диапазоны, используя имена переменных. Я использовал оператор If с несколькими условиями Or для определения областей, которые не следует рассматривать. Я использовал блок If - ElseIf для проверки дубликатов. Ни один из диапазонов не вызовет MsgBox.
Как я могу сделать это активным для всех 15 диапазонов?