我正在使用Excel VBA并且有一个像这样的worksheet_change事件:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("rel_type") Then
--some code
End If
End Sub
当我对命名范围“rel_type”进行更改时,该代码非常有用。但是,如果我在电子表格中的任何其他位置插入一行,我会得到运行时错误13 - 在该Sub的第一行上输入不匹配。有人知道解决方法吗?我不熟悉Worksheet_Change事件,似乎无法找到好的文档(或者至少是文档引用了这个错误的原因)。感谢。
答案 0 :(得分:5)
这是你在尝试的吗?
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 :相交方法将返回一个范围对象,表示两个或更多范围的交集。
请参阅此链接
主题:相交方法[Excel 2003 VBA语言参考]
ENABLEEVENTS :您必须使用EnableEvents属性来防止VBA代码可能启动的任何可能的无限循环。将此属性设置为False
时,VBA不会引发任何事件,Worksheet_Change
事件只会运行一次。此外,您应始终确保将EnableEvents属性设置回True
,以便下次正常调用事件。
HTH
西特