开发者

Counting Rows/Columns of Selected Range Error

开发者 https://www.devze.com 2023-03-10 14:41 出处:网络
I am trying to determine if a selected range is within a set area... This toggles Copy/Paste restrictions in the spreadsheet. I have figured it out, I think, but I\'m getting a run-time error 6 (Overf

I am trying to determine if a selected range is within a set area... This toggles Copy/Paste restrictions in the spreadsheet. I have figured it out, I think, but I'm getting a run-time error 6 (Overflow) if you select an entire row or column. This is what I've got..

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
        BETWE开发者_JS百科ENROWS = True
    Else
        BETWEENROWS = False
    End If
End Function

There is one for columns BETWEENCOLUMNS as well and the function BETWEEN just returns True/False if a given number is between a min and max value.

This is working great, however, if an entire row/column is selected it's throwing an error and I'm not too familiar with VBA and the only way that I know of bypassing the error is with On Error Resume Next but that seems like I'm putting a bandaid on it and would like to figure out how to fix it another way.


Your LastRow variable is not the correct type for a number as large as the max columns/rows of the spreadsheet. Change the type to Long:

Dim LastRow As Long


You are getting an overflow error because you have made the LastRow variable an integer. Since there are more rows in an entire column then can fit in an integer variable, it triggers the overflow. You could fix this by changing the LastRow variable to be type Long

However, rather then comparing row values you may want to look into the Intersect() function. Given two (or more) ranges it will return the range object that represents the intersection of the two ranges. You could then check that intersection. If they don't intersect the range object will be Nothing. There is a good tutorial for this function at ozgrid.com

UPDATE
Here is the code to ensure range intersects fully using the Intersect() function

'// 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
0

精彩评论

暂无评论...
验证码 换一张
取 消