When a new selection of cells is made, I want to convert the range into an array for later use, and determine the number of columns selected. This is the code I have, but I get a type mismatch error. Can someone point me in the right direction?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim arr As Variant
Dim colcount As Long
arr = Target
colcount = UBound(arr, 2)
Debug.Print colcount
End Sub
>Solution :
The error is due to Range.Value returning only a single value when the range only has a single cell.
If Target is a single cell, then Target will return a single value instead of an array. arr will be a single value and UBound(arr, 2) will error because arr is not an array.
You can use IsArray to check if arr is an array or not before attempting UBound. Also, if you intend to save these values for future use, you should define them as Module-Level variables.
Dim arr As Variant
Dim colcount As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
arr = Target
If IsArray(arr) Then
colcount = UBound(arr, 2)
Else
colcount = 1
End If
Debug.Print colcount
End Sub
To fill colcount, other than UBound, you could also just do colcount = Target.Columns.Count which would also avoid needing to check IsArray.