Sửa lỗi Else Without if (3 người xem)

Liên hệ QC

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

ninhmoon

Thành viên tiêu biểu
Tham gia
3/3/14
Bài viết
525
Được thích
48
Mọi người cho em hỏi lỗi này thì sửa như thế nào?
Compile error:
Else without if




[GPECODE=vb]
Sub Loccodetien()


With ActiveSheet '<=> sheet TongHop
'check cac dieu kien
If .CT131_Khachhang.Value = Empty Or _
.CT131_Tuthang.Value = Empty Or .CT131_Denthang.Value = Empty Then
MsgBox ("Ban chua dien ten doi' tuong va thang' can` loc"), vbExclamation, "Thông báo"
Exit Sub

ElseIf .CT131_Tuthang.Value > .CT131_Denthang.Value Then
MsgBox ("Thang' ke^ khai: Tu` thang' den' thang' chua hop ly'"), vbExclamation
Exit Sub
Else
tendoituong = .CT131_Khachhang.Value
FromThang = .CT131_Tuthang.Value
ToThang = .CT131_Denthang.Value
End If
End With



Application.ScreenUpdating = False
Call Clear_CT131
Call Loc_GiathanhSX
Call locdolamy
Application.ScreenUpdating = True

' If Range("SCT_SLrows") >= 1 Then
' ThisWorkbook.Sheets("CT131").Select
' Range("A8").Select

' Range("SCT_tendoituong") = tendoituong 'SCT_tendoituong la` 1 Name
' Range("SCT_FromThang") = FromThang 'SCT_FromThang la` 1 Name
' Range("SCT_ToThang") = ToThang 'SCT_ToThang la` 1 Name

' Call DoBorder

'Call FindSoDu 'dien` so' du* vao` sheet List 'moi them ngay 5-6-14

'Call Updatesocai331 'moi them ngay 7-6-14


MsgBox ("LocTkco xong"), vbInformation, "Thông báo"
Else
MsgBox "Tkno (131, 1122)" & vbNewLine & _
"Ten doi tuong: " & tendoituong & vbNewLine & _
"Thang' Ke^ Khai: Tu` " & FromThang & " den " & ToThang, vbExclamation, "Ko tim` thay'"
End If

End Sub



[/GPECODE]
 
Mọi người cho em hỏi lỗi này thì sửa như thế nào?
Compile error:
Else without if

Mã:
Sub Loccodetien()


With ActiveSheet '<=> sheet TongHop
'check cac dieu kien
If .CT131_Khachhang.Value = Empty Or _
.CT131_Tuthang.Value = Empty Or .CT131_Denthang.Value = Empty Then
MsgBox ("Ban chua dien ten doi' tuong va thang' can` loc"), vbExclamation, "Thông báo"
Exit Sub

ElseIf .CT131_Tuthang.Value > .CT131_Denthang.Value Then
MsgBox ("Thang' ke^ khai: Tu` thang' den' thang' chua hop ly'"), vbExclamation
Exit Sub
Else
tendoituong = .CT131_Khachhang.Value
FromThang = .CT131_Tuthang.Value
ToThang = .CT131_Denthang.Value
End If
End With



Application.ScreenUpdating = False
Call Clear_CT131
Call Loc_GiathanhSX
Call locdolamy
Application.ScreenUpdating = True

[B][COLOR=#ff0000]' If Range("SCT_SLrows") >= 1 Then[/COLOR][/B]
' ThisWorkbook.Sheets("CT131").Select
' Range("A8").Select

' Range("SCT_tendoituong") = tendoituong 'SCT_tendoituong la` 1 Name
' Range("SCT_FromThang") = FromThang 'SCT_FromThang la` 1 Name
' Range("SCT_ToThang") = ToThang 'SCT_ToThang la` 1 Name

' Call DoBorder

'Call FindSoDu 'dien` so' du* vao` sheet List 'moi them ngay 5-6-14

'Call Updatesocai331 'moi them ngay 7-6-14


MsgBox ("LocTkco xong"), vbInformation, "Thông báo"
[B][COLOR=#ff0000]Else[/COLOR][/B]
MsgBox "Tkno (131, 1122)" & vbNewLine & _
"Ten doi tuong: " & tendoituong & vbNewLine & _
"Thang' Ke^ Khai: Tu` " & FromThang & " den " & ToThang, vbExclamation, "Ko tim` thay'"
[B][COLOR=#ff0000]End If[/COLOR][/B]

End Sub

Chỗ màu đỏ đỏ:

Dòng If trên cùng bạn đã vô hiệu rồi thì dòng else và end if cũng phải vô hiệu chứ. Nếu ko thì máy hiểu là ko có if mà lại có else và end if --> sai cấu trúc --> lỗi
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub Loccodetien()


With ActiveSheet '<=> sheet TongHop
'check cac dieu kien
If .CT131_Khachhang.Value = Empty Or _
.CT131_Tuthang.Value = Empty Or .CT131_Denthang.Value = Empty Then
MsgBox ("Ban chua dien ten doi' tuong va thang' can` loc"), vbExclamation, "Thông báo"
Exit Sub

ElseIf .CT131_Tuthang.Value > .CT131_Denthang.Value Then
MsgBox ("Thang' ke^ khai: Tu` thang' den' thang' chua hop ly'"), vbExclamation
Exit Sub
Else
tendoituong = .CT131_Khachhang.Value
FromThang = .CT131_Tuthang.Value
ToThang = .CT131_Denthang.Value
End If
End With



Application.ScreenUpdating = False
Call Clear_CT131
Call Loc_GiathanhSX
Call locdolamy
Application.ScreenUpdating = True

[B][COLOR=#ff0000]' If Range("SCT_SLrows") >= 1 Then[/COLOR][/B]
' ThisWorkbook.Sheets("CT131").Select
' Range("A8").Select

' Range("SCT_tendoituong") = tendoituong 'SCT_tendoituong la` 1 Name
' Range("SCT_FromThang") = FromThang 'SCT_FromThang la` 1 Name
' Range("SCT_ToThang") = ToThang 'SCT_ToThang la` 1 Name

' Call DoBorder

'Call FindSoDu 'dien` so' du* vao` sheet List 'moi them ngay 5-6-14

'Call Updatesocai331 'moi them ngay 7-6-14


MsgBox ("LocTkco xong"), vbInformation, "Thông báo"
[B][COLOR=#ff0000]Else[/COLOR][/B]
MsgBox "Tkno (131, 1122)" & vbNewLine & _
"Ten doi tuong: " & tendoituong & vbNewLine & _
"Thang' Ke^ Khai: Tu` " & FromThang & " den " & ToThang, vbExclamation, "Ko tim` thay'"
[B][COLOR=#ff0000]End If[/COLOR][/B]

End Sub

Chỗ màu đỏ đỏ:

Dòng If trên cùng bạn đã vô hiệu rồi thì dòng else và end if cũng phải vô hiệu chứ. Nếu ko thì máy hiểu là ko có if mà lại có else và end if --> sai cấu trúc --> lỗi


Nhưng nếu Em không cho dòng If bên trên không hoạt động thì không được
tại dòng code:


[GPECODE=vb]
If .CT131_Khachhang.Value = Empty Or _
.CT131_Tuthang.Value = Empty Or .CT131_Denthang.Value = Empty Then


[/GPECODE]

Nó ảnh hưởng tới dòng code bên dưới:
[GPECODE=vb]
MsgBox "Tkno (131, 1122)" & vbNewLine & _
"Ten doi tuong: " & tendoituong & vbNewLine & _
"Thang' Ke^ Khai: Tu` " & FromThang & " den " & ToThang, vbExclamation, "Ko tim` thay'"
End If



[/GPECODE]
 
Upvote 0
Bạn bỏ dấu nháy đơn đầu câu lệnh sau
Mã:
[COLOR=#ff0000][SIZE=5][B]' [/B][/SIZE][/COLOR]If Range("SCT_SLrows") >= 1 Then
 
Upvote 0
Câu Lệnh đó E ko dùng tới
Thế nào là không dùng bạn?

Trước khi bắt tay vào viết VBA bạn cần hiểu cấu trúc Code, với if thì bắt buộc phải
Mã:
If...........Then
.......
End if
Cái else thì có hay không cũng được, tùy mục đích. Bạn chưa có hiểu về cấu trúc mà đã viết code thì sẽ không biết code chạy theo lối nào.

Bạn nên tìm các bài viết hướng dẫn If trong VBA để hiểu cấu trúc rồi bạn sẽ biết cách sửa code của bạn.
 
Upvote 0
Thế nào là không dùng bạn?

Trước khi bắt tay vào viết VBA bạn cần hiểu cấu trúc Code, với if thì bắt buộc phải
Mã:
If...........Then
.......
End if
Cái else thì có hay không cũng được, tùy mục đích. Bạn chưa có hiểu về cấu trúc mà đã viết code thì sẽ không biết code chạy theo lối nào.

Bạn nên tìm các bài viết hướng dẫn If trong VBA để hiểu cấu trúc rồi bạn sẽ biết cách sửa code của bạn.
Cho em hỏi nó hiện lên dòng code này màu vàng và không chạy đúng theo ý của em làm thế nào ah?
[GPECODE=vb]
If .CT131_Khachhang.Value = Empty Or _
.CT131_Tuthang.Value = Empty Or .CT131_Denthang.Value = Empty Then



[/GPECODE]
 
Upvote 0
[GPECODE=vb]
Dim tendoituong As String, FromThang As Integer, ToThang As Integer


Sub LocTK131()
With ActiveSheet '<=> sheet TongHop
'check cac dieu kien
If .CT131_Khachhang.Value = Empty Or _
.CT131_Tuthang.Value = Empty Or .CT131_Denthang.Value = Empty Then
MsgBox ("Ban chua dien ten doi' tuong va thang' can` loc"), vbExclamation, "Thông báo"
Exit Sub
ElseIf .CT131_Tuthang.Value > .CT131_Denthang.Value Then
MsgBox ("Thang' ke^ khai: Tu` thang' den' thang' chua hop ly'"), vbExclamation
Exit Sub
Else
tendoituong = .CT131_Khachhang.Value
FromThang = .CT131_Tuthang.Value
ToThang = .CT131_Denthang.Value
End If
End With


Application.ScreenUpdating = False
Call Clear_CT131
Call Loc_TKgiathanh
Call Loc_1122NKC
Application.ScreenUpdating = True

If Range("SCT_SLrows") >= 1 Then
ThisWorkbook.Sheets("SoChiTiet").Select
Range("A8").Select

Range("SCT_tendoituong") = tendoituong 'SCT_tendoituong la` 1 Name
Range("SCT_FromThang") = FromThang 'SCT_FromThang la` 1 Name
Range("SCT_ToThang") = ToThang 'SCT_ToThang la` 1 Name

Call DoBorder

Call FindSoDu 'dien` so' du* vao` sheet List 'moi them ngay 5-6-14

Call Updatesocai331 'moi them ngay 7-6-14

MsgBox ("LocTkco xong"), vbInformation, "Thông báo"
Else
MsgBox "Tkco (131, 112206)" & vbNewLine & _
"Ten doi tuong: " & tendoituong & vbNewLine & _
"Thang' Ke^ Khai: Tu` " & FromThang & " den " & ToThang, vbExclamation, "Ko tim` thay'"
End If
End Sub


Sub Clear_CT131()
Dim lngLstRow As Long
With ThisWorkbook.Sheets("CT131")
lngLstRow = .UsedRange.Rows.Count 'de? ko tao ra cac row thua`
'With .Range("A7:L30000") 'old
With .Range("A12:P" & lngLstRow)
.ClearContents
.Borders.LineStyle = xlNone
End With
End With
End Sub
Sub DoBorder()
With Range([A65536].End(xlUp), [A12])
.Borders.LineStyle = xlContinuous
.Borders(xlInsideHorizontal).Weight = xlHairline
End With
End Sub


Sub Loc_TKgiathanh()
Dim vung1(), dArr(), i As Long, K As Long 'ko the tach' i, K len tren de dung` chung


vung1 = Range("tbl_GiathanhSX").Value 'khi dung` Table -> ko can show all row.

ReDim dArr(1 To UBound(vung1, 1), 1 To 16) 'xac dinh kich thuoc mang

For i = 1 To UBound(vung1, 1)
If UCase(vung1(i, 6)) = UCase(tendoituong) Then
If vung1(i, 1) >= FromThang And vung1(i, 1) <= ToThang Then
If vung1(i, 8) = 131 Then
K = K + 1

dArr(K, 1) = vung1(i, 1) 'Moth declara
'dArr(K, 2) = vung1(i, 2) 'Month
'dArr(K, 3) = vung1(i, 3) 'ngay ghi so
'dArr(K, 4) = vung1(i, 4) 'ngay HD
dArr(K, 5) = vung1(i, 3) 'so HD
dArr(K, 6) = vung1(i, 4) 'dien giai
dArr(K, 7) = vung1(i, 7) 'Tk no
dArr(K, 8) = vung1(i, 8) 'N
dArr(K, 9) = vung1(i, 9) 'TK co
dArr(K, 10) = vung1(i, 10) 'C
dArr(K, 11) = vung1(i, 11) 'Amount
dArr(K, 12) = vung1(i, 12)
dArr(K, 13) = vung1(i, 13)
dArr(K, 14) = vung1(i, 14)

' dArr(K, 13) = "=R[-1]C+RC[-2]-RC[-1]" 'Balance
End If
End If
End If
Next i

If K Then
With ThisWorkbook.Sheets("CT131")
.[A12].Resize(K, 16) = dArr
End With

Erase dArr
End If
End Sub


Sub Loc_1122NKC()
Dim vung2(), dArr(), i As Long, K As Long


vung2 = Range("tbl_1122NKC").Value

ReDim dArr(1 To UBound(vung2, 1), 1 To 16) 'xac dinh kich thuoc mang

For i = 1 To UBound(vung2, 1)
If UCase(vung2(i, 6)) = UCase(tendoituong) Then
If vung2(i, 3) >= FromThang And vung2(i, 3) <= ToThang Then
'If vung2(i, 8) = 112106 Or vung2(i, 7) = 112106 Then
If vung2(i, 8) = 131 Then
K = K + 1

dArr(K, 1) = vung2(i, 1) 'Moth declara

dArr(K, 2) = vung2(i, 2) 'Month

dArr(K, 3) = vung2(i, 4) 'ngay ghi so

dArr(K, 4) = vung2(i, 3) 'ngay HD

dArr(K, 7) = vung2(i, 5) 'dien giai

dArr(K, 8) = vung2(i, 7) 'Tk no

dArr(K, 9) = vung2(i, 8)

dArr(K, 15) = vung2(i, 9) 'TK co

' If vung2(i, 7) = 112106 Then
' dArr(K, 11) = vung2(i, 9) 'Paid
'Else
' dArr(K, 12) = vung2(i, 9) 'Paid
' End If

' dArr(K, 13) = "=R[-1]C+RC[-2]-RC[-1]" 'Balance

'dArr(K, 5) = vung2(i, 5) 'so HD

'dArr(K, 8) = vung2(i, 9) 'N

'dArr(K, 10) = vung2(i, 11) 'C

End If
End If
End If
Next i

If K Then
'ua? nho' lan` truoc co' chinh? o? day roi` ma` he`
With ThisWorkbook.Sheets("CT131")
'If .Range("A7") <> "" Then
If .Range("P12") <> "" Then 'luon luon co' (19-6)
.Range("A65536").End(xlUp).Offset(1).Resize(K, 16) = dArr
Else
.[A12].Resize(K, 16) = dArr
End If
End With

Erase dArr
End If
End Sub
[/GPECODE]
Cả mấy đoạn code này em ghi và sửa lại một code cũ sai hết
Vậy nhờ mọi người giúp và sửa hộ Em
 

File đính kèm

Upvote 0
[QUOTE
Cả mấy đoạn code này em ghi và sửa lại một code cũ sai hết
Vậy nhờ mọi người giúp và sửa hộ Em [/QUOTE]

Đoạn này thấy sai luôn rồi:

Mã:
WithActiveSheet '<=> sheet TongHop[COLOR=#000000][FONT=Consolas]        'check cac dieu kien[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]        [COLOR=#ff0000][B]If .CT131_Khachhang.Value = Empty [/B][/COLOR]Or _[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]        .CT131_Tuthang.Value = Empty Or .CT131_Denthang.Value = Empty Then[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]            MsgBox ("Ban chua dien ten doi' tuong va thang' can` loc"), vbExclamation, "Thông báo"[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]            Exit Sub[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]        ElseIf .CT131_Tuthang.Value > .CT131_Denthang.Value Then[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]            MsgBox ("Thang' ke^ khai: Tu` thang' den' thang' chua hop ly'"), vbExclamation[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]            Exit Sub[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]        Else[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]            tendoituong = .CT131_Khachhang.Value[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]            FromThang = .CT131_Tuthang.Value[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]            ToThang = .CT131_Denthang.Value[/FONT][/COLOR]
[COLOR=#000000][FONT=Consolas]        End If[/FONT][/COLOR]
    EndWith

Bạn viết như vậy máy nó ko hiểu đâu.

Như này mới đúng chứ:

Mã:
If[COLOR=#ff0000].Range("CT131_Khachhang").Value = Empty....[/COLOR]

Đấy mới chỉ là 1 lỗi thôi chứ mình thấy trong code của bạn nó sai lung tung xèng, sửa mệt lắm. Tốt nhất bạn giải thích các yêu cầu của bạn và nhờ mọi người viết code mới còn hơn là ngồi đọc mà sửa code của bạn.
 
Upvote 0
Để sửa lỗi này bạn thay dòng
Mã:
' If Range("SCT_SLrows") >= 1 Then[/FONT][/COLOR]
thành
If False Then
Còn kết quả thì không rõ đúng không?
 
Upvote 0
Vâng, chắc thứ hai nhờ mọi người giúp tiếp.Ở nhà mạng kém quá :(
 
Upvote 0
Nhờ mọi người giúp tiếp: với các điều kiện bên dười và kèm theo file đính kèm.
Với K giá trị bên các header bên sheet CT131 còn i, j lần lượt là giá trị header bên sheet GiathanhSX và sheet 1122NKC:
1. Tại sheet CT131
1.1.Mình muốn lấy giá trị từ bên sheet GiathanhSX:
Lấy giá trị k=4 sẽ là i=1
Lấy giá trị k=5 sẽ là i=3
Lấy giá trị k=6 sẽ là i=4
Lấy giá trị k=7 sẽ l à i=7
Lấy giá trị k=8 sẽ là i=8
Lấy giá trị k=9 sẽ là i=9
Lấy giá trj k=10 sẽ là i=10
Lấy giá trị k= 11 sẽ là i=11
Lấy giá trị k=12 sẽ là i=12
Lấy giá trị k13 sẽ là i=13
Lấy giá trị k=14 sẽ là i=14
Với điều kiện là lọc theo mã tên khách hàng tại sheet list và kết hợp tìm theo tháng
2.2. Mình muốn lấy giá trị từ sheet 1122NKC sang bên sheet CT131
Lấy giá trị từ k=1 sẽ là j=3
Lấy giá trị k=2 sẽ là j=2
Lấy giá trị k=3 sẽ là j=4
Lấy giá trị k=7 sẽ là j=5
Lấy giá trị k=8 sẽ là j=8
Lấy giá trị k=9 sẽ là j=8 với điều kiện lọc tài khoản Có tại cột số 8 TK 131
Lấy giá trị k=15 sẽ là j=9
Với điều kiện là lọc theo mã tên khách hàng tại sheet list và kết hợp tìm theo tháng

2. Sẽ lấy giá trị từ sheet GiathanhSX sang trước và sau đó là từ sheet 112NKC đề đối trừ tài khoản 131
 

File đính kèm

Upvote 0
Ngóng mãi chưa thấy bác nào lên tiếng vậy? -+*/
 
Upvote 0
Tôi không mở được file của bạn vì đang dùng Of.2003, nhưng với câu lệnh If dang này bạn thử dùng hàm Choose xem sao:

i = Choose(k, 0, 0, 0, 1, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14)
j = Choose(k, 3, 2, 4, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 9)


(Các giá trị khác của k thì i j bằng cái gì thì tùy chỉnh công thức, mình tạm coi bằng 0)
 
Upvote 0
Ngóng mãi chưa thấy bác nào lên tiếng vậy? -+*/

Bởi vì bạn hỏi câu sau này chả liên quan gì đến câu trước.
Hỏi kiểu như thế là ích kỷ. Đối với người đã giỏi rồi thì (bài #14) không sao, nhưng đối với những người mới vào cần học hỏi thì hai chuyện khác biệt như thế này chỉ tạo sự khó hiểu cho người ta mà thôi.
 
Upvote 0
Bởi vì bạn hỏi câu sau này chả liên quan gì đến câu trước.
Hỏi kiểu như thế là ích kỷ. Đối với người đã giỏi rồi thì (bài #14) không sao, nhưng đối với những người mới vào cần học hỏi thì hai chuyện khác biệt như thế này chỉ tạo sự khó hiểu cho người ta mà thôi.
Tại vì khả năng giải thích và biện luận của em nó hơi bị kém **~**
Nhưng với file này thì em đang làm và em cũng đang học hỏi về code nên nhờ mọi người giải thích thêm ah.
 
Upvote 0
Web KT

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

Back
Top Bottom