收集时运行时错误91

时间:2015-06-12 01:52:42

标签: excel vba excel-vba

我有一个名为“rng1”的范围,第一行是标题。我想有collection来存储所有变量名。鉴于有5个变量。

Sub Main()                           

    Dim rng As Range
    Set rng = Range("rng1")
    Dim header As Collection

    For i = 1 To 5
        header.Add Item:=Cells(rng.Row, rng.Column).Offset(0, i - 1).Value
    Next i

    End Sub

当我使用代码MsgBox Cells(rng.Row, rng.Column).Offset(0,0).Value

时,我能够显示变量名称

1 个答案:

答案 0 :(得分:5)

您永远不会将header设置为对象。当您将header声明为Collection时,它会指示编译器为Collection对象保留空间,但实际上不会创建一个。{1}}。为了实例化对象,您需要执行以下操作:

Set header = New Collection

如果您正在创建实例(而不是从现有实例分配),该语言提供了一些快捷语法,并允许您在一行上组合声明和实例化:

Dim header As New Collection

因此,完整的代码看起来像这样:

Sub Main()                           

    Dim rng As Range
    Set rng = Range("rng1")
    Dim header As New Collection

    For i = 1 To 5
        header.Add Item:=Cells(rng.Row, rng.Column).Offset(0, i - 1).Value
    Next i

End Sub