gpt4 book ai didi

VBA,Excel,使用Range填充二维数组

转载 作者:行者123 更新时间:2023-12-02 08:27:22 24 4
gpt4 key购买 nike

我不明白这种行为:

Sub tuEs()
Dim A() As Variant
A = Range("A1:A10") ' works

Dim B() As Variant
B = ActiveSheet.Range("A1:A10") ' Type mismatch
End Sub

第一个版本有效,第二个版本则无效。为什么?有什么区别?

最佳答案

实现此目的的方法是在范围末尾添加“.value”。这通常是一个让事情变得非常明确的好主意(您可以省略它的原因是因为 value 是范围对象的默认属性)

我将所有值添加到监视中以查看发生了什么,显然存在 Excel 无法有效(且隐式)动态转换对象的问题。请注意图中失败的表达式“ActiveSheet.Range("A1:A10") 的类型:Variant/Object/Range;从 Variant 到对象的转换很可能导致该问题。

enter image description here

强制其正确转换的一种方法是将过程分为两部分,第一部分转换为范围,第二部分转换为变体数组。看我的例子

另请注意,如果您将变量单独声明为变体而不是变体数组(dim E 而不是 dim E()),它将获得它,因为它将适应所需的内容。

Sub tuEs()

'Works
Dim A() As Variant
A = Range("A1:A10")

' Type missmatch
Dim B() As Variant
B = ActiveSheet.Range("A1:A10")

' Fix to make it cast properly
Dim C() As Variant
Dim r As Range
Set r = ActiveSheet.Range("A1:A10")
C = r

' Best of all options
Dim d As Variant
d = ActiveSheet.Range("A1:A10").Value

End Sub

希望这能让大家明白一些。

关于VBA,Excel,使用Range填充二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com