我正在尝试确定所选范围是否在设定区域内...这会在电子表格中切换复制/粘贴限制。我想,我已经弄明白了,但是如果你选择一个完整的行或列,我会得到一个运行时错误6(溢出)。这就是我所拥有的......
Function BETWEENROWS(ByVal Selected As Range, ByVal Min As Double, ByVal Max As Double) As Boolean
Dim LastRow As Integer
LastRow = Selected.Row + Selected.Rows.Count - 1
If BETWEEN(Min, Selected.Row, Max) = True And BETWEEN(Min, LastRow, Max) = True Then
BETWEENROWS = True
Else
BETWEENROWS = False
End If
End Function
列BETWEENCOLUMNS
也有一个,如果给定的数字介于最小值和最大值之间,函数BETWEEN
只返回True / False。
这很有效,但是,如果选择了整个行/列,它会抛出一个错误而我对VBA不太熟悉,我知道绕过错误的唯一方法是On Error Resume Next
但是这似乎是我在上面放一个绑带,并想弄清楚如何以另一种方式修复它。
答案 0 :(得分:3)
您的LastRow变量不是与电子表格的最大列/行一样大的数字的正确类型。将类型更改为Long:
Dim LastRow As Long
答案 1 :(得分:1)
您收到溢出错误,因为您已将LastRow
变量设为整数。由于整列中有更多行,因此可以适合整数变量,因此会触发溢出。您可以通过将LastRow
变量更改为类型Long
然而,不是比较行值,您可能需要查看Intersect()
函数。给定两个(或更多)范围,它将返回表示两个范围的交集的范围对象。然后你可以检查那个十字路口。如果它们不相交,则范围对象将为Nothing
。这个函数有一个很好的教程ozgrid.com
<强>更新强>
以下是使用Intersect()
函数
'// Run a test here to make sure Intersect does not return Nothing
If (TestRNG.Count <= ISectRNG.Count) And (Intersect(TestRNG, ISectRNG).Count = TestRNG.Count) Then
'// All of TestRNG falls within ISectRNG
End If