我遇到了一些非常简单的代码问题.让我详细说明事实,看看是否有其他人可以复制这种行为.如果有人可以复制,我想解释它为什么会发生.
因此,让我从一个非常简单的代码行开始:
Dim arr() As Variant
arr = Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)
这按预期进行,arr赋值为A1:A10
现在为什么以下代码行不起作用?
Dim arr() As Variant
arr = WorkSheets("Sheet1").Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)
我得到一个运行时错误'13'类型不匹配,即使成功分配给数组相同的范围,只是没有工作表值.
但
Dim arr As Variant
arr = Worksheets("Sheet1").Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)
和
Dim arr() As Variant
arr = Application.Transpose(Application.Transpose(Worksheets("Sheet1").Range("A1:A10")))
Run Code Online (Sandbox Code Playgroud)
工作
在你回答之前,请让我给你一些更多的事实.
Dim arr() As Variant
arr = Worksheets(1).Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)
不起作用
并Sheets代替Worksheets所有人也给出了相同的错误.
通过使用下面Range("A1:A10").Worksheet.Name的工作代码确实它与活动引用表相同,它确实Sheet1在输出中说明了.
没有其他工作簿是打开的,所以它也不能引用另一个工作簿.
现在这最后一点代码只会增加我的困惑,因为它完全有效!
Dim arr() As Variant
Dim SampleRange As Range
Set SampleRange = Worksheets("Sheet1").Range("A1:A10")
arr = SampleRange
Run Code Online (Sandbox Code Playgroud)
因此,当我将其分配给范围变量时,使用相同方式在同一张纸上定义的相同方法现在可以正常工作.并使用它!正如预期的那样WorkSheets,Sheets无论我如何定义工作表,它都适用于和函数(我可以使用索引或工作表的名称,所有工作正常) …
正如我已经想到的那样,至少有六个:!@#$%&.
这是剪辑:
Dim A!, B@, C#, D$, E%, F& Debug.Print "A! - " & TypeName(A) Debug.Print "B@ - " & TypeName(B) Debug.Print "C# - " & TypeName(C) Debug.Print "D$ - " & TypeName(D) Debug.Print "E% - " & TypeName(E) Debug.Print "F& - " & TypeName(F)
输出
A! - Single B@ - Currency C# - Double D$ - String E% - Integer F& - Long
关于这种语法糖的文档在哪里?
还有哪些其他可能的后缀?
有一个日期?