Lọc Ngày không chạy code. (2 người xem)

  • Thread starter Thread starter DMQ
  • Ngày gửi Ngày gửi
Liên hệ QC

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

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
722
Được thích
57
Giới tính
Nam
Chào các anh trong GPE!!!
Em có file, trong file có code để khi gõ ngày trong inputBox thì lọc thoe ngày của inputBox, nhưng sao em gõ 7/8/2024 vào trong inputBox mà code báo lỗi"không có dữ liệu nào phù hợp với ngày chọn" Mong các anh giúp đỡ.
 

File đính kèm

Bạn thêm Format vào ngày nhập yyyy/mm/dd
 
Upvote 0
Chào các anh trong GPE!!!
Em có file, trong file có code để khi gõ ngày trong inputBox thì lọc thoe ngày của inputBox, nhưng sao em gõ 7/8/2024 vào trong inputBox mà code báo lỗi"không có dữ liệu nào phù hợp với ngày chọn" Mong các anh giúp đỡ.
Theo tôi thì cái selectedDate của inputbox được định dạng là mm/dd/yyyy (ví dụ 7/8/2024= tháng 7 ngày 8 năm....)
và convertedDate = DateValue(selectedDate) tức là lúc này nó đã thành value. (7/8/2024)
Nhung đến khi bạn lại chuyển nó thành
formattedDate = Format(convertedDate, "dd-mmm-yy") thì nó lại là ngày 7 tháng 8 năm 2024.
Trong cột D/Sh1 ấy không có ngày 7 tháng 8 ... thì nó báo không tìm thấy dữ liệu phù hợp là đúng rồi.
bạn nhập thử vào Inputbox là 8/7/2024 và chạy thử xem sao.
 
Upvote 0
Mã:
    On Error Resume Next
    convertedDate = CDate(Format(selectedDate, "yyyy/mm/dd")) ' Chuy?n d?i theo d?nh d?ng yyyy/mm/dd
    On Error GoTo 0
Sao em cho vào, vẫn không được anh @HeSanbi
Bài đã được tự động gộp:

Cám ơn anh @HUONGHCKT , để em thử ạ.
Bài đã được tự động gộp:

Em có thử cũng không được anh @HUONGHCKT , nó chuyển thành ngày 7 tháng 8 năm 2024
 
Upvote 0
Chào các anh trong GPE!!!
Em có file, trong file có code để khi gõ ngày trong inputBox thì lọc thoe ngày của inputBox, nhưng sao em gõ 7/8/2024 vào trong inputBox mà code báo lỗi"không có dữ liệu nào phù hợp với ngày chọn" Mong các anh giúp đỡ.
Dữ liệu trong file chỉ có tháng 7 nên bạn chọn ngày 7 tháng 8 là ngày không có trong cột C thì kết quả báo không có dữ liệu nào phù hợp là đúng thôi.
Bạn chạy thử lại file dưới đây xem thế nào.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào các anh trong GPE!!!
Em có file, trong file có code để khi gõ ngày trong inputBox thì lọc thoe ngày của inputBox, nhưng sao em gõ 7/8/2024 vào trong inputBox mà code báo lỗi"không có dữ liệu nào phù hợp với ngày chọn" Mong các anh giúp đỡ.
Làm việc với hàm ngày tháng nhiều khi bị rối khi format có thể khác nhau ở các máy.
Nên mình cứ dùng cách này cho chắc cú. Bạn Test thử xem.
PHP:
Option Explicit
#If VBA7 Then
    Private Declare PtrSafe Function GetLocaleInfo Lib "kernel32" _
        Alias "GetLocaleInfoA" ( _
        ByVal Locale As LongPtr, _
        ByVal LCType As Long, _
        ByVal lpLCData As String, _
        ByVal cchData As Long) As Long
#Else
    Private Declare Function GetLocaleInfo Lib "kernel32" _
        Alias "GetLocaleInfoA" ( _
        ByVal Locale As Long, _
        ByVal LCType As Long, _
        ByVal lpLCData As String, _
        ByVal cchData As Long) As Long
#End If

Private Const LOCALE_SSHORTDATE As Long = &H1F
Private Const LOCALE_USER_DEFAULT As Long = &H400

Function GetSystemDateFormat() As String
    Dim buffer As String * 255
    Dim result As Long
    result = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, buffer, 255)
    If result > 0 Then
        GetSystemDateFormat = Left(buffer, result - 1)
    Else
        GetSystemDateFormat = "Khong co du lieu"
    End If
End Function

Sub GPE_Sort()
    Dim Lr&, Date_Seach
    Dim dateFormat$
    On Error Resume Next
    
    Application.ScreenUpdating = False
        dateFormat = GetSystemDateFormat()
        Date_Seach = CDate(InputBox("Nhap theo dinh dang " & dateFormat))
        With Sheets("Sheet1")
            If .AutoFilterMode = True Then .AutoFilterMode = False
            Lr = .Range("B" & Rows.Count).End(xlUp).Row
            .Range("B5:P5").AutoFilter
            .Range("B5:P" & Lr).AutoFilter Field:=2, _
            Operator:=xlFilterValues, Criteria2:=Array(2, Date_Seach)
        End With
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Em đã thử gõ 7/8/2024 trong file của anh @Hoàng Tuấn 868 mà vẫn không ra kết quả, nó báo không có dữ liệu phù hợp với ngày chọn.
Bài #5 nói rất rõ rằng cột C file của bạn không có dữ liệu tháng 8 mà bạn vẫn gõ 7/8/2024 thì làm sao nó chẳng báo không có dữ liệu phù hợp với ngày chọn.
Bạn gõ thử một ngày nào đó có trong cột C thì sẽ rõ ngay.
 
Upvote 0
tức là gõ trong inputbox là 8/7/2024 hay gõ 8/jul/2024hả anh @Hoàng Tuấn 868 ???
Bài đã được tự động gộp:

Anh @Thóc Sama cho em hỏi tý, các số -1, 2 trong code anh là sao ạ, code anh lấy từ cột B, giờ em muốn lấy từ cột A thì chỉnh code sao ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
With Sheets("Sheet1")
            If .AutoFilterMode = True Then .AutoFilterMode = False
            Lr = .Range("A" & Rows.Count).End(xlUp).Row
            .Range("A5:P5").AutoFilter
            .Range("A5:P" & Lr).AutoFilter Field:=3, _
            Operator:=xlFilterValues, Criteria2:=Array(3, Date_Seach)
        End With
trong code anh @Thóc Sama em thay như vầy, sao code không chạy (lấy tư cột A, cột C là ngày)
 
Upvote 0
sao em tải file của anh @Hoàng Tuấn 868 về và gõ trong inputbox: 8/7/2024 nó chuyển thành 7 tháng 8 năm 2024 và báo không có dữ liệu phù hợp với ngày chọn mà anh @Hoàng Tuấn 868.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn anh @HUONGHCKT , để em thử ạ.

Em có thử cũng không được anh @HUONGHCKT , nó chuyển thành ngày 7 tháng 8 năm 2024
Nếu chỉ để lọc thì bạn chủ thớt có thể tham khảo code (được lấy bằng cách ghi lại macro và sửa tí chút),
Cái đoạn code sau khi lọc trong code cũ của bạn không biết để làm gì.
Mã:
Option Explicit

Sub Loc()
Dim LDate As Date, Lr&
Dim Sh As Worksheet, Rng As Range
Set Sh = Sheet1
Run:
    LDate = InputBox("Vui ḷng nh?p ngày d? l?c (theo d?nh d?ng:dd/mm/yyyy, ví du13/7/2024):", "Ch?n Ngày")
    Sh.[A5] = LDate
On Error Resume Next
    Sh.ShowAllData
On Error GoTo 0
'    Sh.Rows("6:1000").EntireRow.Hidden = False
    Lr = Sh.Cells(Rows.Count, "C").End(xlUp).Row
    Set Rng = Sh.Range("C6:C" & Lr)
    If Rng.Find(LDate) Is Nothing Then
        If MsgBox(" Không có ngày này-Hay nhâp lai", vbCritical + vbYesNo, "THÔNG BÁO") = vbYes Then
            GoTo Run
        Else
            Exit Sub
        End If
    Else
        Set Rng = Sh.Range("A5:Q" & Lr)
        Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sh.Range("A4:A5"), Unique:=True
    End If
End Sub
Trong đoạn code trên tôi có sử dụng ô phụ (A4:A5) Bạn nhập vào inputbox theo định dạng d/m/yyyy.
*?Nếu dữ liệu nhập vào không phù hợp, hoặc để trống mà nhấn ok, hoặc cancel sẽ bị lỗi Run-time error '13 ( Type mismatch)
*/Nếu dữ liệu nhập vào Không có trong cột C thì sẽ hiện thông báo.
Chạy thử. chúc thành công.
 
Upvote 0
Bạn đặt như thế này
JavaScript:
    On Error Resume Next
Dim convertedDate As Variant
    convertedDate = Format(selectedDate, "yyyy/mm/dd")
    On Error GoTo 0
 
Upvote 0
Bạn dùng InputBox nó trả về giá trị là String, bạn nhập kiểu gì nó ra chuỗi đó, do đó dễ xảy ra sai nếu nhập không đúng định dạng ngày.
Ví dụ: file của nhập nhập chuỗi "01-jul-2024" thì nó sẽ lọc ra dữ liệu.
--> Định dạng cột Date - thành Custom dd-mmm-yyyy (không phải chọn Date)
--> Nhập ngày tháng theo định dạng hiện có của máy tính hoặc nhập đúng kiểu Việt Nam quên thuộc (d/m/yy) sau đó tách chuỗi, dùng thêm hàm DateSerial().

Sửa:
Mã:
formattedDate = Format(convertedDate, "dd-mmm-yyyy")

Mã:
With filterRange
        .AutoFilter Field:=3, Criteria1:=formattedDate
    End With
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom