第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:堆栈空间不足”。