2012-03-22 1 views
3

Я использую Excel VBA и есть событие worksheet_change как так:Worksheet_Change Событие ошибки давая время выполнения 13 - Тип Несовпадение при вставке строк

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target = Range("rel_type") Then 
     --some code 
    End If 
End Sub 

Этот код работает здорово, когда я внести изменения в именованный диапазон «rel_type». Однако, если я вставляю строку где-нибудь еще в электронную таблицу, я получаю ошибку 13-типа ошибки 13-типа в первой строке этого Sub. Кто-нибудь знает обходное решение? Я не знаком с событием Worksheet_Change и не могу найти хорошую документацию (или, по крайней мере, документацию, в которой упоминается, почему эта ошибка возникла). Благодарю.

ответ

4

Это то, что вы пытаетесь?

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error GoTo Whoa 

    If Not Intersect(Target, Range("rel_type")) Is Nothing Then 
     Application.EnableEvents = False 

     '--some code 
    End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

Followup

Да, это именно то, что мне нужно! Благодаря! Оно работало завораживающе. Я не был знаком с опцией Intersect или EnableEvents, поэтому я многому научился здесь - я ценю это. - rryanp 16 сек назад

INTERSECT: Метод Intersect возвращает Range объект, представляющий пересечение двух, или более, диапазоны.

Смотрите эту ссылку

Тема: Перекрыть метод [Excel 2003 VBA Language Reference]

Ссылка: Intersect - MSDN

ENABLEEVENTS: Вы должны использовать свойство EnableEvents для предотвращения любые вероятные бесконечные циклы, которые может инициировать код VBA. Когда вы установите это свойство на False, VBA не будет создавать никаких событий, и событие Worksheet_Change будет запускаться только один раз. Кроме того, вы всегда должны установить свойство EnableEvents обратно в True, чтобы включить события, которые будут нормально вызваны в следующий раз.

НТН

Sid

+0

Да, это именно то, что мне нужно! Благодаря! Оно работало завораживающе. Я не был знаком с опцией Intersect или EnableEvents, поэтому я многому научился здесь - я ценю это. – rryanp

+0

@rryanp: Обновлено мое сообщение с дополнительной информацией :) –

Смежные вопросы