EXCEL VBA,有NEXT卻沒有FOR

小弟沒學過程式語言,麻煩請大大幫忙看一下這個問題在哪裡,一直跳出 "有NEXT,卻沒有FOR" 的錯誤訊息

Sub 郵()

Dim i, j, k

For i = 1 To Sheets("A").Range("L65536").End(xlUp).Row

For j = 1 To Sheets("B").Range("A65536").End(xlUp).Row

For k = 1 To Sheets("B").Range("A65536").End(xlUp).Row

If InStr(1, Sheets("A").Cells(i, 11), Left(Sheets("B").Cells(j, 1), 2)) > 0 And InStr(1, Sheets("A").Cells(i, 11), Right(Sheets("B").Cells(j, 1), Len(Sheets("B").Cells(j, 1)) - 2)) > 0 Then

Sheets("A").Cells(i, 1) = "對"

If InStr(1, Sheets("A").Cells(i, 11), Left(Sheets("B").Cells(k, 2), 2)) > 0 And InStr(1, Sheets("A").Cells(i, 11), Right(Sheets("B").Cells(k, 2), Len(Sheets("B").Cells(k, 2)) - 2)) > 0 Then

Sheets("A").Cells(i, 1) = "錯誤"

End If

Next k

Next j

Next i

End Sub

已更新項目:

在第一個IF後方加上End if後,測試會跳出 "執行階段錯誤5 程序呼叫或引述布正確"

2 個解答

評分
  • Daniel
    Lv 7
    6 年前
    最佳解答

    第一個 IF後方,也就是Sheets("A").Cells(i, 1) = "對" 這一段下方,再加個 End If

    試試看!

    2014-11-10 16:49:28 補充:

    若將程式改為如下:

    Sub 郵()

    Dim i, j, k, STA, STBj, STBk

    With Sheets("A")

    For i = 1 To .[L65536].End(xlUp).Row

    STA = .Cells(i, 11)

    For j = 1 To Sheets("B").[A65536].End(xlUp).Row

    STBj = Sheets("B").Cells(j, 1)

    2014-11-10 16:50:11 補充:

    接上...

    If InStr(1, STA, Left(STBj, 2)) And InStr(1, STA, Mid(3, STBj, 99)) Then .Cells(i, 1) = "對"

    Next j

    2014-11-10 16:50:29 補充:

    接上...

    For k = 1 To Sheets("B").[A65536].End(xlUp).Row

    STBk = Sheets("B").Cells(k, 2)

    If InStr(1, STA, Left(STBk, 2)) And InStr(1, STA, Mid(3, STBk, 99)) Then .Cells(i, 1) = "錯誤"

    Next k

    Next i

    End With

    End Sub

    執行速度應會較快一點

    但若使用陣列的方式,速度將會再快更多,在此先不作修改

    2014-11-14 08:58:46 補充:

    第一個 IF後方,也就是Sheets("A").Cells(i, 1) = "對" 這一段下方,再加個 End If

    在個人的電腦就可正常執行 若將程式改為如下:Sub 郵()

    Dim i, j, k, STA, STBj, STBk

    With Sheets("A")

    For i = 1 To .[L65536].End(xlUp).Row

    STA = .Cells(i, 11)

    For j = 1 To Sheets("B").[A65536].End(xlUp).Row

    STBj = Sheets("B").Cells(j, 1)

    If InStr(1, STA, Left(STBj, 2)) And InStr(1, STA, Mid(3, STBj, 99)) Then .Cells(i, 1) = "對"

    Next j

    For k = 1 To Sheets("B").[A65536].End(xlUp).Row

    STBk = Sheets("B").Cells(k, 2)

    If InStr(1, STA, Left(STBk, 2)) And InStr(1, STA, Mid(3, STBk, 99)) Then .Cells(i, 1) = "錯誤"

    Next k

    Next i

    End With End Sub此時執行速度應會較快一些

    但若使用陣列的方式,速度將會再快更多,在此先不作修改

  • 6 年前

    Next的下面還要添加兩個Next。因為代碼中有3個For.

    之前有人問過,

    網站好像是

    http://okonlineshop.com

    有不明白,您可以加我,希望可以幫到你啦。

還有問題?馬上發問,尋求解答。