2012-03-22 104 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 - 類型不匹配。有人知道解決方法嗎?我不熟悉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 

隨訪

是的,這正是我需要的!謝謝!它像一個魅力。我不熟悉Intersect或EnableEvents選項,所以我在這裏學到了很多東西 - 我很欣賞它。 - rryanp 16秒前

INTERSECT:intersect方法將返回一個代表兩個或更多的交集Range對象,範圍。

請參閱此鏈接

主題:相交方法[Excel 2003中VBA語言參考]

鏈接Intersect - MSDN

enableEvents方法:你必須使用EnableEvents屬性,以防止VBA代碼可能啓動的任何可能的無限循環。當您將此屬性設置爲False時,VBA不會引發任何事件,並且Worksheet_Change事件將只運行一次。另外,您應該始終確保將EnableEvents屬性設置回True,以便下次啓動事件。

HTH

希德

+0

是的,這正是我需要的!謝謝!它像一個魅力。我不熟悉Intersect或EnableEvents選項,所以我在這裏學到了很多東西 - 我很欣賞它。 – rryanp 2012-03-22 18:25:35

+0

@rryanp:更新了我的文章,更多信息:) – 2012-03-22 18:34:50