下拉列表循环引用Excel/VBA

sulc1iza  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(171)

我正在跟进之前在以下链接中发布的答案:带有下拉列表的循环引用
当下拉列表和源代码在各自工作表的同一个单元格中时,答案是有效的,但是我试图找出如果列表和源代码不在同一个单元格中,这个答案是如何工作的。
我的答案如下:

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

我试图有两个列表,我可以改变其中一个,它会更新另一个。我如何在下拉列表中创建相同的结果,例如在工作表1的单元格A3和工作表2的单元格D9上?
以下是我所追求的:我希望在两个工作表(工作表1、工作表2)上生成一个下拉列表,显示“完成”或“未完成”。如果我将工作表1从“完成”更改为“未完成”,我希望工作表2显示相同的内容,但我也希望反之亦然(如果我将工作表2从“完成”更改为“未完成”,我希望工作表1也发生更改)。

ee7vknir

ee7vknir1#

试着这样做:

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

相关问题