在Excel VBA中将目标传递给Sub

在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 

运行时错误发生在相交线上,但是如果我将所有的代码移到调用例程中,它都可以正常工作。

错误不是因为那个。 错误是由于Names("WB4aWBSRange").RefersToRange 。 你不能这样使用它。

用这个

 If Intersect(Target, Range("WB4aWBSRange")) Is Nothing Then ValidChange = False 

因为is Nothing返回一个布尔值,所以不需要第一个if语句:

ValidChange = Not Intersect(Target, Range("WB4aWBSRange")) Is Nothing

我宁愿不使用这个variables,而是这样做:

 If Not Intersect(Target, Range("WB4aWBSRange")) Is Nothing' then If Target.value <> "" Then 'Do stuff End If End Sub