กระทู้เก่าบอร์ด อ.Yeadram
        
           3,105   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.5046s
    
      
		
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