1004:尝试检查单元格内容时应用程序定义的错误

时间:2014-02-19 13:18:48

标签: excel vba excel-vba

我正在尝试遍历工作表中的行,将当前行的单元格B-F添加到要复制到另一个工作表的范围。如果列G中的值为“活动”且列C中的值具有值(非空/无/空/!#VALUE ...),则行(BF)中的单元格应仅添加到范围中

我已经尝试了几种方法,但我不断获得1004:第一个If语句中的应用程序/对象定义错误

msgbox向我显示范围是有效的,我已尝试限定最细微的细节,并使用Cells()而不是.range无济于事。

MsgBox (ActiveWorkbook.Worksheets("Staging").range("G" & Cells(rows.Count, 5).End(xlUp).Row).Value)

For i = Cells(rows.Count, 5).End(xlUp).Row To i = 1 Step -1
    If ActiveWorkbook.Worksheets("Staging").Cells("G" & i).Value = "Active" Then
        If Not IsError(ActiveWorkbook.Worksheets("Staging").range("C" & i)) Then
            Set selectRange = range("B" & i & ":F" & i)
            Set copyRange = Union2(copyRange, selectRange)
        Else
        'Do Nothing
        End If
    Else
        'Do Nothing
    End If
Next

我在这里错过了一些简单的东西吗?我几个小时以来一直在敲打这个问题。

...对于你的老鹰眼睛,Union2不是一个错字,只是一个用户定义的函数,以避免无法加入设置为“Nothing”的范围

4 个答案:

答案 0 :(得分:0)

开始改变:

If ActiveWorkbook.Worksheets("Staging").Cells("G" & i).Value = "Active" Then

If ActiveWorkbook.Worksheets("Staging").Range("G" & i).Value = "Active" Then

If ActiveWorkbook.Worksheets("Staging").Cells(i , 7).Value = "Active" Then

您还需要完全限定所有范围,因为您的范围很多指向活动工作表而不是“暂存”除非它是活动工作表,但只是为了确保您应该使用以下代码:

With ActiveWorkbook.Worksheets("Staging")
MsgBox (.Range("G" & .Cells(.Rows.Count, 5).End(xlUp).Row).Value)

For i = .Cells(.Rows.Count, 5).End(xlUp).Row To 1 Step -1
    If .Range("G" & i).Value = "Active" Then
        If Not IsError(.Range("C" & i)) Then
            Set SelectRange = .Range("B" & i & ":F" & i)
            Set copyRange = Union(copyRange, SelectRange)
        Else
        'Do Nothing
        End If
    Else
        'Do Nothing
    End If
Next
End With

此外,您在此范围内使用copyRange而未声明它,我假设您将其分配给代码中较早的范围,但如果不是,请确保执行此操作。

答案 1 :(得分:0)

尝试以下方法:

  1. 将第二行更改为

    For i = Cells(rows.Count, 5).End(xlUp).Row To 1 Step -1

  2. 将第三行更改为

    If ActiveWorkbook.Worksheets("Staging").Range("G" & i).Value = "Active" Then

答案 2 :(得分:0)

这是错误的:

ActiveWorkbook.Worksheets("Staging").Cells("G" & i).Value

你可以使用这些:

ActiveWorkbook.Worksheets("Staging").Cells(i, 6)

ActiveWorkbook.Worksheets("Staging").range(cells(i, 6), cells(i, 6)).value

ActiveWorkbook.Worksheets("Staging").range("G" + strings.trim(str(i))).value

答案 3 :(得分:0)

我遇到以下错误:

enter image description here

转到首页->选择要获取错误的单元格->使用清除所有功能清除方法。

我再次执行了脚本,它开始正常运行。

enter image description here