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

时间:2015-07-30 06:58:36

标签: excel vba excel-vba

我有一个依赖于几个参数的Excel工作簿计算器。我希望客户能够将这些参数插入到适当的客户端输入中。每个电子表格上都有一个单元格,因此他不必在电子表格之间来回跳转。

有没有好方法呢?我尝试了下面的方案,但由于我不知道的原因,它有问题:

  • 使VBA模块声明变量以保存我的参数
  • 使用Workbook_Open事件
  • 上的相应初始值初始化它们
  • 使特定表格将这些值写入"客户输入" Worksheet_Activate事件
  • 上的单元格
  • Worksheet_Deactivate事件中,如果"客户输入"单元格彼此不同 - 更新VBA变量

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

编辑:

这是我的" GM"模块:

Option Explicit

Public perspective As String
Public RSS As String
Public Payback As Double

这是我的#34; 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 

1 个答案:

答案 0 :(得分:2)

为避免无限循环,您可以使用全局变量 在函数外部(在模块的开头)

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