Мой код VBA постоянно приводит к сбою моего файла, из-за чего он не отвечает

Этот код приводит к сбою моего файла, если я выбираю «-» в раскрывающемся списке на моем листе. Временная метка реализуется, когда выбрано «Да», однако она выходит из строя, когда я выбираю «-». Что мне не хватает?

Выпадающий список содержит 2 опции:

-, Да

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo Handler
If ActiveCell.Value = "Yes" Then
    ActiveCell.Offset(0, 1) = Format(Now(), "dd-mm-yyyy hh:mm")
    
ElseIf ActiveCell.Value = "-" Then
    ActiveCell.Offset(0, 1) = ""
    
End If
Handler:


End Sub
Этот выглядит почти так, как вы хотите.
VBasic2008 07.05.2024 06:07
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
1
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Ваш код может вызвать бесконечный цикл. например. Ячейка A1 изменена, ActiveCell.Offset(0, 1) = .. снова вызывает Change событие. и так далее ...

  • Application.EnableEvents = False необходим, если в коде события Change изменены какие-либо ячейки.

  • кстати, лучше использовать Target.Value вместо ActiveCell.Value.

Документация Майкрософт:

Свойство Application.EnableEvents (Excel)

Private Sub Worksheet_Change(ByVal Target As Range)
    
    On Error GoTo Handler
    Application.EnableEvents = False
    If ActiveCell.Value = "Yes" Then
        ActiveCell.Offset(0, 1) = Format(Now(), "dd-mm-yyyy hh:mm")
        
    ElseIf ActiveCell.Value = "-" Then
        ActiveCell.Offset(0, 1) = ""
        
    End If
Handler:
    
    Application.EnableEvents = True
End Sub

Почему Target.Value лучше, чем ActiveCell.Value?

M_Naipaul 07.05.2024 09:19

Целевой аргумент — это ячейки изменения (объект Range). Activecell — это всегда ячейка на листе. Измененный диапазон может состоять из нескольких ячеек.

taller 07.05.2024 16:56

Другие вопросы по теме