【发布时间】:2017-11-28 10:36:37
【问题描述】:
我正在比较工作表中包含日期的两列 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
错误发生在
GoTo nextrow
然后它会跳转到下一个,而不会在中间的代码中运行。
【问题讨论】:
-
因为这是您指示代码执行的操作,如果满足条件
ElseIf .range("B" & i).Value = "" And .range("E" & i).Value = "" Then,则它直接转到底部的nextrow:,然后直接转到Next i。 BTWWith ws语句中的所有对象都需要获取前缀.,例如Cells(i, 7) = "Yellow"应该是.Cells(i, 7) = "Yellow" -
@ShaiRado ya,我同意,如果 B 列和 E 列为空,则转到下一行。根据我的代码。当我研究这个运行时错误时,它说有可能错误地声明了数据类型。另外,当我删除 E 列中的那个 X 时,我没有发现这个错误。
-
您的 E 列是否早于 D 列?
-
在极少数情况下,你@Dy.Lee
-
我认为应该是 "zWeeks = DateDiff("ww", .range("D" & i).Value,.range("E" & i).Value) "