我不知道如何使下面的代码工作。每次调用的结果是Intersection = Nothing和ELSE语句选择和yes rngIntersect是有效的和非空的,交集不为空,所以问题是与目标部分。
当我调试代码并询问?target时,结果是zilch。然而,目标.列、目标.行和目标.地址都是正确的(分别为3、9和$C$9)。
这一定是一些基本的东西,但毕竟在不同的网站上四处寻找,我还没有拿出一个解决方案。
我可以通过使用target.column和target.row来判断目标是否在范围之内,但是我无法使用下面更优雅的代码。不管出于什么原因,目标似乎“有点空,但不完全空”。
需要强调的是,在调试窗口中,?target返回空值,但是?target.address返回$C$9,因为这是用户选择的单元格,并且rngIntersect = $C$9:$N$9,因此Intersect = $C$9肯定〈〉Nothing。
我已经尝试了?range(target)和?target.range,但这会产生错误。
本质上,我如何使目标返回它应该返回的范围,毕竟它被定义为一个范围开始的权利?
Sub OnSelectionChange(ByVal target As Range, wksChange As Worksheet)
On Error GoTo ErrorHandler
Dim rngIntersect As Range, rngTarget As Range
Set rngIntersect = wksChange.Range("RNGINTERSECT")
Set rngTarget = target
If Not Application.Intersect(rngTarget, rngIntersect) Is Nothing Then
Call WorksheetSelectionChange(target.Column, wksChange)
Else
Call MAIN.ZoomAdjust(wksChange, False)
End If
ErrorExit:
Exit Sub
ErrorHandler:
Call LogError(Err.Number, Err.Description, C_MODULE, "OnSelectionChange")
Resume ErrorExit
End Sub
2条答案
按热度按时间e5nszbig1#
我认为你的问题不在于你的代码,而在于你的期望,即
? Target
应该打印一些东西。Target
是一个范围,当你不指定你想要打印的属性时,默认属性将被打印,即.Value
。单元格可能是空的事实并不说明它作为一个范围对象存在。Target
是一个range对象。因此你不需要把它转换成一个range对象,比如rngTarget。作为一个range对象,它的一个属性是.Worksheet
,因此你不需要传递一个额外的参数。记住Application.Intersect
也返回一个range对象。下面是工作代码。我已经剔除了任何可能让你困惑的东西,特别是你的错误处理程序。如果这种代码曾经创建了一个错误,你想立即知道它,而不是仅仅在3个小时的徒劳搜索之后。
xwbd5t1u2#
我确实发现了问题。正确的代码应该是
代替
原因是
wksChange.Range("RNGINTERSECT")
返回所需范围的字符串值,而不是范围本身