我正在尝试遍历工作表中的行,将当前行的单元格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”的范围
答案 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)
尝试以下方法:
将第二行更改为
For i = Cells(rows.Count, 5).End(xlUp).Row To 1 Step -1
将第三行更改为
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)