【发布时间】:2016-01-16 05:51:37
【问题描述】:
我不明白这种行为:
Sub tuEs()
Dim A() As Variant
A = Range("A1:A10") ' works
Dim B() As Variant
B = ActiveSheet.Range("A1:A10") ' Type mismatch
End Sub
第一个版本有效,第二个版本无效。为什么?有什么区别?
【问题讨论】:
-
是否有可能没有工作表处于活动状态?尝试使用
Sheets(sheet_name) -
如果你把
.Value放在后面,它们都可以工作。 -
这很奇怪。这可能更奇怪:将 C 声明为一个变体(C 后面没有括号)并将行
B = ActiveSheet.Range("A1:A10")替换为C = ActiveSheet.Range("A1:A10")行,然后是B=C行,它将按预期工作。 @ScottCraner 是正确的,有一些变通方法,但它似乎仍然有些神秘。 -
鉴于 Excel 不是开源的,这可能是任何人所能做的最好的事情之一就是做出有根据的猜测。变体如何处理动态类型与 VBA 如何决定是否需要使用默认属性之间似乎存在一种奇怪的交互。
-
@GSerg 如果有的话——分配给
B()应该可以工作(因为B()不能保持一个范围——所以它必须是你的值试图分配)但分配给B应该会触发歧义(因为它可以保持一个范围)。因此,我同意您对重复问题的接受答案(令人印象深刻,就像 Siddharth Rout 的大多数答案一样)并不能完全解释发生了什么。