【问题标题】:Next without For error using if statementsNext 使用 if 语句没有 For 错误
【发布时间】:2018-01-14 14:28:22
【问题描述】:

我收到一个编译错误Next without For,我不知道为什么。这也是我第一次尝试我需要的这段特定代码,有人知道我的**/01/** 搜索是否实际上只搜索日期字段中的“月份”?

下面是我的代码。

Private Sub LeaveDateCheck()

Dim wstSource As Worksheet, _
        wstOutput As Worksheet
    Dim rngCell As Range, _
        rngMyData As Range
    Dim lngMyRow As Long
    Dim Usdrws As Long, LastRow As Long


    'Call AddLeaveDateTable

    Usdrws = Worksheets("EeeDetails").Range("A" & Rows.Count).End(xlUp).Row

    Worksheets("EeeDetails").Range("AB2:AB" & Usdrws).FormulaR1C1 = "=iferror(vlookup(RC[-2],LeaveDate!C[-27]:C[-26],2,False),RC[-2])"

    Worksheets("EeeDetails").Range("AB:AB").NumberFormat = "dd/mm/yyyy"


    Set wstSource = Worksheets("EeeDetails") 'Tab containing source data. Change to suit.
    Set wstOutput = Worksheets("Errors") 'Tab for output (duplicate) data. Change to suit.
    Set rngMyData = wstSource.Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) 'Column range to check for duplicates. Change to suit.

    Application.ScreenUpdating = False

    For Each rngCell In rngMyData
        rownumber = Split(rngCell.Address, "$")(2)
        LeaveDate = Worksheets("EeeDetails").Range("Y" & rownumber).Value
        LastPayDate = Worksheets("EeeDetails").Range("AB" & rownumber).Value

        lngMyRow = wstOutput.Cells(Rows.Count, "A").End(xlUp).Row + 1

            If LeaveDate <> "" Then
                If LastPayDate <> "" Then
                    If LastPayDate <> "**/**/**" Then
                        If LastPayDate = "Wk 5" Then
                            If LeaveDate = "**/04/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/05/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 9" Then
                            If LeaveDate = "**/05/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/06/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 13" Then
                            If LeaveDate = "**/06/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/07/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 14" Then
                            If LeaveDate = "**/06/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/07/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 18" Then
                            If LeaveDate = "**/07/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/08/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 22" Then
                            If LeaveDate = "**/08/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/09/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 26" Then
                            If LeaveDate = "**/09/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/10/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 27" Then
                            If LeaveDate = "**/09/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/10/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 31" Then
                            If LeaveDate = "**/10/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/11/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 35" Then
                            If LeaveDate = "**/11/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/12/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 39" Then
                            If LeaveDate = "**/12/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/01/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 40" Then
                            If LeaveDate = "**/12/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/01/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 44" Then
                            If LeaveDate = "**/01/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/02/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                        If LastPayDate = "Wk 48" Then
                            If LeaveDate = "**/02/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                            End If
                            If LeaveDate = "**/03/**" Then
                                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                        End If
                    End If
                    If CDate(LeaveDate) > CDate(LastPayDate) Then
                        Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                        Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                        wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                         Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
                    End If
                End If
            End If

    Next rngCell

End Sub

另外我确信这段代码可以被压缩,我稍后会考虑这样做,只是试图让它现在工作!

【问题讨论】:

    标签: excel vba loops for-loop


    【解决方案1】:

    在评论中写起来有点长而且很难,但基本上你错过了 1 End If 每一对 Ifs。

    例如,如果您正确缩进代码:

    If LastPayDate = "Wk 5" Then
        If LeaveDate = "**/04/**" Then
            Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
            Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
            wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
             Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
        End If
        If LeaveDate = "**/05/**" Then
            Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
            Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
            wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
             Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
        End If
        ' <--- MISSING End If HERE
    
        If LastPayDate = "Wk 9" Then
            If LeaveDate = "**/05/**" Then
                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
            End If
            If LeaveDate = "**/06/**" Then
                Worksheets("EeeDetails").Range(LeaveDate, LastPayDate).Interior.ColorIndex = 3
                Worksheets("EeeDetails").Range("AA" & rownumber).Value = rownumber
                wstSource.Range("A" & rngCell.Row & ":AA" & rngCell.Row).Copy _
                 Destination:=wstOutput.Range("A" & lngMyRow & ":AA" & lngMyRow)
            End If
            ' <--- MISSING End If HERE
    
            ' and so on until the end of your code
    

    建议:尝试使用Select Case LastPayDate,它将帮助您“清理”一些代码。

    【讨论】:

    • 嗨 Shai Rado,我刚刚发现并纠正了它,现在可以正常工作了!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2013-03-22
    • 1970-01-01
    • 2019-01-07
    • 2017-04-28
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多