【发布时间】:2018-01-21 00:19:29
【问题描述】:
我不知道如何使下面的代码工作。每次调用都会导致 Intersection = Nothing 并且选择了 ELSE 语句,并且 yes rngIntersect 是有效且非空的,并且交集不是空的,因此问题出在目标部分。
当我调试代码并询问时?目标结果是 zilch。然而,target.column、target.row 和 target.address 分别都是正确的 3,9 和 $C$9)。
这一定是一些基本的东西,但毕竟在不同的网站上环顾四周,我还没有想出一个解决方案。
我可以使用 target.column 和 target.row 找到目标是否在范围内,但我无法让下面更优雅的代码工作。无论出于何种原因,目标似乎“有点但不是完全空的”。
为了强调,在调试窗口中?目标返回空但是? target.address 返回 $C$9,因为这是用户选择的单元格,并且 rngIntersect = $C$9:$N$9,因此 Intersect = $C$9 肯定 没有。
我试过了吗?范围(目标)和? 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
【问题讨论】:
-
您为什么不使用私有 Worksheet_SelectionChange 或 Workbook_SheetSelectionChange?
-
target在哪张纸上? FWIW? target正在做?target.Value如果target是Range- 那么target所在工作表的单元格C9 中的值是多少?如果您不确定您指的是哪个工作表,请执行?target.Worksheet.Name。 -
这里需要两个参数吗?您有
target和父工作表,但正如@YowE3K 指出的那样,这与target.Worksheet(或target.Parent)相同。这里不是您的核心问题,但您可以稍微简化您的方法调用...