В строке 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: Недостаточно места в стеке».