1

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

1 回答 1

0

Range(...)返回一个对象类型,所以Set必须使用:

Set N_1 = Range(ActiveCell, "G9")


虽然Range(...)确实返回一个对象类型,但将其分配给 aVariant而不使用Set会生成该范围内单元格值的 2D 变体数组。这适用于For Each v1 in N_1零件和IsEmpty(v1)零件。

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

如果您随后使用N_1并期望它是一个Range对象,那么这将解释一些事情,但是如果所有内容都声明为 a ,那么上面显示的代码对我来说运行正常Variant

Excel 屏幕截图显示问题中的代码运行没有错误

于 2012-10-02T02:11:27.780 回答