Excel 如何修复VBA错误消息运行时错误';1004';应用程序定义或对象定义错误

Excel 如何修复VBA错误消息运行时错误';1004';应用程序定义或对象定义错误,excel,vba,Excel,Vba,我有以下代码使一列根据其他两列的条目显示所需的状态 下面是代码 另外,有谁能向我解释一下,在2个代码子比较2()和公共子单次更改(更改单元格作为范围)中重复这些条件有什么意义?这个代码是由我公司的一名实习生开发的。对我来说,使用第一个而不是第二个代码是有意义的 Excel不断突出显示公共子单元更改(更改单元格作为范围)以显示错误消息: 编译错误:循环不带Do,否则不带If 然后在那个错误之后,我在Set sales\u cell=changed\u cell.Offset(,-1)上得到了另一个

我有以下代码使一列根据其他两列的条目显示所需的状态

下面是代码

另外,有谁能向我解释一下,在2个代码
子比较2()
公共子单次更改(更改单元格作为范围)中重复这些条件有什么意义?这个代码是由我公司的一名实习生开发的。对我来说,使用第一个而不是第二个代码是有意义的

Excel不断突出显示
公共子单元更改(更改单元格作为范围)
以显示错误消息:

编译错误:循环不带Do,否则不带If

然后在那个错误之后,我在
Set sales\u cell=changed\u cell.Offset(,-1)
上得到了另一个错误:

应用程序定义或对象定义错误

谢谢

Sub compare2()

Dim i As Long
Dim A As Long
Dim B As Long
Dim c As Long

A = 14
B = 15
c = 16

Do While A <= 42
    i = 2
    Do Until Len(Cells(i, A)) = 0

        If Cells(i, A) = "Rollup" And Cells(i, B) = "Green" Then
        Cells(i, c) = "Green"

        ElseIf Cells(i, A) = "Rollup" And Cells(i, B) = "Yellow" Then
        Cells(i, c) = "Yellow"

        ElseIf Cells(i, A) = "Rollup" And Cells(i, B) = "Red" Then
        Cells(i, c) = "Red"

        ElseIf Cells(i, A) = "Rollup" And Cells(i, B) = "Overdue" Then
        Cells(i, c) = "Overdue"

        ElseIf Cells(i, A) = "Rollup" And Cells(i, B) = "Rollup" Then
        Cells(i, c) = "Rollup"

Else        

End If

i = i + 1

Loop

A = A + 4
B = A + 1
c = A + 2

Loop

End Sub
子比较2()
我想我会坚持多久
暗淡如长
暗B一样长
尺寸c与长度相同
A=14
B=15
c=16

当A不需要那么多
时,如果
s:

If Cells(i, A) = "Rollup" then
    Cells(i, c).value = Cells(i, B).value
End if 
同样地:

If sales_cell = "Rollup" then
    day_cell.value = production_cell.value
End if
选择案例
可能是更好的选择:

Select case sales_cell.value
    Case "Rollup"
        day_cell.value = production_cell.value
    Case "Green"
        if Production_cell.value  = "Overdue" then Cells(i, c).value = Production_cell.value  
End Select

如果正确,您将看到您缺少一个
结束If
,或者最后一个
结束If
应该是
ElseIf
@ScottCraner嗨,您能告诉我在哪里放置
结束If
谢谢!!!您在第二个代码上的最后一个
If
应该是
ElseIf
。感谢您的建议,但我相信不能这样使用它,因为有时我会遇到诸如Sales\u cell=Green,Production\u cell=Overside之类的情况,然后状态是Cells(I,c)将过期,在这些情况下,逐案处理
Select case
可能是更好的选择。请参见编辑我的答案,
Select case sales_cell.value
    Case "Rollup"
        day_cell.value = production_cell.value
    Case "Green"
        if Production_cell.value  = "Overdue" then Cells(i, c).value = Production_cell.value  
End Select