Page 1 of 2

ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Mon Mar 21, 2011 6:48 pm
by godman
สวัสดีครับ อาจารย์ ผมได้รับมอบกหมายให้ดูแลระบบการจัดการของเสียในบริษัทแห่งหนึ่ง และผมอยากทำโปรแกรมการจัดการของเสียโดยใช้ Excel ปล เพราะผมทำโปรแกรมอื่นไม่เก่ง
ผมแนบไฟล์ที่ผมกำลังทำอยู่มาขอความช่วยเหลือครับ
ความต้องการครับ
1. ให้ผู้ใช้กด ADD เพื่อเพิ่มรายการที่จะบันทึกข้อมูลของเสียแล้วมันก็จะ link ไปหน้า WasteRecord ครับ
2.เมื่อผู้ใช้บันทึกจบกระบวนการทุกช่องแล้ว ให้ผู้ใช้กด OK แล้วผมอยากให้ แถวที่ 14 มันลดมา 1 แถวตาม
ปริมาณข้อมูลของผู้ใช้ครับ ผมต้องเขียน Macro อย่างไรครับ โดยคำว่า Deleted ก็ต้องมาด้วย
คำตอบ น่าจะประมาณนี้
ผมมีตัวอย่างสิ่งที่เป็นความต้องการอยู่ในไฟล์แนบครับ

รบกวนอาจารย์ด้วยครับ ผมหวังว่าสิ่งนี้เป็นประโยชน์สำหรับผู้ที่อยากนำไปใช้งานต่อด้วย และส่งผมต่อการจัดการสิ่งแวดล้อมของทุกบริษัทด้วยครับ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Mon Mar 21, 2011 7:23 pm
by snasui
ช่วยทำตัวอย่างการกรอกข้อมูลมาให้ดูสักตัวอย่างครับว่ากรอกข้อมูลช่องไหนบ้าง

กรณีไม่ได้บันทึกลงฐานข้อมูล แต่ให้ไปแสดงอีก Worksheet แบบรายการเดียว ไม่จำเป็นต้องใช้ Macro ครับ ใช้การ Link ธรรมดาก็พอ

และหากกดแป้น Delete ต้องการให้ Clear ข้อมูลที่ไหนครับ

ปกติการกดแป้น Add ควรจะบันทึกลงฐานข้อมูล และหากเราบันทึกแล้วพบว่าไม่ถูกต้องสามารถกดแป้น Delete เพื่อลบรายการนั้นทิ้ง

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Mon Mar 21, 2011 7:43 pm
by godman
1.ข้อมูลที่จะกรอกคือข้อมูลที่อยู่ชี้ต Waste Record Cell D7,D8,D9,D11,D12,D13 โดยให้ผู้ใช้เลือกจาก DropDown list ที่กำหนดให้ยกเว้นช่อง QTY ช่องเดียวที่ต้อง fill in by manual ครับ ปล ผู้ใช้เมื่อกด Add ซึ่งผมจะทำ hyperlink ไว้ไปที่ชี้ต Waste record
2.ใช่ครับ การ ADD ต้องทำลงฐานข้อมูล ผมลืมไปผมทำ sheet ชื่อ Database เพิ่มแล้วครับ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Mon Mar 21, 2011 7:45 pm
by godman
อาจารย์ครับ ผมอาจจะปิดเนตประมาณชั่วโมงนะครับ เพราะจะกลับบ้านซึ่งใช้เวลาเดินทางประมาณ 1 ชั่วโมงจากที่ทำงาน แล้วผมจะเปิดหาอาจารย์อีกตอนประมาณ 3 ทุ่ม ครับ ถ้าอาจารญ์ยังไม่นอนนะ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Mon Mar 21, 2011 8:30 pm
by snasui
ผมเขียน Macro มาให้ตามไฟล์แนบครับ เรื่องการลดบรรทัดมา 1 แถวคงต้องแจ้งมาอีกรอบจากไฟล์นี้ครับว่าต้องการให้ลบบรรทัดไหน อย่างไร

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Wed Mar 23, 2011 2:57 pm
by godman
ผมลองกดที่ Add มันขึ้น error ตรง false ครับ
Sub PasteData()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Temp").Range("A2:F2")
Set rt = Worksheets("Database").Range("65536").End(xlUp) _
.Offset(1, 0)
rs.Copy
rt.PasteSpecial xlPasteValues
Application.CutCopyMode = fasle
End Sub

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Wed Mar 23, 2011 3:46 pm
by godman
ต้องขออภัยครับ ที่ผมถามคำถามไม่เคลียร์ ผมได้แก้ไขความต้องการของผมให้ชัดเจนขึ้น
โดยผมอยากให้กด OK แล้วข้อมูลที่กรอกจะไปโผล่ที่ชี้ต Incomplete แต่ว่าบรรทัดต้องเลื่อนลง 1 บรรทัดไปเรื่อยๆตามแต่จะกด OK กี่ครั้งแต่มีข้อแม้ว่า ปุ่ม Hyperlink Add และ Macor Deleted ต้องขยับตาม เพื่อรอท่าให้พร้อมกดจะลบหรือไม่หรือยืนยัน ก็กด Finish ครับเพื่อบันทึกข้อมูลทั้งหมดทุกรายการที่เลือก ครับผม

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Wed Mar 23, 2011 8:03 pm
by snasui
ผมทำเพิ่มมาให้แล้ว ดูตามไฟล์แนบครับ

สำหรับปุ่ม Add และ Delete ในชีท Incomplete ต้องการให้ทำอะไรครับ :?:

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Wed Mar 23, 2011 9:47 pm
by godman
อ๋อ สำหรับปุ่ม ADD ผมเอาไว้เพื่อให้ User ที่ต้องการเพิ่มรายการก็กด ADD แล้ว ADD ก็จะพาเราไปยง sheet Wasterecord เพื่อใส่รายการของเสียที่จะเพิ่ม (กำหนดให้เพิ่มทีละรายการ)
ส่วน Delete คือถ้าข้อมูลที่เพิ่มมาแล้วต้องการแก้ไข หรือไม่เอา ก็ให้กด Delete แถวน้นทิ้งไปครับ

ผมคิดว่าผมลอกโปรแกรมอื่นที่เขาไม่ได้ใช้ Excel เขียนมาก็เลยดูแปลกๆ ขอคำแนะนำของอาจารย์ด้วยครบว่าควรจะ ADAPT อย่างไรที่เหมาะสมครบ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Thu Mar 24, 2011 6:42 pm
by godman
อาจารย์ครับ ผมลองใช้แล้ว ปุ่ม Macro OK หน้า Wasterecord ใช้ได้ครับ มันสามารถนำข้อมูลมาต่อกันไปได้เรื่อยๆ ขอย้ำว่า เรื่อยๆ แต่ว่าของผมถ้า User หยุดเพิ่มรายการแล้ว ทำอย่างไรดีครับ
เขาจะต้องกดปุ่ม Finish เพื่อบันทึกข้อมลหน้า Incomplete ข้อมูลครับMacro บันทึกต้องเขียนอย่างไรครับ

แล้วเมื่อบรรทึกข้อมูลแล้ว จะ Clear เพื่อกลับไปสู่สภาพเดิมเพื่อรอคนอื่นมาคีย์ ต้องสร้างปุ่ม Delete ทั้งหมดต้องเขียนอย่างไรครับ
พอดี Macro Deleted ของผมมีปัญหา Bug ครับ

คำถามสุดท้่ายครับ ผมอยากให้ วันที่ มีเวลาแสดงด้วย ระดับ ชั่ว โมง นาที ทำอย่าไรครับ เช่น 12-3-2011 16:00 จะต้องเซ็ตอย่างไรใน Date Time Format หรือไม่อย่างไรครับ

ขอบพระคุณครับ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Thu Mar 24, 2011 7:17 pm
by snasui
เรื่องการออกแบบฟอร์มขึ้นอยู่กับความสะดวกของผู้ใช้ครับ ผมอาจจะแนะนำไม่ได้มาก

ผมได้เขียนให้สามารถเลือก Delete ได้ตามต้องการ คือ ถ้าบรรทัดไหนไม่ต้องการก็ให้ไปเลือก Deleted จาก Validation จากนั้นคลิกปุ่ม Finish โปรแกรมจะลบบรรทัดที่ไม่ต้องการทิ้งไป

สำหรับข้อมูลที่วิ่งไป Database ไม่ทราบว่าจะให้ใช้ข้อมูลจากชีท WasteRecord หรือชีท Incomplete ครับ :?:

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Thu Mar 24, 2011 7:23 pm
by godman
เป็นข้อมูลจาก Sheet Incomplete ครับผมเพื่อบันทึกข้อมูลสุดท้ายที่ผู็ใช้ยืนยันรายการโดยให้กดที่ปุ่ม Finish ครับ
อาจารย์ครับ ผมอยากให้วันที่ มันบอกเวลาที่บันทึกได้ด้วยครับ ต้องทำอย่างไรครับ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Thu Mar 24, 2011 8:48 pm
by snasui
การให้บันทึกวันที่ เวลา ให้กรอกค่าในเซลล์เป้าหมายเป็น =Now() จากนั้นจัด Format ให้แสดงวันที่และเวลา ผมปรับไฟล์มาให้ใหม่แล้ว ลองดูตามไฟล์แนบครับ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Thu Mar 24, 2011 9:40 pm
by godman
ขอบพระคุณเป็นอย่างสูงครับ ใช้ได้ดีมากครับ ผมมีคำถามจากผู้จัดการผม เขาต้องการให้ผม PasteData ไปวางไว้อีก ไฟล์ต่างหาก เขาบอกว่าไฟล์ที่ผมใช้อยู่ใหญ๋เกิดไป และทำให้เปิดช้า ผมอยากทราบว่าผมต้องแก้ไขหรือเพิ่มเติม สูตร Macor ตรงใหนบ้างครับ เช่สตามตัวอย่างนี้
Sub RecordToDatabase()
Dim rs As Range
Dim rt As Range
If Worksheets("Incomplete").Range("B14") = "" Then Exit Sub
With Worksheets("Temp")
.Range("A8:H42").Replace What:="#", Replacement:="="
Set rs = .Range("A8", .Range("H7").Offset(.Range("I7").Value, 0))
End With
Set rt = Worksheets("Database").Range("A65536").End(xlUp).Offset(1, 0)
rs.Copy
rt.PasteSpecial xlPasteValues
Worksheets("Temp").Range("A8:H42").Replace What:="=", Replacement:="#"
Application.CutCopyMode = False
End Sub

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Thu Mar 24, 2011 9:44 pm
by godman
ผมควรจะถามว่า แล้วผมจะประยุกต์ใช้ได้กับทุก Macro ได้ด้วยใช่ไหมครบ จากที่ผมวางข้อมูลใน sheet ผมจะเปลี่ยนรูปแบบการวางเป็นวางในไฟล์ข้อมูลใช่ไหมครับ
ผมลืมไปว่าสมมุติว่า ไฟล์ชื่อ DatabaseWasteTrack2011

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Thu Mar 24, 2011 10:35 pm
by snasui
ผมปรับ Code มาให้ตามด้านล่างครับ ไฟล์ที่จะนำข้อมูลไปวางต้องมีชีทชื่อว่า Database อยู่ด้วยนะครับ นอกจากนี้ต้องเปิดไฟล์เป้าหมายไว้ด้วยครับ

Code: Select all

Sub RecordToDatabase()
Dim rs As Range
Dim rt As Range
If Worksheets("Incomplete").Range("B14") = "" Then Exit Sub
With Worksheets("Temp")
    .Range("A8:H42").Replace What:="#", Replacement:="="
    Set rs = .Range("A8", .Range("H7").Offset(.Range("I7").Value, 0))
End With
Set rt = Workbooks("DatabaseWasteTrack2011.xls").Worksheets("Database").Range("A65536").End(xlUp).Offset(1, 0)
rs.Copy
rt.PasteSpecial xlPasteValues
Worksheets("Temp").Range("A8:H42").Replace What:="=", Replacement:="#"
Application.CutCopyMode = False
End Sub

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Fri Mar 25, 2011 4:10 pm
by godman
ขอบพระคุณเป็นอย่างสูงครับ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Sat Mar 26, 2011 11:04 am
by godman
ผมพบปัญหาเนื่องจากผมไปปรับแต่งครับ
คือว่าหัวหน้าผมเขาให้ลดขั้นตอนการคีย์จาก USER ลงโดยให้ใช้ Datavalidation ใส่ข้อมูลลงไปโดยตรงแทนที่การ ไปใส่ในฟอร์มทีละรายการ ครานี้ผมไปลดคอลัมพ์ เพื่อจัดระเบียบหน้าตาใหม่ พอผมกด ปุ่ม Finish แล้วตามไปดูที่ File ที่ผมไว้เก็บข้อมูลคือ File DatabaseWasteTrack2011 ปรากฏว่าตัวเลขจำนวน หรือข้อมูลไม่ตรงกับที่ใส่ไป มันออกมาเป็ฯ 0 หลายรายการทั้งๆที่ข้อมูลในฟอร์มมี
ผมขอให้อาจารย์ช่วยดูหน่อยครับว่าเกิดจากอะไร ผมทำอะไรพลาดไปครับ ผมแนบบ 2 ไฟล์มาเพื่อดูข้อมูล ณ ปัจจุบันครับ

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Sat Mar 26, 2011 12:21 pm
by snasui
คุณ godman ต้อง Link ค่าในฟอร์มไปไว้ในชีท Temp ใหม่ครับ

ดูตัวอย่างการ Link ตามไฟล์แนบ ซึ่งผม Link มาให้บางส่วน เพราะคุณให้ชื่อ Field ไม่เหมือนกัน เลยไม่ทราบว่า Field ต่อไปนี้ในชีท Temp คือ Field ไหนในชีท Incomplete ซึ่งได้แก่ Area, Id และ Itemno

Re: ขอ Code VBA เพื่อสร้างระบบการจัดการของเสีย

Posted: Sun Mar 27, 2011 8:47 pm
by godman
ขอบพระคุณครบ