链接两个单元格,以便编辑或者被反映

我有两个单元格,“R3”和“S3”,在同一个Excel工作表,“数据”,我想链接,以便手动input要么反映到另一个纠正因素。 循环引用阻止使用公式。 我在这里search,发现这个VBA片段:

Private Sub Worksheet_Change(ByVal target As Range) If target.Address = "$R$3" Then ActiveWorkbook.Worksheets("Data").Range("$S$3").Value = target.Value*2.55 End If End Sub 

最初的意思是将两个单元格连接在不同的表单上,而在我自己的情况下单元格在同一个表单上。 这完全适用于进入一个只看到一个方向的另一个变化。 我也可以使用ElseIf添加更多的单元对。 但是,如果我将其扩展为包含R3-> S3和S3-> R3中的双引用,如下所示:

 Private Sub Worksheet_Change(ByVal target As Range) If target.Address = "$R$3" Then ActiveWorkbook.Worksheets("Data").Range("$S$3").Value = target.Value*2.55 Else If target.Address = "$S$3" Then ActiveWorkbook.Worksheets("Data").Range("$R$3").Value = target.Value/2.55 End If End Sub 

尽pipe这两个部分似乎是相互排斥的,不能在同一个过程调用中被引用,但是每当我尝试进行更改时,这会使我的电子表格崩溃。 显然我正在做一些非常错误的事情! 我从原来的post中被引导认为这不会引起循环引用。

我的猜测是,我应该用两个独立的程序来处理这个问题,或者根据这个代码,这是不可能的?

您正在使用更改模块创build一个无限循环。 通过更新一个触发事件使用其他单元格

更新您的更改事件如下所示:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Or Target.Address = "$B$1" Then Call cellUpdate(Target.Address) End If End Sub 

然后在一个模块里放:

 Sub cellUpdate(Target As String) Application.EnableEvents = False With ActiveWorkbook.Worksheets("Data") If Target = "$R$3" Then .Range("$S$3").Value = .Range(Target) * 2.55 ElseIf Target = "$S$3" Then .Range("$R$3").Value = .Range(Target) / 2.55 End If End With Application.EnableEvents = True End Sub 

通过将其分解为一个单独的模块并控制独立模块中的Application.EnableEvents ,可以停止无限循环。

你缺less一个End If

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$R$3" Then ActiveWorkbook.Worksheets("Data").Range("$S$3").Value = Target.Value * 2.55 Else If Target.Address = "$S$3" Then ActiveWorkbook.Worksheets("Data").Range("$R$3").Value = Target.Value / 2.55 End If End If End Sub