Kal*_*lle 5 excel vba excel-vba
我不明白这种行为:
Sub tuEs()
Dim A() As Variant
A = Range("A1:A10") ' works
Dim B() As Variant
B = ActiveSheet.Range("A1:A10") ' Type mismatch
End Sub
Run Code Online (Sandbox Code Playgroud)
第一个版本的第二个版本没有.为什么?有什么不同?
小智 3
解决这个问题的方法是在范围末尾添加“.value”。这通常是使事情变得非常明确的好主意(您可以省略它的原因是因为 value 是范围对象的默认属性)
我将所有值添加到监视中以查看发生了什么,显然存在 Excel 无法有效(隐式)动态转换对象的问题。请注意图中失败的表达式“ActiveSheet.Range("A1:A10") 的类型:Variant/Object/Range;从 Variant 到对象的转换很可能导致该问题。
强制其正确转换的一种方法是将过程分为两部分,第一部分转换为范围,第二部分转换为变体数组。看我的例子
另请注意,如果您将变量单独声明为变体而不是变体数组(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
Run Code Online (Sandbox Code Playgroud)
希望这能让大家明白一些。
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |