计算所选范围错误的行/列

时间:2011-06-03 01:29:24

标签: excel vba excel-vba

我正在尝试确定所选范围是否在设定区域内...这会在电子表格中切换复制/粘贴限制。我想,我已经弄明白了,但是如果你选择一个完整的行或列,我会得到一个运行时错误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但是这似乎是我在上面放一个绑带,并想弄清楚如何以另一种方式修复它。

2 个答案:

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