在For Each循环中调用函数时运行时错误1004
我有一个function,可以查找特定范围内的任何粗体字。 这个函数在下面的每个循环中被调用。 当前设置的方式,如果粗体字存在于范围的任何位置,则返回true;如果范围内没有粗体字,则返回false。 我想要做的就是让它停下来,当它发现了大胆的话,所以我可以做一些其他的行动,然后继续在列表中。 我正在考虑按照这些方法做一些事情,但是在第二行中会出现错误
dim i as range set i = range("C11:C6000") for each i in range("C11:C6000") FindBoldCharacters(Range(i)) 'throws "run time error 1004 application or object defined error" here if i = true then 'do some stuff here' else end if next i
这里是这段代码正在调用的函数
Function FindBoldCharacters(ByVal aCell As Range) As Boolean FindBoldCharacters = IsNull(aCell.Font.Bold) If Not FindBoldCharacters Then FindBoldCharacters = aCell.Font.Bold End Function
这个函数在自己调用的时候起作用,但是当我试图用这种方式调用它的时候不起作用。 我能做些什么来解决这个问题?
正如我的评论中提到的那样,你的代码中有几件事情是closures的。
- variables
i
,如果在这个循环之前未声明,将在运行时将其作为Range
对象进行Range
,而不是保存单元格地址的string,因为您似乎将其用作 - 相关的,当它是一个
Range
对象时,i
以后被用作Boolean
- 每个
For..
应该只有一个Next
,如果你尝试运行它,你的代码将会抛出一个Next without For
错误
首先,将i
声明为一个Range
对象,然后像FindBoldCharacters(i)
一样将它传递给你的函数(这在你的函数声明中是有道理的,你说你期望aCell
作为一个Range
)
其次,在If
语句中直接评估函数
最后,从If
语句之外移动Next i
。
像这样的东西:
Option Explicit Sub Test() Dim i As Range For Each i In Range("C11:C6000") If FindBoldCharacters(i) = True Then 'do some stuff here' Else End If Next i End Sub