在Excel VBA中将目标传递给Sub

时间:2016-09-23 14:58:59

标签: excel vba excel-vba

在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

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

2 个答案:

答案 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