วันที่ Duedate
กระทู้เก่าบอร์ด อ.Yeadram

 2,926   11
URL.หัวข้อ / URL
วันที่ Duedate

คือไม่อยากให้วันที่ Duedate ตรงกับวันเสาร์และอาทิตย์
ถ้าตรงอยากให้เลือนไปเป็นวันจันทร์แทน
โดยมีเงื่อนไขคือ ถ้าเลือก AA + 3วัน ,BB +5 วัน จากวันที่ Start
สมมุติ
     Startdate = 2/feb/11 =>ตรงกับวัน พุธ    ถ้าเลือก AA
     Duedate = 5/feb/11 =>>มันตรงกับวันเสาร์
อยากให้เลือนเป็นวันที่ 7/feb/11 >>=ชึ่งเป็นวันจันทร์

รบกวนท่านผู้รู้ช่วยแนะนำด้วยน่ะครับ

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

1 @R08156
DueCount = ' your term
StartDate = ' your startdate

Do
x = dateadd("d",1, StartDate)
if weekday(x,vbMonday) < 6 then DueCount = Duecount -1
Loop untit DueCount =0

DueDate = x    ' your answer
2 @R08160
รบกวน yeadram ช่วยอธิบายเพิ่มเติมอีกนิดครับว่าต้องเอาไปใช้งานยัง

คือผมมีความรู้น้อยเรื่อง VB
3 @R08161
ขึ้นอยู่กับว่าคุณนำไปใช้ที่ไหน เหตุการณ์ไหนด้วยครับ
ถ้าจะใช้ในคิวรี่ หรือรายงานให้นำโค้ดไปเขียนเป็นฟังก์ชั่น เซฟไว้ในโมดูลก่อน แ
ล้วค่อยเรียกใช้จากคิวรี่
ถ้าจะใช้ในฟอร์ม ก็ขึ้นอยู่กับว่า จะใช้ในเหตุการณ์ไหนของฟอร์ม เช่น หลังจากกรอก term คุณก็เอาโค้ดไปฝังไว้ในเหตุกาณ์ Afterupdate ของ textbox ที่ให้กรอกฟอร์ม เป็นต้น

โค้ดที่ให้ไป มันเป็นคำสั่งแบบกลางๆ พร้อมประยุกต์ คือจะนำไปประยุกต์ใช้กับอะไรก็ได้ครับ
4 @R08341
รบกวนถามอีกนิดครับ
คือถ้าผมนำไปใช้กับคิวรี นำโค้ดไปเขียนเป็นฟังก์ชั่น เซฟไว้ในโมดู
อยากจะถ้าว่า จะต้องเขียนยังไงครับ
DueCount = ???
StartDate =   ???

5 @R08342
เขียนฟังก์ชั่นไว้ในโมดูล

Public Function myDue(bgDate as date, DueCount as long) as date
if DueCount < 1 then
myDue=bgDate
Exit Function
End if

dim x as date
Do
x = dateadd("d",1, bgDate)
if weekday(x ,vbMonday) < 6 then DueCount = Duecount -1
Loop untit DueCount = 0
myDue = x
End Function


การเรียกใช้ฟังก์ชั่น ต้องส่ง อาร์กิวเมนต์เข้าไปในฟังก์ชั่น สองค่า คือ วันที่เริ่มต้น กับ จำนวนวันที่จะนับ
คำตอบ =myDue(ชื่อฟิลด์วันที่เริ่มต้น, จำนวนวันที่จะให้นับ)

ตัวอย่างเวลาเรียกใช้จากคิวรี่ ก็ให้เขียนเป็นนิพจน์ เรียกใช้ฟังก์ชั่น เช่น
DueDate : myDue(StartDate,3)
6 @R08621
ผมลองทำตามคำแนะนำแล้วครับ
คือตอนแรกมัน error ตรง
Loop untit DueCount = 0
แก้เป็น
Loop until DueCount = 0
Errorก็หายไป

แต่พอเรียกใช้งานฟังก์ชั่นในคิวรี เครื่องมันค้างไปเลยน่ะครับ
ไม่รู้จะแก้ยังไง รบกวนด้วยน่ะครับ
7 @R08623
แก้ไขฟังก์ชั่นครับ ก่อนนั้นเขียนสดไม่ได้ทดสอบ

Public Function myDue(bgDate As Date, DueCount As Long) As Date
If DueCount > 0 Then
    Do
        bgDate = DateAdd("d", 1, bgDate)
        If Weekday(bgDate, vbMonday) < 6 Then DueCount = DueCount - 1
    Loop Until DueCount = 0
End If
myDue = bgDate
End Function
8 @R08625
ลองดูอันนี้ครับ

Public Function DueDate(xDate As Date, xDay As Integer) As Date
DueDate = xDate + xDay
xVar = Weekday(DueDate)
    Select Case xVar
            Case Is = 1
            DueDate = DueDate + 1
            Case Is = 7
            DueDate = DueDate + 2
    End Select
End Function

เวลานำไปใช้กับ Query ก็ให้ ใส่ชื่อ ฟังก์ชั่น ที่ผม เขียน เช่น
DueDate (#23/03/2554#,3) ลองดูครับ
9 @R08631
ทำได้แล้วครับ ได้ทั้ง2 แบบเลย
ขอบคุณ yeadram และ คุณSak มากๆๆเลยน่ะครับ
ที่ช่วยแนะนำ
10 @R08636
ระวังนะครับ ผลไม่เหมือนกัน
สงสัยอาจเพราะผมตีโจทก์ผิดเลยออกมาแบบนั้น

ถ้าโจทก์คือ เริ่มวันศุกร์ แล้วนับเพิ่มอีกสองวัน

ฟังก์ชั่นของผม วันเสาร์กับวันอาทิตย์ ไม่มีการนับ
วันแรกคือวันจันทร์ วันที่สองคือวันอังคาร
ดังนั้น คำตอบของผมคือวันอังคาร


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