I am having a few problems with some VERY simple lines of code. Let me detail the facts and see if anyone else can replicate this behavior. If any one can replicate I would like to get an explanation of why it is happening.
So lets me start with a very simple line of code THAT WORKS:
Dim arr() As Variant
arr = Range("A1:A10")
this does as expected, arr
is assigned the Values of A1:A10
now why won't the following line of code work?
Dim arr() As Variant
arr = WorkSheets("Sheet1").Range("A1:A10")
I get a Run-Time Error '13' Type mismatch, even though the same range was successfully assigned to the array, just without the Worksheet value.
But
Dim arr As Variant
arr = Worksheets("Sheet1").Range("A1:A10")
And
Dim arr() As Variant
arr = Application.Transpose(Application.Transpose(Worksheets("Sheet1").Range("A1:A10")))
DOES WORK
Now before you answer please let me give you some more facts.
Dim arr() As Variant
arr = Worksheets(1).Range("A1:A10")
Does Not Work
and using Sheets
in place of Worksheets
also all give the same error.
I have made sure it is the same sheet as the active referenced sheet by using Range("A1:A10").Worksheet.Name
Following the working code and it indeed says Sheet1
in the output.
No other workbooks are open so it can't be referencing another workbook either.
Now this last bit of code only adds to my confusion as it totally works!
Dim arr() As Variant
Dim SampleRange As Range
Set SampleRange = Worksheets("Sheet1").Range("A1:A10")
arr = SampleRange
So using the SAME RANGE defined the same way on the same sheet now works when I assign it to a Range Variable. and use that! And as expected this works with both the WorkSheets
and Sheets
function regardless of how I define the sheet (I can use the index or the Name of the worksheet and all work fine)
If it helps anyone, I am testing this with Excel 2007 on a Windows XP machine. I have not yet tested it on any other machines but I plan to test on 2003 and 2010 on Windows 7 and 8, just haven't had the chance yet.
UPDATE: Not 100% sure if this is the same exact issue as with the array but from a shallow view it seems to be:
Range("B1:B3") = Range("A1:A3")
The above code will not work, even if A1:A3 is populated, dates, numeric values, strings, formula anything, it will write blanks into B1:B3
But
Range("B1:B3").Value = Range("A1:A3").Value
And
Range("B1") = Range("A1")
does work!
Also working is:
Range("B1:B3") = Application.Transpose(Application.Transpose(Range("A1:A3")))