Nhờ kiểm tra Code

Liên hệ QC

khamha

Không có việc gì khó...
Tham gia
4/6/10
Bài viết
662
Được thích
844
Nghề nghiệp
CNVC Laos
Mình có đoạn Code này nhờ các bạn kiểm tra giúp xem nó bị lỗi gì ̣(dòng bị lỗi mình tô màu đỏ)
Code:
Option Explicit
Private Sub CommandButton1_Click()
Dim Rng As Range
Sheet4.[A7:DD65536].ClearContents
With HS
On Error GoTo thoat
.Range("A3:DD" & HS.[a65536].End(xlUp).Row).AutoFilter Field:=2, _
Criteria1:=">=" & IIf(Me.Cb_tu = "", Cb_tu.List(0), Cb_tu), Operator:=xlAnd, _
Criteria2:="<=" & IIf(Cb_den = "", Cb_den.List(Cb_den.ListCount - 1), Cb_den)
If Cb_F <> "" Then .Range("A3:DD" & HS.[a65536].End(xlUp).Row).AutoFilter Field:=6, Criteria1:=Cb_F
If Cb_G <> "" Then .Range("A3:DD" & HS.[a65536].End(xlUp).Row).AutoFilter Field:=7, Criteria1:=Cb_G
If Cb_H <> "" Then .Range("A3:DD" & HS.[a65536].End(xlUp).Row).AutoFilter Field:=8, Criteria1:=Cb_H
Set Rng = .AutoFilter.Range.Offset(1, 0).Resize(.AutoFilter.Range.Rows. _
Count - 1).SpecialCells(xlCellTypeVisible)
Rng.Copy Destination:=Sheet4.[B7] ' Sheet4.[b65536].End(xlUp).Offset(1)
thoat:
.Range("A3:DD" & HS.[a65536].End(xlUp).Row).AutoFilter
End With
With Sheet4.[A7].Resize(Sheet4.[c65536].End(xlUp).Row - 6)
.Formula = "=row()-6"
.Value = .Value
End With
End Sub
Private Sub UserForm_Initialize()
Sheet4.Select
HS.Range("A3:DD" & HS.[a65536].End(xlUp).Row).AutoFilter
Me.Cb_tu.List() = Nguon(Range(HS.[b5], HS.[b65536].End(xlUp)))
Me.Cb_den.List() = Nguon(Range(HS.[b5], HS.[b65536].End(xlUp)))
Me.Cb_F.List() = Nguon(Range(HS.[f5], HS.[f65536].End(xlUp)))
Me.Cb_G.List() = Nguon(Range(HS.[g5], HS.[g65536].End(xlUp)))
Me.Cb_H.List() = Nguon(Range(HS.[h5], HS.[h65536].End(xlUp)))
End Sub
Function Nguon(Rg As Range)
Dim Clls As Range, mg()
Dim Loc As New Collection
Dim i As Integer
On Error Resume Next
For Each Clls In Rg
Loc.Add Clls.Value, CStr(Clls.Value)
Next Clls
ReDim mg(Loc.Count - 1)
For i = 1 To Loc.Count
mg(i - 1) = Loc(i)
Next i
Nguon = mg
End Function
 
Bạn hãy dùng hộp thoại MsgBox"" để trao đổi thông tin với chương trình cho liên tục

Nhất là trước chổ báo lỗi sẩy ra;

Ví dụ trước dòng lỗi
PHP:
With Sheet4.[A7].Resize(Sheet4.[c65536].End(xlUp).Row - 6)
Ta hỏi xem Sheet4.[c65536].End(xlUp).Row - 6 mang trị là bao nhiêu?

( MsgBox
Sheet4.[c65536].End(xlUp).Row - 6 ) ; Chẵng hạn trị này bé hơn 0 thì nguy to.

(*) Vì bạn có dòng lệnh On Eror Goto Thoat
nên sau thoát ta thử ngay lệnh Msgbox Err xem sao
(Ngoài ra là còn có thể ghi số cho các dòng lệnh & khi đó ta thêm vô lệnh này là MsgBox Err, , Erl
để ta biết dòng lệnh mang số đang được báo lỗi. (Xin nói lại là đang được báo lỗi, chứ chưa chắc dòng lệnh đó là dòng lỗi hay gây ra lỗi đó nha)

Vì cũng có nhiều lúc lỗi ở các dòng lệnh bên trên; nhưng đến đây mới báo lỗi do ta xài đến biến mang trị gây lỗi (Như chia cho 0 đó mà,. . . )


 
Web KT
Back
Top Bottom