1

次のコードを実行すると、何らかの理由で「Runtime 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(...)にオブジェクトタイプを割り当てると、範囲内のセル値の2Dバリアント配列が生成されます。これは、パーツとパーツで問題なく機能します。VariantSetFor Each v1 in N_1IsEmpty(v1)

したがって、そもそもなぜエラー13が発生したのか、100%わかりません(それを想定してv1z1としても宣言されていますVariant)。実際、使用する場合は、単に辞書を使用するのではなく、Set使用する辞書にデータを入力するループも変更する必要があります。v1.Valuev1

後でそれを使用N_1してオブジェクトであると期待している場合、これは物事を説明しますが、すべてが:Rangeとして宣言されている場合、上記のコードは問題なく実行されます。Variant

エラーなしで実行されている質問のコードを示すExcelのスクリーンショット

于 2012-10-02T02:11:27.780 に答える