相关疑难解决方法(0)

282
推荐指数
8
解决办法
20万
查看次数

关键字Set在VBA中实际做了什么?

希望这是一个简单的问题,但我非常喜欢这个技术答案!

有什么区别:

i = 4
Run Code Online (Sandbox Code Playgroud)

Set i = 4
Run Code Online (Sandbox Code Playgroud)

在VBA?我知道后者会抛出错误,但我不完全理解为什么.

vba variable-assignment

149
推荐指数
4
解决办法
20万
查看次数

为什么我在将一个范围分配给变量数组时遇到问题

我遇到了一些非常简单的代码问题.让我详细说明事实,看看是否有其他人可以复制这种行为.如果有人可以复制,我想解释它为什么会发生.

因此,让我从一个非常简单的代码行开始:

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无论我如何定义工作表,它都适用于和函数(我可以使用索引或工作表的名称,所有工作正常) …

arrays excel vba excel-vba

26
推荐指数
1
解决办法
2万
查看次数