For循环中的运行时错误13

时间:2012-10-02 02:00:19

标签: excel vba declaration runtime-error

出于某种原因,当我执行以下代码时,我收到“运行时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

1 个答案:

答案 0 :(得分:0)

Range(...)返回一个对象类型,因此必须使用Set

Set N_1 = Range(ActiveCell, "G9")


虽然Range(...)确实返回了对象类型,但在不使用Variant的情况下将其分配给Set会生成范围内单元格值的2D变体数组。这适用于For Each v1 in N_1部分和IsEmpty(v1)部分。

因此,我不是100%确定为什么你首先得到错误13(假设v1z1也被声明为Variant)。事实上,如果您使用Set,您还必须更改填充字典的循环以使用v1.Value而不仅仅v1

如果您随后使用N_1并期望它是Range对象,那么这将解释事情,但如果所有内容都声明为{{1},则上面的代码对我来说运行正常}:

Excel screenshot showing the code from the question running without errors