希望这是一个简单的问题,但我非常喜欢这个技术答案!
有什么区别:
i = 4
Run Code Online (Sandbox Code Playgroud)
和
Set i = 4
Run Code Online (Sandbox Code Playgroud)
在VBA?我知道后者会抛出错误,但我不完全理解为什么.
我遇到了一些非常简单的代码问题.让我详细说明事实,看看是否有其他人可以复制这种行为.如果有人可以复制,我想解释它为什么会发生.
因此,让我从一个非常简单的代码行开始:
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无论我如何定义工作表,它都适用于和函数(我可以使用索引或工作表的名称,所有工作正常) …