Private Sub Worksheet_Change(ByVal Target As Range) Application.DisplayAlerts = False If Target.Address = "$B$2" Then Set DS = [A4].CurrentRegion If Target = "" Then ActiveSheet.ShowAllData: Exit Sub DS.AdvancedFilter Action:=1, CriteriaRange:=Range("B1:B2") End If End Sub
Bạn bỏ hết công thức đi là file chạy nhanh liền... (Đã VBA sao lại cần công thức)Em có sử dụng code của các bác trên diễn đàn. Khi áp dụng với dữ liệu của em (khoảng 800 dòng) thì chạy rất chậm. Nhờ các bác giúp đỡ để code lọc nhanh hơn. Xin cảm ơn các bác !
Cám ơn các bác, nhất là bác Po_Pikachu , đã giải quyết được tốc độ. File của em chỉ chạy chậm khi hiện lại các dữ liệu. Cho em hỏi khi thêm Unprotect và Protect thì thêm vào code thế nào để lọc hay hiện dữ liệu đều khóa lại khi hoàn thành.
[COLOR=#000000][COLOR=#007700]Private [/COLOR][COLOR=#0000BB]Sub Worksheet_Change[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ByVal Target [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]DisplayAlerts [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]False
[/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Target[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Address [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"$B$2" [/COLOR][COLOR=#0000BB]Then
UnProtectSh
Set DS [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]A4[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]CurrentRegion
[/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Target [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"" [/COLOR][COLOR=#0000BB]Then ActiveSheet[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ShowAllData[/COLOR][COLOR=#007700]: Exit [/COLOR][COLOR=#0000BB]Sub
DS[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]AdvancedFilter Action[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]CriteriaRange[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B1:B2"[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]If
[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000BB]ProtectSh[/COLOR][/COLOR]
[COLOR=#000000][COLOR=#007700][/COLOR][COLOR=#0000BB]End Sub
Sub ProtectSh()
...
end Sub
[/COLOR][/COLOR]
Private Sub Worksheet_Change(ByVal Target As Range) Dim pass As String Application.DisplayAlerts = False pass = "Password" If Target.Address = "$B$2" Then ActiveSheet.Unprotect pass Set DS = [A4].CurrentRegion If Target = "" Then ActiveSheet.ShowAllData: ActiveSheet.Protect pass: Exit Sub DS.AdvancedFilter Action:=1, CriteriaRange:=Range("B1:B2") End If ActiveSheet.Protect pass End Sub
Bạn chỉnh lại code thế này thì chạy cực nhanh luônEm có sử dụng code của các bác trên diễn đàn. Khi áp dụng với dữ liệu của em (khoảng 800 dòng) thì chạy rất chậm. Nhờ các bác giúp đỡ để code lọc nhanh hơn. Xin cảm ơn các bác !
Private Sub Worksheet_Change(ByVal Target As Range)
Application.DisplayAlerts = False
If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
On Error Resume Next
ActiveSheet.ShowAllData
Set DS = [A4].CurrentRegion
DS.AdvancedFilter Action:=1, CriteriaRange:=Range("B1:B2")
End If
End Sub
Application.DisplayAlerts = False
If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
On Error Resume Next
ActiveSheet.ShowAllData
Set DS = [A4].CurrentRegion
DS.AdvancedFilter Action:=1, CriteriaRange:=Range("B1:B2")
End If
End Sub
Chính xác: vì Target.Address ý nói là địa chỉ của ô điều kiện chạy code (làm gì có ô nào trong Excel có địa chỉ là "" )Anh Boyxin ơi
Có phải phần bôi đậm trên không ghi hiểu Target = "" không?If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
Không phải vậyAction bằng 1 hiểu là chỉ lấy duy nhất không?
Trong vùng [A4:F805]Tại sao Set DS lại là A4 mà không phải là C4...