Циклическая ссылка раскрывающегося списка Excel/VBA

Я отслеживаю ответ, который был опубликован ранее по следующей ссылке: Циркулярная ссылка с раскрывающимся списком

Ответ работает, когда выпадающие списки и источники находятся в одной и той же ячейке на соответствующих листах, но я пытаюсь выяснить, как это работает, если списки и источник не находятся в одной ячейке. Спасибо

Я следую этому ответу:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Address = "$B$5" And Sh.Name <> "Sheet3" Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        Dim w As Long
        For w = 1 To Worksheets.Count
            With Worksheets(w)
                'skip this worksheet and Sheet3
                If CBool(UBound(Filter(Array(Sh.Name, "Sheet3"), _
                        .Name, False, vbTextCompare))) Then
                    .Range("B5") = Target.Value
                    '.Range("B5").Interior.ColorIndex = 3  '<~~testing purposes
                End If
            End With
        Next w
    End If
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

Я пытаюсь создать два списка, в которых я могу изменить один и обновить другой. Как создать один и тот же результат в раскрывающемся списке, например, в ячейке A3 на Листе 1 и D9 на Листе 2?

Вот что мне нужно: я хочу создать на двух листах (лист 1, лист 2) раскрывающийся список с надписью «Завершено» или «Незавершенно». Если я изменю лист 1 с «Завершено» на «Незавершенно», я хочу, чтобы лист 2 говорил то же самое, но я также хочу, чтобы и наоборот (Если я изменю лист 2 с «Завершено» на «Незавершенно», я хочу, чтобы лист 1 изменился).

Лучше опубликовать код, который вы используете здесь - вы все равно можете ссылаться на другой пост, но вы не сказали нам, какой ответ вы пытаетесь следовать...

Tim Williams 17.02.2023 17:47

Вам понадобится какой-то способ, чтобы ваш код знал, где находится ячейка списка на каждом листе. Вы можете поместить это в свой код или на скрытый рабочий лист, в зависимости от того, сколько ячеек вам нужно отобразить. Есть только по списку на листе? Вы также можете дать каждой ячейке с одним и тем же списком одно и то же имя (в пределах рабочего листа), чтобы вы могли легко найти список на каждом листе.

Tim Williams 17.02.2023 18:28

Я пытаюсь поместить это в код. На листе есть только один список, и мне нужно только сопоставить эти два списка. На третьем листе у меня есть источник списка проверки данных.

Data_Miner 17.02.2023 18:40
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте так:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    Dim arrCells, el, i As Long, m, tgt, arr
    
    arrCells = Array("Sheet1|D3", "Sheet2|B4") 'all cells with the list
    
    tgt = Sh.Name & "|" & Target.Address(False, False)
    m = Application.Match(tgt, arrCells, 0) 'matches one of the list cells?
    
    If Not IsError(m) Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        For i = LBound(arrCells) To UBound(arrCells)
            If arrCells(i) <> tgt Then 'skip the cell raising the event...
                arr = Split(arrCells(i), "|")
                ThisWorkbook.Sheets(arr(0)).Range(arr(1)).Value = Target.Value
            End If
        Next i
        Application.EnableEvents = False
    End If
    
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

Другие вопросы по теме