• Active sheet cuối của Excel bằng VBA Access
  • 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 DateOptional 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) \ 1
           YearNum 
    Year(AnyDate) + 1
       Case Is 
    ThisYearStart
           ISOWeekNum 
    = (AnyDate PreviousYearStart) \ 1
           YearNum 
    Year(AnyDate) - 1
       Case 
    Else
           ISOWeekNum = (AnyDate ThisYearStart) \ 1
           YearNum 
    Year(AnyDate)
       End Select

       If IsMissing
    (WhichFormatThen Exit Function
       If WhichFormat 2 Then
           ISOWeekNum 
    CInt(Format(Right(YearNum2), "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(WhichYear11)
       WeekDay = (NewYear 2Mod 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: 
    TuanXbig greenatepart("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