После выбора элемента из выпадающего списка на листе 1, перейдите на лист 2 и выберите соответствующий элемент в другом выпадающем списке.

Вопрос или проблема

После выбора элемента из выпадающего списка в ячейке 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. Ниже приведен оптимизированный и полный код, включающий все необходимые детали.

  1. Откройте редактор VBA (ALT + F11).
  2. Найдите ваш лист ‘Sheet1’ в проекте и дважды нажмите на него, чтобы открыть окно кода.
  3. Вставьте следующий код в окно кода ‘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
  1. Затем, в редакторе VBA, найдите ваш лист ‘Weeks3’ и дважды нажмите на него, чтобы открыть окно кода.

  2. Вставьте следующий код в окно кода ‘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.

Оцените материал
Добавить комментарий

Капча загружается...