Использование Worksheet_Change (и / или Worksheet_Calculate) для обновления исходных ячеек - PullRequest
0 голосов
/ 10 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...