Вопрос или проблема
После выбора элемента из выпадающего списка в ячейке B4 на листе1, он переходит на другой лист2 и автоматически выбирает совпадающий элемент в другом выпадающем списке в ячейке B4. Это возможно? Например, выпадающий список на листе1 находится на листе1, ячейка B4, и если выбрана определенная дата, то автоматически переходит на лист2 и выбирает совпадающую дату в выпадающем списке ячейки B4 на листе2. Это нужно сделать только для 3 разных дат на листе1.
У меня уже работает автоматический переход на лист2, если одна из 3 дат выбрана в выпадающем списке на листе1, но он не переходит к точно совпадающей дате в выпадающем списке B4 на листе2. Вот VBA код, который переключает с листа1 на лист2:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Range("B4").Value
Case Is = "08/01/2024 - 08/18/2024"
Worksheets("Weeks3").Activate
Case Is = "09/30/2024 - 10/20/2024"
Worksheets("Weeks3").Activate
Case Is = "12/02/2024 - 12/22/2024"
Worksheets("Weeks3").Activate
End Select
End Sub
Private Sub Worksheet_Activate()
Range("B4").Select
End Sub
Предположим, что ваш выпадающий список — это список проверки данных:
Private Sub Worksheet_Change(ByVal Target As Range)
'Интересует только изменение ячейки B4
If Target.Address(False, False) <> "B4" Then Exit Sub
Select Case Target.Value
Case "08/01/2024 - 08/18/2024", "09/30/2024 - 10/20/2024", "12/02/2024 - 12/22/2024"
With ThisWorkbook.Worksheets("Weeks3")
.Range(Target.Address).Value = Target.Value 'установить то же значение
.Activate
End With
End Select
End Sub
Ответ или решение
Чтобы решить вашу задачу с использованием VBA в Excel, вы можете изменить ваш код, чтобы после выбора элемента из выпадающего списка на языке программирования Visual Basic (VBA) в ячейке B4 на листе1, программа автоматически выбрала соответствующий элемент в выпадающем списке в ячейке B4 на листе2. Ниже приведен оптимизированный и полный код, включающий все необходимые детали.
- Откройте редактор VBA (ALT + F11).
- Найдите ваш лист ‘Sheet1’ в проекте и дважды нажмите на него, чтобы открыть окно кода.
- Вставьте следующий код в окно кода ‘Sheet1’.
Private Sub Worksheet_Change(ByVal Target As Range)
' Проверяем, изменилось ли содержимое в ячейке B4
If Target.Address(False, False) <> "B4" Then Exit Sub
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Weeks3") ' Указываем лист с выпадающим списком
Select Case Target.Value
Case "08/01/2024 - 08/18/2024"
Application.EnableEvents = False ' Отключаем события, чтобы избежать бесконечной рекурсии
ws.Range("B4").Value = Target.Value ' Устанавливаем соответствующее значение в ячейке B4 на листе2
ws.Activate ' Активируем лист2
Application.EnableEvents = True ' Включаем события обратно
Case "09/30/2024 - 10/20/2024"
Application.EnableEvents = False
ws.Range("B4").Value = Target.Value
ws.Activate
Application.EnableEvents = True
Case "12/02/2024 - 12/22/2024"
Application.EnableEvents = False
ws.Range("B4").Value = Target.Value
ws.Activate
Application.EnableEvents = True
End Select
End Sub
-
Затем, в редакторе VBA, найдите ваш лист ‘Weeks3’ и дважды нажмите на него, чтобы открыть окно кода.
-
Вставьте следующий код в окно кода ‘Weeks3’:
Private Sub Worksheet_Activate()
Range("B4").Select ' Выбор ячейки B4 при активации листа
End Sub
Объяснение кода:
- Worksheet_Change: Этот метод срабатывает каждый раз, когда происходит изменение в листе. Мы проверяем, изменено ли содержимое именно в ячейке B4.
- Application.EnableEvents = False: Этот код отключает события, чтобы избежать повторного выполнения кода в результате изменения значения ячейки B4 на листе2.
- Select Case Target.Value: Используется для проверки значения, выбранного в выпадающем списке. Если значение соответствует одному из трех вариантов, выполняются нужные действия.
- ws.Range("B4").Value = Target.Value: Переносит значение из ячейки B4 на ‘Sheet1’ в ячейку B4 на ‘Weeks3’.
- Worksheet_Activate: Этот метод автоматически выбирает ячейку B4, когда лист2 активируется.
Заключение
После добавления данного кода в ваш проект Excel, при выборе одного из трех заданных диапазонов в выпадающем списке на ‘Sheet1’, вы будете автоматически перенаправлены на ‘Weeks3’, где соответствующее значение также будет выделено в ячейке B4. Этот способ обеспечивает большую удобство и автоматизацию в вашей работе с Excel.