镜像单元格:有意的循环引用
Mirrored Cells: Intentional Circular Referencing
我想构建一个具有 "Mirrored Cells" 的 sheet,即我希望多个单元格显示相同的值,并且该值在 all 中发生变化单元格,如果它在 any 单元格中发生变化。
例如:
Cell A1: "Apple"
Cell A2: "Apple"
Cell A3: "Apple"
如果我将 A3 更改为 "Banana",我希望我的 sheet 在单元格 A1、A2 和 A3 中显示 "Banana"。我知道如果我设置 A1 = A3 和 A2 = A3 我可以做到这一点。但是,我还希望能够将 A1 更改为 "Carrot" 并让所有三个单元格显示 "Carrot"。我不知道如何强制 excel 对三个单元格的集合进行循环引用,其中的值可以通过寻址任何单元格来更改。
P.S。 - 我所描述的是我希望 "appear" 对那些只是想更新 sheet 的人的行为。如果有人有想法编写一个 VBA 可以自动处理此更新的脚本(即每次更改单元格值时都可以在幕后自动调用),我很乐意编写一个并使用它,编程属于每个循环引用集的单元格直接进入脚本。
编辑:我实现了@silentsurfer 提供的脚本,它在一个简单的 worsheet 上运行良好,值在 A1:A3 中。然后我实现了@pnuts 建议的命名范围功能。
在我的工作sheet中,我选择了三个单元格(C3、C5、C7)并将它们设置为命名区域("config3P")。我只是想让@silentsurfer 的脚本来监视这三个单元而不是 A1:A3,所以这是更改后的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c3P As Range
Dim xlCell As Range
Set c3P = Range("config3P")
Application.EnableEvents = False
If Not Intersect(Target, c3P) Is Nothing Then
For Each xlCell In c3P
xlCell.Value = Target.Value
Next xlCell
End If
Application.EnableEvents = True
End Sub
尝试将此粘贴到 VBA 编辑器中的工作表代码页:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chngRange As Range
Dim xlCell As Range
Set chngRange = Range("A1:A3")
Application.EnableEvents = False
If Not Intersect(Target, chngRange) Is Nothing Then
For Each xlCell In chngRange
xlCell.Value = Target.Value
Next xlCell
End If
Application.EnableEvents = True
End Sub
我想构建一个具有 "Mirrored Cells" 的 sheet,即我希望多个单元格显示相同的值,并且该值在 all 中发生变化单元格,如果它在 any 单元格中发生变化。
例如:
Cell A1: "Apple"
Cell A2: "Apple"
Cell A3: "Apple"
如果我将 A3 更改为 "Banana",我希望我的 sheet 在单元格 A1、A2 和 A3 中显示 "Banana"。我知道如果我设置 A1 = A3 和 A2 = A3 我可以做到这一点。但是,我还希望能够将 A1 更改为 "Carrot" 并让所有三个单元格显示 "Carrot"。我不知道如何强制 excel 对三个单元格的集合进行循环引用,其中的值可以通过寻址任何单元格来更改。
P.S。 - 我所描述的是我希望 "appear" 对那些只是想更新 sheet 的人的行为。如果有人有想法编写一个 VBA 可以自动处理此更新的脚本(即每次更改单元格值时都可以在幕后自动调用),我很乐意编写一个并使用它,编程属于每个循环引用集的单元格直接进入脚本。
编辑:我实现了@silentsurfer 提供的脚本,它在一个简单的 worsheet 上运行良好,值在 A1:A3 中。然后我实现了@pnuts 建议的命名范围功能。
在我的工作sheet中,我选择了三个单元格(C3、C5、C7)并将它们设置为命名区域("config3P")。我只是想让@silentsurfer 的脚本来监视这三个单元而不是 A1:A3,所以这是更改后的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c3P As Range
Dim xlCell As Range
Set c3P = Range("config3P")
Application.EnableEvents = False
If Not Intersect(Target, c3P) Is Nothing Then
For Each xlCell In c3P
xlCell.Value = Target.Value
Next xlCell
End If
Application.EnableEvents = True
End Sub
尝试将此粘贴到 VBA 编辑器中的工作表代码页:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chngRange As Range
Dim xlCell As Range
Set chngRange = Range("A1:A3")
Application.EnableEvents = False
If Not Intersect(Target, chngRange) Is Nothing Then
For Each xlCell In chngRange
xlCell.Value = Target.Value
Next xlCell
End If
Application.EnableEvents = True
End Sub