Lỗi Else without if. Cần mọi người chỉ dẫn. Em xin cảm ơn!!! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vunt0990

Thành viên mới
Tham gia
28/2/16
Bài viết
7
Được thích
0
Dim j As Integer
Dim k As Integer

For j = 2 To Range("L1:L999").Rows.Count

If Range("L" & j) <= 100 And Range("L" & j) <> "" Then
Sheet4.Range("L" & j) = 100
For k = 250 To k = 2000 Step 250
ElseIf Range("L" & j) <= k And Range("L" & j) <> "" Then
Sheet4.Range("L" & j) = k
Next k
Else
Sheet4.Range("L" & j) = "ch?a hi?u"
End If

Next j
 
Muốn hết lỗi, bạn vô hiệu hóa dòng lệnh có mang kí số :
PHP:
Sub DangLoi()
Dim J As Integer, K As Integer

For J = 2 To Range("L1:L999").Rows.Count
    If Range("L" & J) <= 100 And Range("L" & J) <> "" Then
        Sheet4.Range("L" & J) = 100
        For K = 250 To  2000 Step 250     '**'
3   ElseIf Range("L" & J) <= K And Range("L" & J) <> "" Then
        Sheet4.Range("L" & J) = K
        Next K
    Else
        Sheet4.Range("L" & J) = "ch?a hi?u"
    End If
Next J
End Sub

Còn macro có đúng ý bạn không đó là chuyện hoàn toàn khác.
 
Toàn bộ khối For ... Next phải nằm trọn trong nhánh IF, hoặc nhánh ELSEIF, hoặc nhánh ELSE. Không thể có chuyện khối IF... END IF và khối FOR ... NEXT đan xen nhau được.

Nếu tôi đoán đúng thì code phải như sau (tôi không tối ưu mà chỉ "đưa khối FOR ... NEXT vào nhánh thích hợp)
Mã:
Sub test()
Dim j As Integer
Dim k As Integer
    For j = 2 To Range("L1:L999").Rows.Count
        If Range("L" & j) <= 100 And Range("L" & j) <> "" Then
            Sheet4.Range("L" & j) = 100
        ElseIf Range("L" & j) <= 2000 And Range("L" & j) <> "" Then
            For k = 250 To 2000 Step 250
                If Range("L" & j) <= k Then
                    Sheet4.Range("L" & j) = k
                    Exit For
                End If
            Next k
        Else
            Sheet4.Range("L" & j) = "ch?a hi?u"
        End If
    Next j
End Sub
Bài đã được tự động gộp:

Muốn hết lỗi, bạn vô hiệu hóa dòng lệnh có mang kí số :
PHP:
Sub DangLoi()
Dim J As Integer, K As Integer

For J = 2 To Range("L1:L999").Rows.Count
    If Range("L" & J) <= 100 And Range("L" & J) <> "" Then
        Sheet4.Range("L" & J) = 100
        For K = 250 To  2000 Step 250     '**'
3   ElseIf Range("L" & J) <= K And Range("L" & J) <> "" Then
        Sheet4.Range("L" & J) = K
        Next K
    Else
        Sheet4.Range("L" & J) = "ch?a hi?u"
    End If
Next J
End Sub

Còn macro có đúng ý bạn không đó là chuyện hoàn toàn khác.
Nếu code trên đúng ý thì có thể rút gọn thành
Mã:
Sub DangLoi()
Dim J As Integer, K As Integer

For J = 2 To Range("L1:L999").Rows.Count
    If Range("L" & J) <= 100 And Range("L" & J) <> "" Then
        Sheet4.Range("L" & J) = 2000
    Else
        Sheet4.Range("L" & J) = "ch?a hi?u"
    End If
Next J
End Sub
 
Cảm ơn 2 bác đã giúp đỡ. Bác batman1 đã giải quyết vấn đề của e. Nhưng có cách nào tối ưu đoạn code này được k bác?
Sub test()
Dim j As Integer
Dim k As Integer
For j = 2 To Range("L1:L999").Rows.Count
If Range("L" & j) <= 100 And Range("L" & j) <> "" Then
Sheet4.Range("L" & j) = 100
ElseIf Range("L" & j) <= 2000 And Range("L" & j) <> "" Then
For k = 250 To 2000 Step 250
If Range("L" & j) <= k Then
Sheet4.Range("L" & j) = k
Exit For
End If
Next k
Else
Sheet4.Range("L" & j) = "ch?a hi?u"
End If
Next j
End Sub
 
Cảm ơn 2 bác đã giúp đỡ. Bác batman1 đã giải quyết vấn đề của e. Nhưng có cách nào tối ưu đoạn code này được k bác?
Sub test()
Dim j As Integer
Dim k As Integer
For j = 2 To Range("L1:L999").Rows.Count
If Range("L" & j) <= 100 And Range("L" & j) <> "" Then
Sheet4.Range("L" & j) = 100
ElseIf Range("L" & j) <= 2000 And Range("L" & j) <> "" Then
For k = 250 To 2000 Step 250
If Range("L" & j) <= k Then
Sheet4.Range("L" & j) = k
Exit For
End If
Next k
Else
Sheet4.Range("L" & j) = "ch?a hi?u"
End If
Next j
End Sub
Bạn nói tối ưu ai biết bạn làm gì mà tối ưu.Ít ra cũng đưa cái file lên rồi nói yêu cầu ra chứ.
 
Bạn nói tối ưu ai biết bạn làm gì mà tối ưu.Ít ra cũng đưa cái file lên rồi nói yêu cầu ra chứ.
Ý e là bác batman1 có nói chỉ đưa khối For...Next vào nhánh cho thích hợp chứ không tối ưu code. Vậy đoạn đó có thể tối ưu được nữa k? Cảm ơn bác đã quan tâm. Mong bác chỉ giúp e!
 
Ý e là bác batman1 có nói chỉ đưa khối For...Next vào nhánh cho thích hợp chứ không tối ưu code. Vậy đoạn đó có thể tối ưu được nữa k? Cảm ơn bác đã quan tâm. Mong bác chỉ giúp e!
Bạn chưa đưa ý kiến của bạn lên thì làm sao mà biết được có tối ưu được không.Vì mình đọc code của bạn cũng không hiểu bạn muốn làm gì à.
 
Cảm ơn 2 bác đã giúp đỡ. Bác batman1 đã giải quyết vấn đề của e. Nhưng có cách nào tối ưu đoạn code này được k bác?
Thực ra For chỉ chạy nhiều nhất là 8 vòng nên tối ưu cũng chả được là bao. Tất nhiên có thể bỏ For
Mã:
Sub test()
Dim j As Integer
Dim k As Integer, a
    For j = 2 To Range("L1:L999").Rows.Count
        If Range("L" & j) <= 100 And Range("L" & j) <> "" Then
            Sheet4.Range("L" & j) = 100
        ElseIf Range("L" & j) <= 2000 And Range("L" & j) <> "" Then
            a = Sheet4.Range("L" & j) Mod 250
            If a Then Sheet4.Range("L" & j) = Sheet4.Range("L" & j) - a + 250
        Else
            Sheet4.Range("L" & j) = "ch?a hi?u"
        End If
    Next j
End Sub
Nhưng theo tôi dùng For đơn giản, không phải suy nghĩ nhiều vì nó hiển nhiên. "Cái kia" để hiểu thì phải phân tích chút.
 
Bạn chưa đưa ý kiến của bạn lên thì làm sao mà biết được có tối ưu được không.Vì mình đọc code của bạn cũng không hiểu bạn muốn làm gì à.
Theo tôi thì chính chỗ đó là chỗ cần "tối ưu".
Tuy nhiên, đó không phải là ý chung của các bạn trên diễn đàn này.
 
Ý e là bác batman1 có nói chỉ đưa khối For...Next vào nhánh cho thích hợp chứ không tối ưu code. Vậy đoạn đó có thể tối ưu được nữa k? Cảm ơn bác đã quan tâm. Mong bác chỉ giúp e!
Như bác batman1 nói trên for chạy có 8 lần tối ưu không được gì, nhưng bạn thử đặt
Exit For
vào chỗ nào đó muốn tối ưu, thử test xem có tối ưu không (tối ưu ở đây theo nghĩa của nhiều thành viên diễn đàn mong muốn là nhanh hơn nhanh hơn nữa)
 
Em hiểu ý các bác rồi.
Vấn đề của em đã được giải quyết.
Cảm ơn các bác đã hỗ trợ :)
 
Web KT

Bài viết mới nhất

Back
Top Bottom