添加方法VBA上的运行时错误

时间:2015-05-20 15:06:14

标签: excel vba excel-vba excel-2010

我的函数的意图在docstring中解释。但是,当我运行它时,我得到一个"运行时错误' 91'对象变量或者没有设置块变量",并突出显示一行代码,如下所示。我找不到这个问题的根源,特别是因为我对VBA很新。任何帮助将不胜感激!

'==============================|Range_Collection FUNCTION|=============================='
' Given a collection and a range, add each value in that range to the collection, except
' for False values.
Function Range_Collection(col As Collection, rng As Range) As Collection

    Dim Val As Variant
    For Each Val In rng
        If Not Val.Value = False Then
            col.Add Val.Value ;************** THIS CODE IS HIGHLIGHTED************
        End If
    Next Val
    Set Range_Collection = col

End Function

3 个答案:

答案 0 :(得分:1)

Dim Val As Variant更改为Dim Val As Range

答案 1 :(得分:1)

让我们说你的工作表看起来像这样

enter image description here

这是我运行代码时得到的结果

enter image description here

继续我的评论,请参阅此

语法为 col.add" Item"," Key" 。关键必须是独一无二的。如果您有重复的值,那么按照我的建议使用OERN或使用唯一的密钥。

Sub Sample()
    Dim c As New Collection

    For Each itm In Range_Collection(c, Range("A1:A5"))
        Debug.Print itm
    Next
End Sub
Function Range_Collection(col As Collection, rng As Range) As Collection

    Dim rVal As Variant

    For Each rVal In rng
        If Not rVal.Value = False Then
            On Error Resume Next
            col.Add rVal.Value, CStr(rVal.Value)
            On Error GoTo 0
        End If
    Next rVal

    Set Range_Collection = col
End Function

答案 2 :(得分:1)

此外,提防 这个很少"潜在的语言怪异" ...... (使用任何语言)

当你写道:

If Not Val.Value = False Then

...然后你无疑打算说:(注意括号,小心......)

 If Not (Val.Value = False) Then 

... (换句话说,"不等于") ......

但是大多数语法实际上比关系运算符(例如Not)更紧密地绑定=运算符,产生可能是实际解释的内容,没有语法错误:

 If (Not Val.Value) = False Then

... (换句话说,"如果Val.Value !")

编译器判断您的语句在语法和语义上是正确的,"事实上它是。但你所写的解释可能不是你想象的那样。如果您包含上面显示的括号,则会删除所有歧义。

  • 如果您希望"不等于" 始终,请使用相应的运算符。
  • 使用逻辑运算符时,请充分使用括号,使编制者和其他人都明白您的意图。

奇怪的是,这种问题导致了我写过的第一个程序中的一个错误:#6;长达6行,花了我6个月的时间来编写(在BASIC中)对于分时计算机,现在多久以前没关系,并且有一个错误。"