使用Worksheet_Change(和/或Worksheet_Calculate)更新源单元格

时间:2019-06-10 13:30:49

标签: excel vba

第7行有费用,第8行有小时(这两行都是固定数据)。第10和11行用于捕获所需的额外费用和/或额外的小时数。如果他们在第10行中输入值,则第11行中的图形必须自动更改比例;如果他们在第11行中输入值,则第10行中的图形也必须自动更改比例。

我正在计算第22行和第23行中的新比例图。我尝试使用Worksheet_Change将计算出的图复制回第10行和第11行中。如果我将这些图发送到目标外部,则可以使用区域(例如,如果将它们发送到第25和26行),但是如果我尝试将值直接发送到第10和11行,则会遇到各种错误和/或崩溃。我认为这样做可能会再次触发代码,并形成无限循环?我还尝试过使用Worksheet_Calculate将值传递回第10和11行,希望这将避免触发无限循环,但无济于事。

示例1:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells1 As Range
Set KeyCells1 = Range("D10:O10")

Dim KeyCells2 As Range
Set KeyCells2 = Range("D11:O11")

If Not Application.Intersect(KeyCells1, Range(Target.Address)) Is Nothing Then
    Target.Offset(16, 0).Value = Target.Offset(13, 0)
End If
If Not Application.Intersect(KeyCells2, Range(Target.Address)) Is Nothing Then
    Target.Offset(14, 0).Value = Target.Offset(11, 0)
End If

End Sub

示例2:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells1 As Range
    Set KeyCells1 = Range("D10:O10")

    Dim KeyCells2 As Range
    Set KeyCells2 = Range("D11:O11")

    If Not Application.Intersect(KeyCells1, Range(Target.Address)) Is Nothing Then
        Target.Offset(16, 0).Value = Target.Offset(13, 0)
    End If
    If Not Application.Intersect(KeyCells2, Range(Target.Address)) Is Nothing Then
        Target.Offset(14, 0).Value = Target.Offset(11, 0)
    End If

End Sub

Private Sub Worksheet_Calculate(ByVal Target As Range)
    Dim KeyCells3 As Range
    Set KeyCells3 = Range("D25:O25")

    Dim KeyCells4 As Range
    Set KeyCells4 = Range("D26:O26")

    If Not Application.Intersect(KeyCells3, Range(Target.Address)) Is Nothing Then
        Target.Offset(-15, 0).Value = Target.Offset(0, 0)
    End If
    If Not Application.Intersect(KeyCells4, Range(Target.Address)) Is Nothing Then
        Target.Offset(-15, 0).Value = Target.Offset(0, 0)
    End If

End Sub

此处显示的代码给出错误“编译错误:过程声明与具有相同名称的事件或过程的描述不匹配”。如果我合并为一个Worksheet_Change并将公式输出直接发送到第3行和第4行,那么我会收到“运行时错误28:堆栈空间不足”。

0 个答案:

没有答案