在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的。

  • variablesi ,如果在这个循环之前未声明,将在运行时将其作为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