运行时错误添加方法VBA

我的函数的意图在文档string中解释。 但是,当我运行它时,出现“运行时错误”91:“对象variables或块variables未设置”,并且会突出显示一行代码,如下所示。 我找不到这个问题的根源,特别是因为我对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 

假设你的工作表看起来像这样

在这里输入图像说明

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

在这里输入图像说明

除了我的评论,看看这个

语法是col.add“Item”,“Key” 。 关键必须是独一无二的。 如果你有重复的值,然后按照我的build议使用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 

Dim Val As Variant更改为Dim Val As Range

另外,要注意 这个小“潜在的语言怪异”… (用任何语言)

当你写道:

 If Not Val.Value = False Then 

那么你毫无疑问打算说:( 注意括号,小心……)

  If Not (Val.Value = False) Then 

(换句话说,“不等于”)

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

  If (Not Val.Value) = False Then 

(换句话说,“如果Val.Value真的 !”)

编译器判断你的语句是“语法上和语义上正确的”,实际上是这样。 但是它对你写的内容的解释可能不是你以为的那样。 如果如上所示包含括号,则所有含糊不清的内容将被删除。

  • 如果你想“不等于”总是使用适当的操作符。
  • 使用逻辑运算符时,大量使用括号可以使编译器和其他人的意图清晰。

奇怪的是,这样的问题导致了我写的第一个程序中的一个错误:“这是6行,我花了6个月的时间来写(在BASIC中分时计算机,不知道现在多久)有一个bug。“