code lọc ngày tháng theo ngày hiện tại khi kích hoạt sheet

Liên hệ QC

phongkiemtinh

Thành viên thường trực
Tham gia
22/7/09
Bài viết
224
Được thích
5
E nhờ các bác chỉ dùm code sau đúng không, e làm mà báo lỗi , ý muốn e là khi sheet kích hoạt thì tự động lọc theo ngày hiện tại, cột lọc ngày là cột [A].Code e làm

Private Sub Worksheet_Activate()


ActiveSheet.Range("$A$1:$B$400").AutoFilter 1, 2
ActiveSheet.Range("$A$1:$B$400").AutoFilter 2, DateSerial(Now, Now, Now)


End Sub
 
E nhờ các bác chỉ dùm code sau đúng không, e làm mà báo lỗi , ý muốn e là khi sheet kích hoạt thì tự động lọc theo ngày hiện tại, cột lọc ngày là cột [A].Code e làm
Tôi quan sát thấy bạn rất tích cực tìm hiểu VBA, mày mò thử nghiệm => bạn sẽ rất nhanh chóng thành cao thủ đấy.
Nhưng có 1 vấn đề tôi muốn bạn chú ý đó là đọc Help.

Ví dụ với Code trên bạn sẽ thấy báo lỗi ở dòng thứ 2 thì bạn sẽ thử theo hướng sau

1/ Thay cái Dateserial bằng 1 giá trị cụ thể => nếu không lỗi thì => Do cái DateSerial
2/ Để rìm hiểu DateSerial thì bạn bôi đen => bấm F1 => ra cửa sổ help => bạn sẽ rút ra kết luận ngay
Nếu đọc vẫn chưa rõ bạn laik tìm hiểu tiếp hàm Now, dần dần bạn sẽ biết lỗi do cái gì

Cái này gọi là "chia ra để trị", nhưng phải bám vào cấu trúc có trong Help để bạn diễn giải

Chúc bạn sớm nắm bắt VBA nhé
 
Upvote 0
E nhờ các bác chỉ dùm code sau đúng không, e làm mà báo lỗi , ý muốn e là khi sheet kích hoạt thì tự động lọc theo ngày hiện tại, cột lọc ngày là cột [A].Code e làm



Thử thay đoạn Code:

AutoFilter 2, DateSerial(Now,Now,Now)

Bằng 1 ngày hiện tại

AutoFilter 1, DateSerial(Năm,Tháng,Ngày)


Ví dụ:
AutoFilter 1, DateSerial(2013,12,29)


Năm,Tháng,Ngày là ngày bạn muốn AutoFilter
 
Upvote 0
Nhưng có 1 vấn đề tôi muốn bạn chú ý đó là đọc Help.
Với phiên bản 2013 các bạn không thể đọc help offline nữa mặt dù Microsoft có cung cấp gói CHM để hỗ trợ mà cũng không đủ bằng offline 2010 không biết tại sao vậy!!!
Với DateSerial bạn có thể tìm hiểu thêm CDate khi muốn lọc dạng ngày tháng
 
Upvote 0
E nhờ các bác chỉ dùm code sau đúng không, e làm mà báo lỗi , ý muốn e là khi sheet kích hoạt thì tự động lọc theo ngày hiện tại, cột lọc ngày là cột [A].Code e làm


Bạn thử Code này xem sao:

PHP:
Private Sub Worksheet_Activate()

'Code trong sheet1
Sheets("Sheet1").Select
Range("A1:A1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">" & CLng(Date) - 1, Operator:=xlAnd, Criteria2:="<" & CLng(Date) + 1
Selection.SpecialCells(xlCellTypeVisible).Select

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử Code này xem sao:

PHP:
Private Sub Worksheet_Activate()

'Code trong sheet1
Sheets("Sheet1").Select
Range("A1:A1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">" & CLng(Date) - 1, Operator:=xlAnd, Criteria2:="<" & CLng(Date) + 1
Selection.SpecialCells(xlCellTypeVisible).Select

End Sub
Không được bạn, báo lỗi "autofiller method of range class failer" . Bạn thử tùy tiện nhập ngày tháng vào cột [A] rồi thử code dùm mình.lỗi:
...
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">" & CLng(Date) - 1, Operator:=xlAnd, Criteria2:="
......
 
Lần chỉnh sửa cuối:
Upvote 0
Không được bạn, báo lỗi "autofiller method of range class failer" . Bạn thử tùy tiện nhập ngày tháng vào cột [A] rồi thử code dùm mình.lỗi:
...
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">" & CLng(Date) - 1, Operator:=xlAnd, Criteria2:="
......

Tôi sử dụng Excel 2003, thử lại vẫn không có vấn đề, bạn Xem File.

Hoặc bạn thử Code rút gọn.

PHP:
Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
End Sub
 

File đính kèm

  • VBA File và Copy.rar
    16.6 KB · Đọc: 28
Upvote 0
Tôi sử dụng Excel 2003, thử lại vẫn không có vấn đề, bạn Xem File.

Hoặc bạn thử Code rút gọn.

PHP:
Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
End Sub

Oh cảm ơn bạn, sao mình làm 1 file trắng nhập ngày vào cột [A] rồi chạy cde không được nhỉ.Lạ thiệt.
 
Upvote 0
Tôi sử dụng Excel 2003, thử lại vẫn không có vấn đề, bạn Xem File.

Hoặc bạn thử Code rút gọn.

PHP:
Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
End Sub
Ah code không chạy được khi sheet protect bạn, mình thêm dòng code unprotect ma không được nhỉ?
.
Private Sub Worksheet_Activate()
Dim x As Long
x
= CLng(Date)
.Unprotect "GPE"
ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
.Protect "GPE"
End Sub
 
Upvote 0
Ah code không chạy được khi sheet protect bạn, mình thêm dòng code unprotect ma không được nhỉ?
.

.Unprotect "GPE", .Protect "GPE" là gì?

Protect và UnProtect là những phương thức của một đối tượng nào đó. Muốn gọi phương thức xyz, thuộc tính hichic của đối tượng ABC thì cú pháp phải là:

Mã:
ABC.xyz 
ABC.hichic = ...

hoặc 

With ABC
    .xyz
    .hichic = ...
End With

Tức
Mã:
Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    ActiveSheet.Unprotect "GPE"
    ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
    ActiveSheet.Protect "GPE"
End Sub

hoặc

Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    With ActiveSheet
        .Unprotect "GPE"
        .UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
        .Protect "GPE"
    End With
End Sub

Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    With Sheet1
        .Unprotect "GPE"
        .UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
        .Protect "GPE"
    End With
End Sub

Nếu code nằm trong sheet, UserForm và ta muốn gọi phương thức, thuộc tính của chính sheet, UserForm (đối tượng) đó thì có thể dùng Me. Từ khóa Me có nghĩa là "Tôi", ám chỉ đối tượng mà trong code của nó có từ khóa Me. Tức nếu trong UserForm1, sheet1, sheet2 có từ khóa Me thì có nghĩa là chỗ đó đang gọi phương thức, thuộc tiính của đối tượng UserForm1, sheet1, sheet2.

Vậy trong code trên cũng có thể viết

Mã:
Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    Me.Unprotect "GPE"
    Me.UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
    Me.Protect "GPE"
End Sub

hoặc 

Private Sub Worksheet_Activate()
Dim x As Long
    x = CLng(Date)
    With Me
        .Unprotect "GPE"
        .UsedRange.AutoFilter Field:=1, Criteria1:=">=" & x, Operator:=xlAnd, Criteria2:="<" & x + 1
        .Protect "GPE"
    End With
End Sub

Me ở trên là ám chỉ Sheet1 do nằm trong code của đối tượng Sheet1.

Cú pháp là căn bản của căn bản. Bạn nên tìm hiểu để có căn bản chứ những cái đó mà cũng phải giải thích thì giúp bạn mệt lắm.

À, trong code của sheet bạn cũng có thể viết Unprotect "GPE" hoặc Protect "GPE" - không có dấu chấm đằng trước.
Nhưng với những người mới lập trình tôi luôn khuyên viết tường minh, rõ ràng ra.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom