我无法弄清楚如何使下面的代码工作。每次调用都会导致Intersection = Nothing并选择ELSE语句,并且是rngIntersect有效且非空,且交集不为空,因此问题出在目标部分。
当我调试代码并询问?目标结果是zilch。但是target.column,target.row和target.address都是正确的3,9和$ C $ 9)。
这必须是基本的东西,但毕竟在不同的网站上环顾四周,我还没有想出一个解决方案。
我可以通过使用target.column和target.row找到目标是否在范围内,但我无法使下面更优雅的代码工作。无论出于何种原因,目标似乎有些但不完全是空的'。
要强调,在调试窗口中? target返回空但是? 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
答案 0 :(得分:0)
我认为您的问题不是来自您的代码,而是来自您的期望,即? Target
应该打印一些东西。 Target
是一个范围,当您未指定要打印的属性时,将打印默认属性.Value
。单元格可能为空的这一事实并未说明它作为范围对象的存在。
Target
是一个范围对象。因此,您无需将其转换为范围对象,例如rngTarget。作为范围对象,其属性之一是.Worksheet
,因此,您不需要将其作为附加参数传递。请记住,Application.Intersect
也会返回一个范围对象。
以下是工作代码。我已经删除了任何可能让您感到困惑的事情,特别是您的错误处理程序。如果这种代码曾经产生错误,你想立即知道它,而不仅仅是在无效搜索3小时之后。
Option Explicit
Private Sub TestIntersect()
OnSelectionChange Range("C9")
OnSelectionChange Range("C3")
End Sub
Sub OnSelectionChange(ByVal Target As Range)
Dim WksChange As Worksheet
Dim RngIntersect As Range
Set WksChange = Target.Worksheet
' Set RngIntersect = WksChange.Range("RNGINTERSECT")
Set RngIntersect = WksChange.Range("C9:N9")
If Not Application.Intersect(Target, RngIntersect) Is Nothing Then
WorksheetSelectionChange Target.Column, WksChange
Else
MAINZoomAdjust WksChange, False
End If
End Sub
Private Sub WorksheetSelectionChange(ByVal C As Long, _
Ws As Worksheet)
MsgBox "Here is WorksheetSelectionChange" & vbCr & _
"Column " & C
End Sub
Private Sub MAINZoomAdjust(Ws As Worksheet, _
ByVal TooBig As Boolean)
MsgBox "Here is MAINZoomAdjust" & vbCr & _
"TooBig = " & TooBig
End Sub
答案 1 :(得分:0)
我确实发现了问题。应该是正确的代码 如果不是Application.Intersect(target,wksChange.Range(wksChange.Range(" RNGINTERSECT")))那么什么都没有
而不是 如果不是Application.Intersect(target,wksChange.Range(" RNGINTERSECT"))那么什么都没有原因是wksChange.Range(" RNGINTERSECT")返回感兴趣范围的字符串值,而不是范围本身