Я пытаюсь обновить функцию одной ячейки каждый раз, когда пользователь изменяет определенный диапазон ячеек, используя VBA

Вот что у меня так далеко:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim R As Range
    Set R = Range("A6").EntireRow
    If Intersect(R, Target) Is Nothing Then Exit Sub
    Application.EnableEvents = False
        R.Cells(7, 4).Value = Date
    Application.EnableEvents = True
End Sub

Это просто не работает. Я довольно долго с этим сталкивался и не могу заставить его работать.

Автоматический расчет включен.

Макросы включены.

Это не общая рабочая книга.

Я поместил код в Sheet1, а не в Module1.

Что я делаю неправильно?

2 ответа2

1

Для тех, у кого похожая проблема, Application.EnableEvents следует использовать с умом. Я подозреваю, что в вашем случае произошло то, что вы установили Application.EnableEvents = false в вашем коде, а затем либо прекратил отладку в середине его, либо он выдал ошибку.

Когда это произойдет, Application.EnableEvents остается false и будет таким, пока вы не включите его через VBA или не перезапустите Excel.

Одним из способов предотвратить это является использование On Error GoTo <Label>: и затем установка метки в конце вашего кода, чтобы включить события снова, гарантируя, что если код не работает, то события будут повторно включены.

On Error GoTo Finally:

<code here>

Finally:
Application.EnableEvents = True
0

Как я понял, вы пытаетесь изменить данные диапазона "D7" на текущую дату, когда вы изменяете диапазон "A6", верно?

Если да, вы можете сделать этот тип изменений, заменив весь код выше на:

Target.Offset(1, 3).Value = Date

Где Offset говорит идти вниз на 1 строку и 3 столбца.

Теперь, если вы хотите изменить дату текущей строки в столбце "D", сделайте.

Target.Offset(0, 3).Value = Date

И, пожалуйста, не делайте ничего с:

Application.EnableEvents 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .