Я отслеживаю ответ, который был опубликован ранее по следующей ссылке: Циркулярная ссылка с раскрывающимся списком
Ответ работает, когда выпадающие списки и источники находятся в одной и той же ячейке на соответствующих листах, но я пытаюсь выяснить, как это работает, если списки и источник не находятся в одной ячейке. Спасибо
Я следую этому ответу:
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 изменился).
Вам понадобится какой-то способ, чтобы ваш код знал, где находится ячейка списка на каждом листе. Вы можете поместить это в свой код или на скрытый рабочий лист, в зависимости от того, сколько ячеек вам нужно отобразить. Есть только по списку на листе? Вы также можете дать каждой ячейке с одним и тем же списком одно и то же имя (в пределах рабочего листа), чтобы вы могли легко найти список на каждом листе.
Я пытаюсь поместить это в код. На листе есть только один список, и мне нужно только сопоставить эти два списка. На третьем листе у меня есть источник списка проверки данных.
Попробуйте так:
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
Лучше опубликовать код, который вы используете здесь - вы все равно можете ссылаться на другой пост, но вы не сказали нам, какой ответ вы пытаетесь следовать...