在Excel 2010中,我试图通过'目标'从Worksheet_Change事件到子例程。子检查是否在特定范围内发生了更改,如果发生了某些事情则执行某些操作。我遇到的问题是目标似乎在调用过程中的子行为方面有所不同。例如,在调用过程中,我可以在交叉中使用Target,当我将它传递给sub并执行相同的操作时,我得到运行时错误(1004)。我的代码如下,如果有人能告诉我我做错了什么,我将不胜感激。
'工作表上的代码 - 这是在几张纸上
Private Sub Worksheet_Change(ByVal Target As Range)
SubRout Target
End Sub
'模块中的代码
Sub SubRout (ByVal Target As Range)
Dim ValidChange As Boolean
ValidChange = True
'Check if change on sheet was a change to cell in named range
If Intersect(Target, Names("WB4aWBSRange").RefersToRange) Is Nothing Then ValidChange = False
If ValidChange = True And Target.value <> "" Then
'Do stuff
End If
End Sub
相交行上发生运行时错误,但是如果我将所有代码移动到调用例程,它就可以正常工作。
答案 0 :(得分:3)
错误不是因为那个。错误是因为Names("WB4aWBSRange").RefersToRange
。你不能那样使用它。
使用此
If Intersect(Target, Range("WB4aWBSRange")) Is Nothing Then ValidChange = False
答案 1 :(得分:1)
因为is Nothing
返回布尔值,所以不需要第一个if语句:
ValidChange = Not Intersect(Target, Range("WB4aWBSRange")) Is Nothing
我宁愿根本不使用变量而是这样做:
If Not Intersect(Target, Range("WB4aWBSRange")) Is Nothing' then
If Target.value <> "" Then
'Do stuff
End If
End Sub