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

我试图确定一个选定的范围是否在一个设定的区域内…这将切换电子表格中的复制/粘贴限制。 我想,我想,但我得到一个运行时错误6(溢出),如果你select整个行或列。 这是我得到的

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但是这看起来像我把一个绷带放在上面,想弄清楚如何解决这个问题。

您的LastRowvariables不是数字的正确types,与电子表格的最大列/行一样大。 将types更改为Long:

 Dim LastRow As Long 

你得到一个溢出错误,因为你已经把LastRowvariables作为一个整数。 由于整个列中有更多的行,所以可以放入一个整型variables,这会触发溢出。 您可以通过将LastRowvariables更改为Longtypes来解决此问题

但是,而不是比较行值,您可能需要查看Intersect()函数。 给定两个(或更多)范围,它将返回代表两个范围相交的范围对象。 然后你可以检查这个交点。 如果它们不相交,范围对象将是Nothing 。 在ozgrid.com有一个很好的教程

UPDATE
这里是确保范围完全使用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