It seems from your example that the Range object's Value property returns an Object(,) array if the range has more than one cell, but a single object of the relevant type if the
range has a single cell.
The problem is not that the string returned by the single-celled range's Value property cannot be stuffed into an Object(,) array, but that the CType(...) type conversion does not do any stuffing - it won't make a new array if the value you pass in is
not an array already. In the multi-cell case, the array was already returned as the object you get from the Value property, and the CType(...) makes the type conversion to allow the local variable assignment.
You could check the range size, and write your own extraction function like this (I've not tried to compile it, but you'll get the idea):
Function GetRangeValueAsArray(theRange As Range) As Object(,)
If theRange.Cells.Count = 1 Then
Dim theResult(0, 0) As Object
theResult(0, 0) = theRange.Value
Return theResult
End If
' This is the normal case
Return CType(theRange.Value, Object(,))
End Function
You could also use an array initializer statement to initialize the 2D array like this:
Dim theResult As Object(,) = {{ theRange.Value }}
-Govert