运行时错误添加方法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。“