กระทู้เก่าบอร์ด อ.Yeadram
2,970 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
' 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
2 @R21875

3 @R21876
ผมดูแล้วไม่เข้าใจ ตกลงใช้โค้ดอันไหนกันแน่ ถ้าใช้โค้ดที่แสดงในกระทู้นี้ มันจะดูย้อนหลังเท่านั้นครับ ไม่ได้หาวันที่ล่วงหน้า ดังนั้นเมื่อ Delivery Date เป็น 10/04/2016 และ L/T เป็น 10 ผลลัพธ์ควรต้องอยู่ก่อนวันที่ 10/04/2016 เท่านั้นครับ
อีกอย่าง ลองเช็คว่าคุณได้ compile หรือยัง ถ้ายังก็ให้ compile ดูครับ อาจมีข้อผิดพลาดแสดงออกมาได้ (ในโค้ด เลือกเมนู Run - Compile, ถ้าคลิกไม่ได้แปลว่า compile แล้ว)
อีกอย่าง ลองเช็คว่าคุณได้ compile หรือยัง ถ้ายังก็ให้ compile ดูครับ อาจมีข้อผิดพลาดแสดงออกมาได้ (ในโค้ด เลือกเมนู Run - Compile, ถ้าคลิกไม่ได้แปลว่า compile แล้ว)
4 @R21877
ใช้ code ในกระทู้นี้ครับ แต่ผลลัพธ์ที่ได้มันไม่ได้วันก่อนวันที่ 10/4/16 ครับ ส่วนรูปที่โชว์วันที่ 27/4/16 ผมแค่โชว์ผลลัพธ์ของ 10/4/16+10 ว่าทำได้แล้วครับ
แต่ 10/4/16 -10 ยังไม่ได้เหมือนเดิม ลอง complie แล้วครับผม
แต่ 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
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
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 นาทีผมจะมาอ่านอีกครั้ง แล้วจะกลับมาดูอีกทีก็อาจจะเย็นหรือค่ำไปเลย)
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
ลบทิ้งแล้วครับ แต่ก็ยังขึ้นแถบเหลืองที่เดิมครับ
Time: 0.5064s
อันนี้เป็นการหาวันข้างหน้า ทำได้แล้วครับ เหลือย้อนหลังครับ