【问题标题】:Runtime error in VBA ExcelVBA Excel 中的运行时错误
【发布时间】: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" &amp; i).Value = "" And .range("E" &amp; i).Value = "" Then,则它直接转到底部的nextrow:,然后直接转到Next iBTW With 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) "

标签: vba excel


【解决方案1】:

我想,代码会是这样的。

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

【讨论】:

  • 您能否突出显示更改、更改原因以及初始代码出了什么问题?
  • @A.S.H:我是英语新手。所以这对我来说很难。
  • @Dy.Lee 以上建议的解决方案,力求解决我的问题'
  • @Mikz:您的“ElseIf zWeeks > 4 = 4 And zWeeks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多