Count Working Days
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 529   13
URL.หัวข้อ / URL
Count Working Days

I am newbie for Acc97 I would like to calculate working day
and I really don't know how 2 reach the solution. Please be advise.
Thank you in advance for every reply.

Function to calculate working day from :
http://www.utteraccess.com/forums/showflat.php?Cat=&Board=AxxessXP&Number=11
7278&page=0&view=collapsed&sb=5&o=7&fpart=1

Function Work_Days (BegDate As Variant, EndDate As Variant) As Integer
' Note that this function does not account for holidays.
Dim WholeWeeks As Variant
Dim DateCnt As Variant
Dim EndDays As Integer

BegDate = DateValue(BegDate)
EndDate = DateValue(EndDate)

WholeWeeks = DateDiff("w", BegDate, EndDate)
DateCnt = DateAdd("ww", WholeWeeks, BegDate)

EndDays = 0
Do While DateCnt < EndDate
If Format(DateCnt, "ddd") <> "Sun" And _
Format(DateCnt, "ddd") <> "Sat" Then
EndDays = EndDays + 1
End If
DateCnt = DateAdd("d", 1, DateCnt)
Loop

Work_Days = WholeWeeks * 5 + EndDays

End Function

Sample Code to Calculate special hoiliday.

' FUNCTION : CalcHolidays(dStartDate As Date, dEndDate As Date) As
Integer
' RETURNS : Integer
' PURPOSE : Calculates the number of company holidays between the start
date and end date.
' AUTHOR : George Hepworth
' DATE : 5/4/2001
' Requires current holidays be entered in
tlkpholidays
'
Public Function CalcHolidays(dStartDate As Date, dEndDate As Date) As
Integer
On Error GoTo errCalcHolidays

Dim iholiday As Date
Dim iHolidayCount As Integer
Dim rstHoliday As Recordset
Dim dbHolidayCheck As Database

CalcHolidays = 0
Set dbHolidayCheck = CurrentDb
Set rstHoliday = dbHolidayCheck.OpenRecordset("tlkpHoliday")
With rstHoliday
.MoveFirst
While Not .EOF
iholiday = rstHoliday!Holiday
If iholiday >= dStartDate And iholiday <= dEndDate Then
CalcHolidays = CalcHolidays + 1
End If
.MoveNext
Wend
End With

exitCalcHolidays:
Set dbHolidayCheck = Nothing
Set rstHoliday = Nothing
Exit Function

errCalcHolidays:
MsgBox Err & ": " & Err.Description
Resume exitCalcHolidays
End Function

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

1 @R05448
I can't sent an attach file which is contain 15 Kb. Anyway I will keep trying.
2 @R05453
Please see attachment to clarify the questions.
3 @R05492
ขอความกรุณาด้วยครับ อยากทราบจริงๆว่าทำยังไง
4 @R05505
แล้วทำไมไม่เขียนเป็นภาษาไทยตั้งแต่แรกละ
จะได้อ่านแล้วเข้าใจ
จะได้มีคนตอบ
5 @R05539
ต้องขอประทานโทษด้วยครับ ในตอนแรก Post จากที่ทำงานซึ่งใช้ภาษาไทยไม่ได้
ต่อมาในภายหลังเลย พยายาม Post ที่บ้าน ซึ่งใช้ภาษาไทยได้

ไม่ทราบว่าคุณ SSTT พอจะทราบคำตอบหรือเปล่าครับ
ขอความกรุณา คุณ SSTT ด้วยครับ ขอบคุณครับ...
6 @R05543
อ้างอิงกับไฟล์ที่คุณ TS.ส่งมานะครับ
ให้เพิ่ม textbox เปล่าลงไปในฟอร์ม
และกำหนดให้ control source
=Work_Days([BegDate],[EndDate])
7 @R05551
ขอขอบคุณ อ. access hotline มากครับ
ที่สละเวลาตอบ ผมจะลองดูนะครับ แล้วได้ผลอย่างไร
จะเรียนให้ทราบอีกทีครับ
8 @R05558
อ.สุภาพ และ อ.BADMAN ครับ
สำหรับ Funtion Work_Days ไม่มีปัญหาครับ สามารถ Run ได้แต่
Public Function CalcHolidays(dStartDate As Date, dEndDate As Date) As
Integer
On Error GoTo errCalcHolidays

Dim iholiday As Date
Dim iHolidayCount As Integer
Dim rstHoliday As Recordset
Dim dbHolidayCheck As Database

CalcHolidays = 0
Set dbHolidayCheck = CurrentDb
Set rstHoliday = dbHolidayCheck.OpenRecordset("tlkpHoliday")
With rstHoliday
.MoveFirst
While Not .EOF
iholiday = rstHoliday!Holiday
If iholiday >= dStartDate And iholiday <= dEndDate Then
CalcHolidays = CalcHolidays + 1
End If
.MoveNext
Wend
End With

exitCalcHolidays:
Set dbHolidayCheck = Nothing
Set rstHoliday = Nothing
Exit Function

errCalcHolidays:
MsgBox Err & ": " & Err.Description
Resume exitCalcHolidays
End Function

ไม่สามารถ Run ได้ครับ จะขึ้น Type Mismatch
เขาประการตัวแปร iHolidayCount แต่ไม่มีการใช้งานเลย
ผมไม่แน่ใจว่าตัวนี้หรือเปล่า
รบกวน อาจารย์ทั้งสองท่าน แนะนำด้วยครับ
ขอบพระคุณมากๆ ครับ
Suchat
ชลบุรี

9 @R05584
Funtion Work_Days ไม่มีปัญหาครับ ยังติดก็แต่
Function CalcHolidays เหมือนคุณ Suchat
ต้องขอโทษ อ. access hotline ที่เข้ามาตอบช้า
เนื่องจากเข้า Web ไม่ได้ในช่วงนี้

ผมได้แนบไฟลล์ที่ทำตามคำแนะนำ และ ส่วนที่ยังติด
(ทำต่อไม่ได้) ตามความเข้าใจของผม
รบกวน อาจารย์ทั้งสองท่าน แนะนำด้วยครับ
ขอบพระคุณครับ
10 @R05636
จาก code เป็นการคำนวณ วันหยุดพิเศษ ฟิลด์ iHoliday ในตาราง tblHoliday โดยเปรียบเทียบกับ วันใน dStartDate กับ dEndDate
แก้ที่บรรทัดนี้
iholiday = rstHoliday!Holiday
เป็น
iholiday = rstHoliday!iHoliday
เพื่อให้อ่านค่าจากฟิลด์ iholiday นำไปเปรียบเทียบ


ส่วนตัวแปร iHolidayCount
ไม่ได้ใช้ ลองดูไฟล์ที่แนบไปให้ครับ
11 @R05672
Sorry , again to type in thai.
I can't wait until arrive home and reply this topic.
It has been done successful with answer from tread 10

I'ld like to special thanks to both r-jarn Supab and
r-jarn Access Hotline who dedicated an acknowlege
to public place on this website.

Thank you again krub "Guru"

Best Regards,

TS,
12 @R05676
ขอโทษด้วยครับ ยังมีต่อ ....
คือ ยังมีอีกสองคำถาม
1) จะนับวันอย่างไร ถ้าทำงาน เสาร์ เว้น เสาร์ สมมุติ
เริ่มจาก เสาร์ ที่ผ่านมา 29/11/03 ทำงาน
เสาร์ ถัดไป 06/12/03 ไม่ทำงาน
เสาร์ ถัดไป 13/12/03 ทำงาน

2) วันพักร้อน มี 12 วัน ต่อหนึ่งปี โดยจะได้สิทธิ
1 วัน ต่อ 1 เดือน เช่น ในปี 2003 ใช้สิทธิพักร้อน
ไป 8 วัน เหลือ 4 วัน และในปี 2004 ทำงานถึงเดือน
เมษายน ฉะนั้น จึงมีสิทธิใช้วันลา 4+4 (หมายเหตุ
สมมุติว่า วันที่คำนวณปัจจุบัน = 30/04/2004 "ทำงาน
ครบเดือนจึงมีสิทธิใช้วันพักร้อน")

คำถามเหมือนเดิมครับ จะเริ่มต้นยังไง ???
ขอขอบคุณในความกรุณาอีกครั้งนึงครับ
13 @R05700
ไม่ทราบว่าแนวคิดนี้ถูกหรือเปล่าครับ
1) เริ่มจาก เสาร์ ที่ผ่านมา 29/11/03 ทำงาน (นับ1)
และบวกเพิ่มอีก7วัน เป็นไม่ทำงาน (ไม่นับ)
และบวกเพิ่มอีก7วัน เป็น ทำงาน (นับ2)
เสร็จแล้วเอาไปบวกกับ Function Work_Days

2) วันพักร้อน มี 12 วัน ต่อหนึ่งปี ให้นับ
Datediff Jan =1,Feb=2 .....Apr=4
check now() และ รวมผลย้อนหลังไป
ถึงตรงนี้ งงแล้วครับเพราะต้องการนับวันพักร้อน
ที่ใช้ไปแล้ว และ บวกกับที่กำลังจะใช้ ขณะเดียวกัน
ให้หักลบ วันเสาร์ที่ไม่ทำงาน,วันอาทิตย์.วันหยุดพิเศษ
ได้ผลลัพท์ เป็นวันพักร้อน จำนวน ??? วัน
ในกรณี Long Holiday ให้นับทุกวันหยุด เพื่อเป็นการ
วางแผนการใช้วันพักร้อนด้วย ต้องเพิ่มฟิลล์ด้วยหรือเปล่าครับ.

เริ่มต่อไม่ถูกแล้วครับไม่ทราบ อ. Access Hotline
มีคำแนะนำไหมครับ หรือท่านอื่นจะร่วมแจม ก็ยินดีครับ

ขออนุญาติแนบ File ประกอบครับ
ผมได้ทำ เทเบิล tblHolidaysAll สำหรับทุกวันหยุด
ในปี 2004 แล้วมี Check Box สำหรับ
G = Government , วันหยุดราชการ
B = Banks , วันหยุดแบงค์
C = Company , วันหยุดบริษัท
P = Options , วันหยุดอื่นๆ
หวังว่าคงมีประโยชน์สำหรับท่านอื่นๆ

ขอขอบคุณในทุกความเห็นครับ.
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0485s