在For Each循环内调用函数时运行时错误1004

时间:2015-08-25 17:37:25

标签: excel excel-vba vba

我有一个功能,可以在特定范围内找到任何粗体字。在下面的每个循环中调用此函数。它的当前设置方式如果粗体字存在于范围内的任何位置,则返回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

该功能仅在本身调用时有效,但在我尝试以这种方式调用时无效。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如我的评论中提到的那样,您的代码会有一些问题。

  • 变量i,如果在此循环之前未声明,将在运行时标注为Range对象,而不是保存单元格地址的字符串,因为您似乎将其用作< / LI>
  • 相关,i稍后在Boolean对象
  • 时被用作Range
  • 每个For..应该只有一个Next,如果您尝试运行它,您的代码会抛出Next without For错误

首先,将i声明为Range对象,然后将其传递给您的函数,就像FindBoldCharacters(i)一样(这在您的函数声明中是有道理的,您说您期望aCell 1}}作为Range

其次,直接在If语句中评估函数

最后,将Next iIf语句中移出。

这样的事情:

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