出于某种原因,当我执行以下代码时,我收到“运行时13”错误。
Dim N_1 As Variant
Worksheets("Trucks").Activate
Range("G9").Activate
Do Until ActiveCell.Value = ""
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then Exit Do
Loop
ActiveCell.Offset(-1, 0).Select
N_1 = Range(ActiveCell, "G9")
With CreateObject("scripting.dictionary")
.comparemode = vbTextCompare
For Each v1 In N_1
If Not IsEmpty(v1) Then
If Not .exists(v1) Then .Add v1, Nothing
End If
Next
z1 = .keys
End With
答案 0 :(得分:0)
Range(...)
返回一个对象类型,因此必须使用Set
:
Set N_1 = Range(ActiveCell, "G9")
虽然Range(...)
确实返回了对象类型,但在不使用Variant
的情况下将其分配给Set
会生成范围内单元格值的2D变体数组。这适用于For Each v1 in N_1
部分和IsEmpty(v1)
部分。
因此,我不是100%确定为什么你首先得到错误13(假设v1
和z1
也被声明为Variant
)。事实上,如果您使用Set
,您还必须更改填充字典的循环以使用v1.Value
而不仅仅v1
如果您随后使用N_1
并期望它是Range
对象,那么这将解释事情,但如果所有内容都声明为{{1},则上面的代码对我来说运行正常}: