VBA Excel中的运行时错误

VBA Excel中的运行时错误,vba,excel,Vba,Excel,我正在比较我的工作表中包含日期的两列D和E。 列E有日期,有时没有日期,有时行中有X。我得到一个运行时错误 类型不匹配 有人能告诉我我的代码有什么问题吗 Sub datecompare() Dim ws As Worksheet Dim lRow As Long, i As Long Dim zWeeks As Double, zcolour As Long Dim Ztext As String Set ws = S

我正在比较我的工作表中包含日期的两列D和E。 列E有日期,有时没有日期,有时行中有X。我得到一个运行时错误

类型不匹配

有人能告诉我我的代码有什么问题吗

Sub datecompare()

    Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Dim zWeeks As Double, zcolour As Long                 
    Dim Ztext As String

    Set ws = Sheets("Preparation Sheet")

    With ws
        lRow = .range("D" & .Rows.Count).End(xlUp).Row    
        For i = 2 To lRow
            zWeeks = DateDiff("ww", .range("E" & i).Value, .range("D" & i).Value)    
            If .range("A" & i).Value <> "" And .range("B" & i).Value <> "" And .range("E" & i).Value = "" Then
                Ztext = "remaining"
                zcolour = vbYellow
                Cells(i, 7) = "Yellow"
            ElseIf .range("B" & i).Value = "" And .range("E" & i).Value = "" Then
                GoTo nextrow
            ElseIf zWeeks < 4 Then
                Ztext = " on time"
                zcolour = vbGreen
                Cells(i, 7) = "Green"
            ElseIf zWeeks > 8 Then
                Ztext = " delayed"
                zcolour = vbRed
                Cells(i, 7) = "Red"
            ElseIf zWeeks > 4 < 8 Then
                Ztext = "remaining"
                zcolour = vbYellow
                Cells(i, 7) = "Yellow"
            End If

            With .range("F" & i)
                .Value = Ztext
                .Interior.Color = zcolour
            End With
nextrow:
        Next i
    End With

End Sub
Sub-datecompare()
将ws设置为工作表
朦胧如长,我如长
暗淡的Z周为双倍,Z色为长
将Ztext设置为字符串
设置ws=工作表(“准备工作表”)
与ws
lRow=.range(“D”和.Rows.Count).End(xlUp).Row
对于i=2至lRow
zWeeks=DateDiff(“ww”、.range(“E”&i).Value、.range(“D”&i).Value)
如果.range(“A”&i).Value”和.range(“B”&i).Value”和.range(“E”&i).Value=”“,则
Ztext=“剩余”
zcolour=vbYellow
单元格(i,7)=“黄色”
ElseIf.range(“B”&i).Value=”“和.range(“E”&i).Value=”“然后
下一站
否则,周数<4周
Ztext=“准时”
zcolour=vbGreen
单元格(i,7)=“绿色”
如果超过8周
Ztext=“延迟”
zcolour=vbRed
单元格(i,7)=“红色”
如果超过4周<8周
Ztext=“剩余”
zcolour=vbYellow
单元格(i,7)=“黄色”
如果结束
带.range(“F”和i)
.Value=Ztext
.Interior.Color=zcolour
以
下一步:
接下来我
以
端接头
错误发生在
GoTo nextrow


它跳转到下一个,而不运行中间代码

我想,代码应该是这样的

Sub datecompare()

    Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Dim zWeeks As Double, zcolour As Long
    Dim Ztext As String

    Set ws = Sheets("Preparation Sheet")
    'Cells.Interior.Color = xlNone
    With ws
        lRow = .Range("D" & .Rows.Count).End(xlUp).Row
        For i = 2 To lRow
            If IsDate(.Range("E" & i).Value) And IsDate(.Range("D" & i).Value) Then
            Else
                GoTo nextrow
            End If
            zWeeks = DateDiff("ww", .Range("E" & i).Value, .Range("D" & i).Value)
            If .Range("A" & i).Value <> "" And .Range("B" & i).Value <> "" And .Range("E" & i).Value = "" Then
                Ztext = "remaining"
                zcolour = vbYellow
                Cells(i, 7) = "Yellow"

            Else '<~~ .Range("A" & i).Value <> "" And .Range("B" & i).Value <> "" And .Range("E" & i).Value = ""  true or false , this is false
                If .Range("B" & i).Value = "" And .Range("E" & i).Value = "" Then
                    GoTo nextrow
                Else '<~~ .Range("B" & i).Value = "" And .Range("E" & i).Value = "" Then  true or false, this is false
                    '<~~ When the result is false,  after code applied
                    If zWeeks < 4 Then
                        Ztext = " on time"
                        zcolour = vbGreen
                        Cells(i, 7) = "Green"
                    ElseIf zWeeks > 8 Then
                        Ztext = " delayed"
                        zcolour = vbRed
                        Cells(i, 7) = "Red"
                    ElseIf zWeeks >= 4 And zWeeks <= 8 Then
                        Ztext = "remaining"
                        zcolour = vbYellow
                        Cells(i, 7) = "Yellow"
                    End If
                End If
            End If
            With .Range("F" & i)
                .Value = Ztext
                .Interior.Color = zcolour
            End With
nextrow:
        Next i
    End With

End Sub
Sub-datecompare()
将ws设置为工作表
朦胧如长,我如长
暗淡的Z周为双倍,Z色为长
将Ztext设置为字符串
设置ws=工作表(“准备工作表”)
'Cells.Interior.Color=xlNone
与ws
lRow=.Range(“D”和.Rows.Count).End(xlUp).Row
对于i=2至lRow
如果是IsDate(.Range(“E”&i).Value)和IsDate(.Range(“D”&i).Value),则
其他的
下一站
如果结束
zWeeks=DateDiff(“ww”、.Range(“E”&i).Value、.Range(“D”&i).Value)
如果.Range(“A”&i).Value”和.Range(“B”&i).Value”和.Range(“E”&i).Value=”“,则
Ztext=“剩余”
zcolour=vbYellow
单元格(i,7)=“黄色”

Else'=4和zWeeks,因为这是您指示代码执行的操作,如果条件
ElseIf.range(“B”&i).Value=“”和.range(“E”&i).Value=“”,则满足
,然后直接转到底部的
nextrow:
,然后直接转到
下一个i
。顺便说一句,
With ws
语句中的所有对象都需要获得前缀
,比如
单元格(i,7)=“黄色”
应该是
。单元格(i,7)=“黄色”
@shairadoya,我同意,如果列B和E为空,那么它将转到下一行。根据我的密码。当我研究这个运行时错误时,它说有可能数据类型被错误声明。另外,当我删除E列中的X时,我没有发现这个错误。你的E列比D列早几天吗?在极少数情况下,ya@Dy.lee我认为应该是“zWeeks=DateDiff”(“ww”),.range(“D”&i).Value、.range(“E”&i).Value)”你能强调一下这些变化,它们的原因,以及最初的代码出了什么问题吗?@A.S.H:我是英语新手。所以这对我来说很难。@Dy.Lee上述建议的解决方案,解决我的问题'@Mikz:your“ElseIf zWeeks>4<8 Then”发生错误。它应该是“ElseIf zWeeks>=4和zWeeks