กระทู้เก่าบอร์ด อ.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 >>=ชึ่งเป็นวันจันทร์
รบกวนท่านผู้รู้ช่วยแนะนำด้วยน่ะครับ
ถ้าตรงอยากให้เลือนไปเป็นวันจันทร์แทน
โดยมีเงื่อนไขคือ ถ้าเลือก 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
2 @R08160
รบกวน yeadram ช่วยอธิบายเพิ่มเติมอีกนิดครับว่าต้องเอาไปใช้งานยัง
คือผมมีความรู้น้อยเรื่อง VB
คือผมมีความรู้น้อยเรื่อง VB
3 @R08161
ขึ้นอยู่กับว่าคุณนำไปใช้ที่ไหน เหตุการณ์ไหนด้วยครับ
ถ้าจะใช้ในคิวรี่ หรือรายงานให้นำโค้ดไปเขียนเป็นฟังก์ชั่น เซฟไว้ในโมดูลก่อน แ
ล้วค่อยเรียกใช้จากคิวรี่
ถ้าจะใช้ในฟอร์ม ก็ขึ้นอยู่กับว่า จะใช้ในเหตุการณ์ไหนของฟอร์ม เช่น หลังจากกรอก term คุณก็เอาโค้ดไปฝังไว้ในเหตุกาณ์ Afterupdate ของ textbox ที่ให้กรอกฟอร์ม เป็นต้น
โค้ดที่ให้ไป มันเป็นคำสั่งแบบกลางๆ พร้อมประยุกต์ คือจะนำไปประยุกต์ใช้กับอะไรก็ได้ครับ
ถ้าจะใช้ในคิวรี่ หรือรายงานให้นำโค้ดไปเขียนเป็นฟังก์ชั่น เซฟไว้ในโมดูลก่อน แ
ล้วค่อยเรียกใช้จากคิวรี่
ถ้าจะใช้ในฟอร์ม ก็ขึ้นอยู่กับว่า จะใช้ในเหตุการณ์ไหนของฟอร์ม เช่น หลังจากกรอก term คุณก็เอาโค้ดไปฝังไว้ในเหตุกาณ์ Afterupdate ของ textbox ที่ให้กรอกฟอร์ม เป็นต้น
โค้ดที่ให้ไป มันเป็นคำสั่งแบบกลางๆ พร้อมประยุกต์ คือจะนำไปประยุกต์ใช้กับอะไรก็ได้ครับ
4 @R08341
รบกวนถามอีกนิดครับ
คือถ้าผมนำไปใช้กับคิวรี นำโค้ดไปเขียนเป็นฟังก์ชั่น เซฟไว้ในโมดู
อยากจะถ้าว่า จะต้องเขียนยังไงครับ
DueCount = ???
StartDate = ???
คือถ้าผมนำไปใช้กับคิวรี นำโค้ดไปเขียนเป็นฟังก์ชั่น เซฟไว้ในโมดู
อยากจะถ้าว่า จะต้องเขียนยังไงครับ
DueCount = ???
StartDate = ???
5 @R08342
เขียนฟังก์ชั่นไว้ในโมดูล
การเรียกใช้ฟังก์ชั่น ต้องส่ง อาร์กิวเมนต์เข้าไปในฟังก์ชั่น สองค่า คือ วันที่เริ่มต้น กับ จำนวนวันที่จะนับ
คำตอบ =myDue(ชื่อฟิลด์วันที่เริ่มต้น, จำนวนวันที่จะให้นับ)
ตัวอย่างเวลาเรียกใช้จากคิวรี่ ก็ให้เขียนเป็นนิพจน์ เรียกใช้ฟังก์ชั่น เช่น
DueDate : myDue(StartDate,3)
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ก็หายไป
แต่พอเรียกใช้งานฟังก์ชั่นในคิวรี เครื่องมันค้างไปเลยน่ะครับ
ไม่รู้จะแก้ยังไง รบกวนด้วยน่ะครับ
คือตอนแรกมัน 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) ลองดูครับ
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 มากๆๆเลยน่ะครับ
ที่ช่วยแนะนำ
ขอบคุณ yeadram และ คุณSak มากๆๆเลยน่ะครับ
ที่ช่วยแนะนำ
10 @R08636
ระวังนะครับ ผลไม่เหมือนกัน
สงสัยอาจเพราะผมตีโจทก์ผิดเลยออกมาแบบนั้น
ถ้าโจทก์คือ เริ่มวันศุกร์ แล้วนับเพิ่มอีกสองวัน
ฟังก์ชั่นของผม วันเสาร์กับวันอาทิตย์ ไม่มีการนับ
วันแรกคือวันจันทร์ วันที่สองคือวันอังคาร
ดังนั้น คำตอบของผมคือวันอังคาร
แต่ของคุณ Sak
วันแรกคือวันเสาร์ วันที่สองคือวันอาทิตย์
ไม่ว่าผลการบวกจะตกวันเสาร์หรือวันอาทิตย์ จะทดไปเป็นวันจันทร์เท่านั้น
ดังนั้นคำตอบของคุณ sak จะได้เพียงวันจันทร์
สงสัยอาจเพราะผมตีโจทก์ผิดเลยออกมาแบบนั้น
ถ้าโจทก์คือ เริ่มวันศุกร์ แล้วนับเพิ่มอีกสองวัน
ฟังก์ชั่นของผม วันเสาร์กับวันอาทิตย์ ไม่มีการนับ
วันแรกคือวันจันทร์ วันที่สองคือวันอังคาร
ดังนั้น คำตอบของผมคือวันอังคาร
แต่ของคุณ Sak
วันแรกคือวันเสาร์ วันที่สองคือวันอาทิตย์
ไม่ว่าผลการบวกจะตกวันเสาร์หรือวันอาทิตย์ จะทดไปเป็นวันจันทร์เท่านั้น
ดังนั้นคำตอบของคุณ sak จะได้เพียงวันจันทร์
11 @R08639
ใช่ครับ อย่างที่ อ.yeadram บอกนั่นหละครับ ตอนแรกผมก็คิดว่า ทำไมผลออกมาไม่เหมือนกัน ว่าจะโพสบอกอยู่เหมือนกันครับ แต่เข้าใจว่าความต้องการของ จขกท น่าจะต้องการแค่ว่าหากติดวันเสาร์หรือวันอาทิตย์ให้โปรแกรมคำนวณไปเป็นวันจันทร์แทนนะครับ .....
Time: 0.3346s
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