2013-02-13 3 views
0

Я встретив ошибку в MS Excel, когда выполняется следующий код VB и функция «Отслеживание изменений» включено:VB Ошибка в Excel

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 1 Then 
     If IsEmpty(Target) Then 
      Target.Offset(0, 1).Value = Empty 
     Else 
      Target.Offset(0, 5).Value = Now() 
     End If 

    End If 

End Sub 

кажется, что я могу ввести данные в первый 2 строки просто прекрасны, но как только я начинаю заполнять данные в третьей строке и далее, я получаю сообщение об ошибке «1004 времени выполнения», определяемой приложением или объектной ошибкой ».

+0

Это в vb.net или в редакторе VBA Excel (например, вкладка разработчика -> Visual Basic)? Можете ли вы добавить точку останова в редакторе, чтобы определить, где в коде возникает эта ошибка? – Sam

+0

Это работает для меня в Excel 2010. Обратите внимание, что с изменениями дорожек ON в Excel 2010 (и, возможно, 2007) вы не сможете использовать макросы в файле общей книги. –

+0

Также обратите внимание, что вы можете использовать 'Application.EnableEvents = False' в начале этого кода и' Application.EnableEvents = True' в конце этого кода, чтобы предотвратить ненужный цикл (оператор if/else ALSO запускает _Change событие и запускает макрос второй раз, что не нужно). –

ответ

0

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

Я не совсем уверен, почему выбрасывает эта ошибка, но обходной путь, чтобы избежать появлений этого сообщения будет Resume Next при возникновении ошибки:

On Error Resume Next

Просто добавьте эту строку код о вашем первом If блок (If Target.Column = 1 Then). Обратите внимание, что в идеале вы должны захотеть узнать источник этой проблемы и что это решение является обходным путем, что может быть не очень удачным.

0

Я получаю сообщение об ошибке из строки 2 с этим кодом и изменениями дорожек. Однако код, похоже, делает то, что он должен делать независимо от ошибки, поэтому я бы посоветовал работать с On Error Resume Next.

Это не касается какой-либо основной проблемы с отслеживанием изменений, и ваши изменения могут не отслеживаться.