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
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....)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 đỡ.
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
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.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.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 đỡ.
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
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.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ạn gõ 8/7/2024 sẽ được vì trong code bạn đã chuyển định dạng sang dd-mm-yy rồi mà.tức là gõ trong inputbox là 8/7/2024 hay gõ 8/jul/2024hả anh @Hoàng Tuấn 868 ???
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
À, bạn vào Format cells định dạng cột C thành "dd-mm-yy" rồi chạy code.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.
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á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
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
Bạn thực hiện theo cách nào thì được vậy.Cám ơn các anh @HeSanbi , anh @Hoàng Tuấn 868 , anh @HUONGHCKT , anh @Thóc Sama nhiều ạ. Nhờ các anh em đẫ làm được ạ.
formattedDate = Format(convertedDate, "dd-mmm-yyyy")
With filterRange
.AutoFilter Field:=3, Criteria1:=formattedDate
End With