如何通过一个或另一个同时更新两个单元?

我有一个Excel工作簿计算器依赖于几个参数。 我希望客户端能够将这些参数插入到每个电子表格中适当的“客户端input”单元中,这样他就不必在电子表格之间来回切换。

有没有一个好的方法来做到这一点? 我尝试了下面的scheme,但是对于我不了解的原因,

  • 使一个VBA模块声明variables来保存我的参数
  • Workbook_Open事件中用适当的初始值初始化它们
  • 使特定工作表将这些值写入Worksheet_Activate事件中的“客户端input”单元格
  • Worksheet_Deactivate事件中,如果“客户端input”单元彼此不同,则更新VBAvariables

这有时会起作用,但并不总是如此。 有一个更好的方法吗?

编辑:

这是我的“GM”模块:

 Option Explicit Public perspective As String Public RSS As String Public Payback As Double 

这是我的“ThisWorkbook:

 Private Sub Workbook_Open() GM.perspective = Worksheets("Hidden variables").Range("A1").Value GM.RSS = Worksheets("Hidden variables").Range("B2").Value GM.Payback = Worksheets("Hidden variables").Range("C3").Value End Sub Private Sub Workbook_Close() Worksheets("Hidden variables").Range("A1") = GM.perspective Worksheets("Hidden variables").Range("B2") = GM.RSS Worksheets("Hidden variables").Range("C3") = GM.Payback End Sub 

这是在我的工作表1(工作表2中有一个类似的代码):

 Option Explicit Private Sub Worksheet_Activate() 'SIMULTANEOUS UPDATE p.1 Worksheets("1").Range("I32") = GM.Payback Worksheets("1").Range("I29") = GM.RSS Worksheets("1").Range("I26") = GM.perspective End Sub Private Sub Worksheet_Change(ByVal Target As Range) 'BASIC PRICE CALCULATION If Target.Count > 1 Then Exit Sub If Target = Range("I32") _ Or Target = Range("I29") _ Or Target = Range("I26") _ Or Target = Worksheets("Intro").Range("price") _ Then Worksheets("Hidden variables").Range("condition") = 2 Worksheets("Hidden variables").Range("basic_price") = Worksheets("Intro").Range("price").Value Range("M44").GoalSeek Goal:=0, ChangingCell:=Worksheets("Hidden variables").Range("basic_price") If Worksheets("Hidden variables").Range("basic_price").Value < 0 Then Range("M46") = "Error" Else Range("M46") = Worksheets("Hidden variables").Range("basic_price").Value End If Worksheets("Hidden variables").Range("condition") = 1 End If End Sub Private Sub Worksheet_Deactivate() 'SIMULTANEOUS UPDATE p.2 GM.Payback = Worksheets("1").Range("I32").Value GM.RSS = Worksheets("1").Range("I29").Value GM.perspective = Worksheets("1").Range("I26").Value End Sub 

为避免无限循环,可以使用全局variables在函数之外(在模块的开始处)

 Public isUpdating As Double 

在你的Worksheet_change里面

 Private Sub Worksheet_Change(ByVal Target As Range) ' Check if an update is in progress. If so, exit the change if isUpdating then exit sub end if ' Begin of the update isUpdating = true ' Here your update ' End of the update isUpdating = false End sub