-
RE: Active sheet cuối của Excel bằng VBA Access
ongke0711 > 15-05-17, 11:04 AM
- Muốn tính bắt đầu = thứ 2 thì bạn thêm tham số vô.
VD: Datepart("ww",#01/02/2017#,vbMonday) =2
- Ngoài ra còn tham số [tuần đầu của năm]:
+ 1: mặc định cứ ngày 1/1 là tuần 1
+ 2: Cứ đủ 4 ngày trong tuần sẽ được tính là tuần 1
+ 3: Nếu ngày 1/1 là thứ 2 thì mới được tính là tuần 1.
Tôi nghĩ trường hợp của bạn nền dùng tham số 2: vb FirstFourDays
VD: Datepart("ww",#01/02/2017#, vbMonday, vbFirstFourDays)
Bạn xem có giải quyết được gì không nhé.
Theo tôi biết thì hình như MS cũng có hàm tự tạo xử lý vụ này. -
RE: Active sheet cuối của Excel bằng VBA Access
ongke0711 > 15-05-17, 02:24 PM
Gửi bạn cái hàm tìm số tuần theo đúng chuẩn ISO.
Link demo: http://www.mediafire.com/file/d6o5c42qtu...eekNum.mdb
Copy đoạn code vào vào Module, gọi hàm ISOWeekNum(Ngày) khi cần.
Mã PHP:Public Function ISOWeekNum(AnyDate As Date, Optional WhichFormat As Variant) As Integer
' WhichFormat: missing or <> 2 then returns week number,
' = 2 then YYWW
''
Dim ThisYear As Integer
Dim PreviousYearStart As Date
Dim ThisYearStart As Date
Dim NextYearStart As Date
Dim YearNum As Integer
ThisYear = Year(AnyDate)
ThisYearStart = YearStart(ThisYear)
PreviousYearStart = YearStart(ThisYear - 1)
NextYearStart = YearStart(ThisYear + 1)
Select Case AnyDate
Case Is >= NextYearStart
ISOWeekNum = (AnyDate - NextYearStart) \ 7 + 1
YearNum = Year(AnyDate) + 1
Case Is < ThisYearStart
ISOWeekNum = (AnyDate - PreviousYearStart) \ 7 + 1
YearNum = Year(AnyDate) - 1
Case Else
ISOWeekNum = (AnyDate - ThisYearStart) \ 7 + 1
YearNum = Year(AnyDate)
End Select
If IsMissing(WhichFormat) Then Exit Function
If WhichFormat = 2 Then
ISOWeekNum = CInt(Format(Right(YearNum, 2), "00") & _
Format(ISOWeekNum, "00"))
End If
End Function
Public Function YearStart(WhichYear As Integer) As Date
Dim WeekDay As Integer
Dim NewYear As Date
NewYear = DateSerial(WhichYear, 1, 1)
WeekDay = (NewYear - 2) Mod 7 'Generate weekday index where Monday = 0'
If WeekDay < 4 Then
YearStart = NewYear - WeekDay
Else
YearStart = NewYear - WeekDay + 7
End If
End Function -
RE: Active sheet cuối của Excel bằng VBA Access
vodainhan > 15-05-17, 11:27 PM
Rất cảm ơn sự nhiệt tình của bạn. Hàm ISOWeekNum rất hay, tôi sẽ áp dụng trong 1 phần mềm Access khác (cũng tương tự như vậy nhưng quy mô hơn, nhiều năm hơn mà hổm nay hơi bí phần tuần, tuy dùng công thức khác không chính xác lắm nhưng cũng tạm ổn).
Trước đó dưới sự gợi ý của bạn tôi đã sử dụng trong query công thức sau:
TuanXatepart("ww",[NGAYKP],2)-1 và kết quả chinh xác.
Do mới tự mày mò nghiên cứu phần VBA Access nên nhiều cái còn chưa hiểu lắm, nên sẽ nhờ các bạn đi trước dài dài. Có gì xin chỉ giúp nhé! -
RE: Active sheet cuối của Excel bằng VBA Access
vodainhan > 15-05-17, 11:29 PM
TuanX: Datepart("ww",[NGAYKP],2)-1