VBA Excel中的运行时错误
我正在比较我的工作表中包含日期的两列D和E。 列E有日期,有时没有日期,有时行中有X。我得到一个运行时错误 类型不匹配 有人能告诉我我的代码有什么问题吗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
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