Hôm qua, khi học về, ngồi nhớ lại những gì đã học và đã làm bài tập nhỏ này. Mọi người tham khảo nha.....
Code của bạn có đoạn:Hôm qua, khi học về, ngồi nhớ lại những gì đã học và đã làm bài tập nhỏ này. Mọi người tham khảo nha.....
If OptionVietNam Then
Cells(jJ, 1).Offset(, 1).Value = "Nguoi Viet Nam"
ElseIf OptionAnh Then
Cells(jJ, 1).Offset(, 1).Value = "Nguoi Anh"
ElseIf OptionPhap Then
Cells(jJ, 1).Offset(, 1).Value = "Nguoi Phap"
End If
For Each op In Me.Frame1.Controls
If op.Value Then Cells(jJ, 1).Offset(, 1).Value = op.Caption
Next
Private Sub cmdOK_Click()
Dim op As Control
With Sheets("DATA").Range("A65535").End(xlUp)
If TextBox1.Value = "" Then
MsgBoxUni UNC("B¹n h·y ®iÒn tªn vµo nhÐ. C¸m ¬n b¹n nhiÒu!")
Else
.Offset(1, 0).Value = TextBox1.Value
For Each op In Me.Frame1.Controls
If op.Value Then .Offset(1, 1).Value = op.Caption
Next
TextBox1 = ""
TextBox1.SetFocus
End If
End With
End Sub
Ngọc làm form rất tốt! Nhưng cần phải để lại thông tin về nguồn code sử dụng.
Ý thầy Tuân là anh phải trích dẫn nguồn code sử dụng (Trong bài là nguồn code để viết tiếng Việt Unicode)Em không hiểu ý thầy Tuân lắm! Có phải ý thầy là đưa code lên đây?
khanhhoan đã viết:Các thầy cho em hỏi sao em làm UserForm lọc dữ liệu (theo ví dụ 7 của thầy Hướng) lúc đầu chạy thì ổn nhưng khi em làm tiếp UserForm khác thì lại không chạy được cái UserForm trước (UserForm2), nó cứ báo runtime error 9 gì đó.
UserForm2.lstDanhsach.AddItem Sheets("[COLOR=red]Sheet2[/COLOR]").Cells(Row, 2)
Hai buổi tuần trước vì bận công việc em không đi học được, các thầy hay bác nào đi học đầy đủ có thể tóm tắt những gì mình học 2 buổi đó giúp em được không ạ? Em cảm ơn trước ạ!!!
Option Explicit
Sub Loc_Ctiet()
Application.ScreenUpdating = False
Dim ShSoCtiet As Worksheet
Dim ShSoData As Worksheet
Set ShSoCtiet = Sheets("SOCTIET")
Set ShSoData = Sheets("CSDL")
Dim eRw As Long, eRw1 As Long, i As Long, Kyhieu As String, Ma As String
'Xoa du lieu
ShSoCtiet.Range("A10:G56536").Clear 'Contents
eRw1 = 10
With ShSoCtiet
Kyhieu = Trim(.[c6])
Ma = Trim(.[c7])
For eRw = 4 To ShSoData.[a65536].End(xlUp).Row
'Dieu kien
If Trim(ShSoData.Cells(eRw, 1)) = Kyhieu And Trim(ShSoData.Cells(eRw, 4)) = Ma Then
'Lay du lieu sang neu dieu kien la dung
.Cells(eRw1, 1).Resize(, 2) = ShSoData.Cells(eRw, 2).Resize(, 2).Value
.Cells(eRw1, 3).Resize(, 6) = ShSoData.Cells(eRw, 5).Resize(, 6).Value
eRw1 = eRw1 + 1
End If
Next
End With
'Bay loi
If eRw1 = 10 Then MsgBox "Khong tim thay. Vui long tim lai nha!"
i = Range("A65535").End(xlUp).Row + 1
With [A10].Resize(i - 10, 7) 'Ke bang
.BorderAround LineStyle:=1
.Borders(11).LineStyle = 1: .Borders(11).ColorIndex = 7
.Borders(12).LineStyle = 1: .Borders(12).ColorIndex = 7
End With
With Cells(i, 3) 'Dien chu Cong vao bang
.Value = "Cong"
.Font.Bold = True
End With
With Cells(i, 7) 'Cong tong cot G
.Value = "=SUM(R10C7:R" & i - 1 & "C)"
.Font.Bold = True
End With
Range("E10:G" & i).NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""??_);_(@_)" ' Dinh dang so
Application.ScreenUpdating = True
Set ShSoCtiet = Nothing
Set ShSoData = Nothing
End Sub
Đây là bài tập tối ngày 18.11.2010:
Em nhờ thầy và các AC xem và hoàn thiện code cho em sao cho tối ưu hơn.PHP:Option Explicit Sub Loc_Ctiet() Application.ScreenUpdating = False Dim ShSoCtiet As Worksheet Dim ShSoData As Worksheet Set ShSoCtiet = Sheets("SOCTIET") Set ShSoData = Sheets("CSDL") Dim eRw As Long, eRw1 As Long, i As Long, Kyhieu As String, Ma As String 'Xoa du lieu ShSoCtiet.Range("A10:G56536").Clear 'Contents eRw1 = 10 With ShSoCtiet Kyhieu = Trim(.[c6]) Ma = Trim(.[c7]) For eRw = 4 To ShSoData.[a65536].End(xlUp).Row 'Dieu kien If Trim(ShSoData.Cells(eRw, 1)) = Kyhieu And Trim(ShSoData.Cells(eRw, 4)) = Ma Then 'Lay du lieu sang neu dieu kien la dung .Cells(eRw1, 1).Resize(, 2) = ShSoData.Cells(eRw, 2).Resize(, 2).Value .Cells(eRw1, 3).Resize(, 6) = ShSoData.Cells(eRw, 5).Resize(, 6).Value eRw1 = eRw1 + 1 End If Next End With 'Bay loi If eRw1 = 10 Then MsgBox "Khong tim thay. Vui long tim lai nha!" i = Range("A65535").End(xlUp).Row + 1 With [A10].Resize(i - 10, 7) 'Ke bang .BorderAround LineStyle:=1 .Borders(11).LineStyle = 1: .Borders(11).ColorIndex = 7 .Borders(12).LineStyle = 1: .Borders(12).ColorIndex = 7 End With With Cells(i, 3) 'Dien chu Cong vao bang .Value = "Cong" .Font.Bold = True End With With Cells(i, 7) 'Cong tong cot G .Value = "=SUM(R10C7:R" & i - 1 & "C)" .Font.Bold = True End With Range("E10:G" & i).NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""??_);_(@_)" ' Dinh dang so Application.ScreenUpdating = True Set ShSoCtiet = Nothing Set ShSoData = Nothing End Sub
Ngọc sửa thêm thế này nhé.
+ Khai báo biến ở đầu thủ tục. Hiện nay có những lệnh gán trước phần khai báo biến như là Application.ScreenUpdating = False.
+ Khi không tìm thấy mã thì thông báo sau đó bị lỗi?
Ngọc kiểm tra và chỉnh thêm nhé. Code cũng khá tốt đây.
If eRw1 = 10 Then MsgBox "Khong tim thay. Vui long tim lai nha!"
Thầy ơi em bẫy như thế này chưa được uh?
PHP:If eRw1 = 10 Then MsgBox "Khong tim thay. Vui long tim lai nha!"
Không thấy mã thông báo thì được rồi, nhưng thông báo xong phải thoát ra, chứ hè hụi đi định dạng border và number cho cái không có ấy mà.Thầy ơi em bẫy như thế này chưa được uh?
PHP:If eRw1 = 10 Then MsgBox "Khong tim thay. Vui long tim lai nha!"
Option Explicit
Sub Loc_Ctiet()
Application.ScreenUpdating = False
Dim ShSoCtiet As Worksheet
Dim ShSoData As Worksheet
Set ShSoCtiet = Sheets("SOCTIET")
Set ShSoData = Sheets("CSDL")
Dim eRw As Long, eRw1 As Long, i As Long, Kyhieu As String, Ma As String
'Xoa du lieu
ShSoCtiet.Range("A10:G56536").Clear 'Contents
eRw1 = 10
With ShSoCtiet
Kyhieu = Trim(.[c6])
Ma = Trim(.[c7])
For eRw = 4 To ShSoData.[a65536].End(xlUp).Row
'Dieu kien
If Trim(ShSoData.Cells(eRw, 1)) = Kyhieu And Trim(ShSoData.Cells(eRw, 4)) = Ma Then
'Lay du lieu sang neu dieu kien la dung
.Cells(eRw1, 1).Resize(, 2) = ShSoData.Cells(eRw, 2).Resize(, 2).Value
.Cells(eRw1, 3).Resize(, 6) = ShSoData.Cells(eRw, 5).Resize(, 6).Value
eRw1 = eRw1 + 1
End If
Next
End With
'Bay loi
If eRw1 = 10 Then MsgBox "Khong tim thay. Vui long tim lai nha!"
i = Range("A65535").End(xlUp).Row + 1
With [A10].Resize(i - 10, 7) 'Ke bang
.BorderAround LineStyle:=1
.Borders(11).LineStyle = 1: .Borders(11).ColorIndex = 7
.Borders(12).LineStyle = 1: .Borders(12).ColorIndex = 7
End With
With Cells(i, 3) 'Dien chu Cong vao bang
.Value = "Cong"
.Font.Bold = True
End With
With Cells(i, 7) 'Cong tong cot G
.Value = "=SUM(R10C7:R" & i - 1 & "C)"
.Font.Bold = True
End With
Range("E10:G" & i).NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""??_);_(@_)" ' Dinh dang so
Application.ScreenUpdating = True
Exit Sub:
Set ShSoCtiet = Nothing
Set ShSoData = Nothing
End Sub
Tối ưu nhất và gọn nhất theo tôi là viết code dựa trên cơ sở AutoFilter hoặc Advanced Filter chứ không phải dùng For.. NextEm nhờ thầy và các AC xem và hoàn thiện code cho em sao cho tối ưu hơn.
Tối ưu nhất và gọn nhất theo tôi là viết code dựa trên cơ sở AutoFilter hoặc Advanced Filter chứ không phải dùng For.. Next
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2