ถึง อาจารย์สันติสุขครับ (พอดีผม Reply ในกระทู้เก่า
กระทู้เก่าบอร์ด อ.Yeadram

 2,584   24
URL.หัวข้อ / URL
ถึง อาจารย์สันติสุขครับ (พอดีผม Reply ในกระทู้เก่า

Public Function pfNextWorkDT(pStartDT As Date, pNumOfDay As Long) As Date

'   pStartDT = ???????????

'   pNumOfDy = ?????????????

'

'   ?????????? ???????????????????????????????????????????????????????????????????? (pStartDT + pNumOfDay)

'   ????????????????? ?????????????????????????????????????????????????? ???????????????????????? (pStartDT + pNumOfDay + wLastTotalHol)

'   ??????????????????? ???????????????????????????????????? ???????????????????????? ??????????????????????? ?????????????????????????

'   ??????????????? ?????????????????????????? ???????????????????????????? ?????????????????????????



    Dim wEndDT              As Date     ' ??????????

    Dim wDay               As Integer ' ??????????????????????????????????????? ?????????????????

    Dim wSat               As Integer ' ????????????????????????????????????????????

    Dim wSun               As Integer ' ??????????????????????????????????????????????

    Dim wTradHol            As Integer ' ?????????????????????????????????????????????????????

    Dim wTotalHol           As Integer ' ?????????????????????????????????????????????????????

    Dim wLastTotalHol       As Integer ' ??????????????? ?????????????????????

    

    wTotalHol = 0

    Do

        wLastTotalHol = wTotalHol

        wDay = pNumOfDay + wLastTotalHol

       

        wEndDT = DateAdd("d", wDay - 1, pStartDT)

       wSat = DateDiff("ww", wEndDT - 1, pStartDT, 7)

       wSun = DateDiff("ww", wEndDT - 1, pStartDT, 1)

        wTradHol = DCount("HDATE", "HolidayDate", "HDATE between #" & Format$(pStartDT, "dd-mmm-yyyy") & "# and #" & Format$(wEndDT, "dd-mmm-yyyy") & "#")

       

        wTotalHol = wSat + wSun + wTradHol

    Loop Until wTotalHol = wLastTotalHol

    pfNextWorkDT = wEndDT

End Function

24 Reply in this Topic. Dispaly 2 pages and you are on page number 1

1 @R21874


อันนี้เป็นการหาวันข้างหน้า ทำได้แล้วครับ เหลือย้อนหลังครับ
2 @R21875
3 @R21876
ผมดูแล้วไม่เข้าใจ ตกลงใช้โค้ดอันไหนกันแน่ ถ้าใช้โค้ดที่แสดงในกระทู้นี้ มันจะดูย้อนหลังเท่านั้นครับ ไม่ได้หาวันที่ล่วงหน้า ดังนั้นเมื่อ Delivery Date เป็น 10/04/2016 และ L/T เป็น 10 ผลลัพธ์ควรต้องอยู่ก่อนวันที่ 10/04/2016 เท่านั้นครับ

อีกอย่าง ลองเช็คว่าคุณได้ compile หรือยัง ถ้ายังก็ให้ compile ดูครับ อาจมีข้อผิดพลาดแสดงออกมาได้ (ในโค้ด เลือกเมนู Run - Compile, ถ้าคลิกไม่ได้แปลว่า compile แล้ว)
4 @R21877
ใช้ code ในกระทู้นี้ครับ แต่ผลลัพธ์ที่ได้มันไม่ได้วันก่อนวันที่ 10/4/16 ครับ ส่วนรูปที่โชว์วันที่ 27/4/16 ผมแค่โชว์ผลลัพธ์ของ 10/4/16+10 ว่าทำได้แล้วครับ

แต่ 10/4/16 -10 ยังไม่ได้เหมือนเดิม ลอง complie แล้วครับผม
5 @R21878
พอดีตอนนี้ผมไม่ได้อยูที่ทำงาน ถ้าจำไม่ผิด run code ในกระทู้นี้แล้วผลลัพธ์ที่ได้เป็นวันที่ 20/4/16 ครับ
6 @R21879
ผมเห็นที่ผิดแล้ว คุณไม่ได้แก้บรรทัดนี้เป็น

wEndDT = DateAdd("d", -(wDay - 1), pStartDT)

ตามที่ผมบอกใน http://www.thai-access.com/yeadram_view.php?topic_id=5009
7 @R21880
ขอบคุณครับผม เดี๋ยวพรุ่งนี้ไปลองทำดู ขอบคุณมากจริงๆ ครับ ตอบชัดเจนทุกคำถามเลยครับ
8 @R21882
ทำได้แล้วครับ ขอบคุณมากๆ ครับอาจารย์
9 @R21958
รบกวนสอบถามอีกอย่างครับ ถ้าต้องการให้ DeliveryDate - LeadTime (ให้รวมวันหยุดด้วย) แต่ถ้าวันเป้าหมายตรงกับวันหยุดให้ขยับไปวันทำงานที่ใกล้ที่สุด สามารถทำได้หรือเปล่าครับ ขอบคุณครับผม
10 @R21964
Public Function pfNextWorkDT(pStartDT As Date, pNumOfDay As Long) As Date

    Dim wEndDT              As Date     
    Dim wDayOfWeek      As Integer

    wEndDT = DateAdd("d", -(wDay - 1), pStartDT)
    wDayOfWeek = DatePart("w",wEndDT)
]
    Do While (wDayOfWeek = vbSaturday) or (wDayOfWeek = vbSunday) or (DCount("HDATE", "HolidayDate", "HDATE = #" & Format$(wEndDT, "dd-mmm-yyyy")) > 0)
       wEndDT = wEndDT - 1
       wDayOfWeek = DatePart("w",wEndDT)
    Loop

    pfNextWorkDT = wEndDT
End Function
11 @R21968
ขอบคุณมากครับอาจารย์เดี๋ยววันจันทร์จะลองทำดูแล้วนำผลมาแจ้งครับผม
12 @R21973
ต้องเอาโค๊ดไปวางไว้ตรงใหนเหรอครับ พอดีผมลองวางแล้วมัน error ครับ
13 @R21974
วางไว้แทนของเดิมครับ เพราะถ้ามีบรรทัด Public Function pfNextWorkDT มากกว่า 1 ครั้ง มันจะ error ครับ   หรือถ้าเกิดจากอย่างอื่น ช่วยบอกทีว่า error รหัสอะไร ข้อความทั้งหมดแสดงว่ายังไง
14 @R21975
15 @R21976
ขึ้นป๊อบอัพ Compile error : Syntax error
16 @R21977
ไม่เห็นรูปนะครับ แต่น่าจะเป็นบรรทัดนี้

wEndDT = DateAdd("d", -(wDay - 1), pStartDT)

ให้แก้เป็น

wEndDT = DateAdd("d", -(pNumOfDay - 1), pStartDT)

(อีกสัก 20 นาทีผมจะมาอ่านอีกครั้ง แล้วจะกลับมาดูอีกทีก็อาจจะเย็นหรือค่ำไปเลย)
17 @R21978
มันขึ้นแถบเหลืองตรงบรรทัด Do While ครับ
18 @R21979
19 @R21980
ก่อนบรรทัด Do While ผมเห็นมี [ ให้ลบทิ้งครับ สงสัยมือจะไปโดนตอนเขียนโค้ดให้
20 @R21981
ลบทิ้งแล้วครับ แต่ก็ยังขึ้นแถบเหลืองที่เดิมครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2629s