snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
gentoo
Member
Posts: 15 Joined: Thu Jul 15, 2010 8:55 pm
#1
Post
by gentoo » Fri Jun 29, 2012 8:41 pm
รบกวนท่านผู้รู้ครับ excel ที่ผมสร้างขึ้นนั้น พอผมจะเพิ่มหรือแก้ไขข้อมูลแล้วสั่งให้เก็บเป็น Data ข้อมูลที่บันทึกจะทับข้อมูลเก่า ไม่ทราบว่าผมจะแก้ไขอย่างไรครับ
(ซึ่งแนวทางตามที่ผมคิดไว้ผมควรจะเพิ่มจำนวนแถวก่อนเพิ่มหรือแก้ไขข้อมูล จึงอยากเรียนถามว่าผมควรเขียน Code อย่างไรครับ)
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30944 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#2
Post
by snasui » Fri Jun 29, 2012 8:50 pm
ช่วยอธิบายเพิ่มเติมครับว่างานที่ทำมีลำดับอย่างไร Code ที่ผิดพลาดนั้น ผิดพลาดอย่างไร ที่ถูกควรเป็นอย่างไร Code อยู่ที่ Module ใด ชื่อว่าอะไร จะได้เข้าถึงปัญหาได้เร็วขึ้นครับ
gentoo
Member
Posts: 15 Joined: Thu Jul 15, 2010 8:55 pm
#3
Post
by gentoo » Fri Jun 29, 2012 9:31 pm
ตัวอย่างเช่นถ้าผมต้องการเพิ่มข้อมูลของ Job No. ที่ SPJ55/0170 โดยผมต้องการเพิ่มข้อมูลในตารางเช่น เพิ่มรายการที่ 2 โดยเพิ่ม KVA เป็น 200 และทำการบันทึกข้อมูล
ข้อมูลที่บันทึกจะถูกส่งไปยัง Sheet "Data" แต่ข้อมูลที่บันทึกจะลบข้อมูลของ Job No. SPJ55/0171 ถึง SPJ55/0174 ทำให้ข้อมูลดังกล่าวหายไปครับ รายละเอียดตามเอกสารแนบครับ
จากการที่ข้อมูลถูกบันทึกทับนั้นเนื่องจากผมเขียนสั่งให้มีการบันทึกครั้งละ 7 รายการครับ ผมจึงมีแนวคิดว่าก่อนบันทึกผมควรเขียน code สั่งให้เพิ่มแถวจำนวน 7 แถวก่อนบันทึกครับไม่ทราบผมคิดถูกหรือไม่ครับ หรือว่าอาจารย์มีวิธีอื่นที่ดีกว่าช่วยกรุณาแนะนำด้วยครับ (ส่วน code เพิ่มแถวรบกวนอาจารย์ช่วยแนะนำการเขียนด้วยครับ)
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30944 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#4
Post
by snasui » Fri Jun 29, 2012 9:42 pm
สำหรับการแก้ Code เพื่อให้แทรกทีละเท่านั้นเท่านี้รายการคิดว่าไม่จำเป็นครับ การเพิ่มข้อมูลในฐานข้อมูล ให้เพิ่มต่อจากรายการสุดท้าย จะเรียงหรือไม่เรียงไม่ใช่ปัญหาครับ เมื่อเพิ่มต่อจากรายการสุดท้ายก็ย่อมจะไม่ทับรายการใดครับ
gentoo
Member
Posts: 15 Joined: Thu Jul 15, 2010 8:55 pm
#5
Post
by gentoo » Fri Jun 29, 2012 10:07 pm
อาจารย์แต่ข้อมูลที่ผมบันทึกผมยึด Job No เป็นตัวเรียกข้อมูลเพื่อทำการเพิ่มหรือแก้ไขครับ ซึ่งหากผมเปลี่ยน Job No ใหม่ ข้อมูลของ Job No นั้นก็จะเแสดงในตารางของ sheet "Form_STD" ซึ่ง sheet "Form_STD" นี้จะถูก link ไปยังแบบฟอร์มใบสั่งงานครับ หากทำตามที่อาจารย์แนะนำผมจะเรียกข้อมูลมาทำการแก้ไขอย่างไรครับโดยใช้ Job No เป็นตัวกำหนดครับ
อีกคำถามหนึ่งครับในการแทรกแถวนั้นผมต้องการให้แทรกแถวท้ายสุดของตำแหน่งที่ต้องการครับ พอดีผมเขียน code แล้วมันแทรกแถวบนสุดของตำแหน่งที่ต้องการ อยากให้อาจารย์ช่วยแนะนำด้วยครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30944 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#6
Post
by snasui » Fri Jun 29, 2012 10:23 pm
ช่วยทำตัวอย่างในไฟล์เดิมที่แนบมาครั้งแรกที่มี Code ทั้งหลายอยู่ครับ โยงลูกศรชี้ให้เห็นว่าต้องการคำตอบเป็นอย่างไรในไฟล์นั้นเลยจะได้สะดวกในการดูมากกว่าเขียนอธิบายแยกมาเป็นไฟล์อื่น
gentoo wrote: อาจารย์แต่ข้อมูลที่ผมบันทึกผมยึด Job No เป็นตัวเรียกข้อมูลเพื่อทำการเพิ่มหรือแก้ไขครับ ซึ่งหากผมเปลี่ยน Job No ใหม่ ข้อมูลของ Job No นั้นก็จะเแสดงในตารางของ sheet "Form_STD" ซึ่ง sheet "Form_STD" นี้จะถูก link ไปยังแบบฟอร์มใบสั่งงานครับ หากทำตามที่อาจารย์แนะนำผมจะเรียกข้อมูลมาทำการแก้ไขอย่างไรครับโดยใช้ Job No เป็นตัวกำหนดครับ
สามารถ Lookup ข้อมูลมาได้ตามต้องการครับ ข้อมูลไม่จำเป็นต้องอยู่ติดกันก็เรียกมาแสดงหรือปรับปรุงแก้ไขได้ครับ
gentoo wrote: อีกคำถามหนึ่งครับในการแทรกแถวนั้นผมต้องการให้แทรกแถวท้ายสุดของตำแหน่งที่ต้องการครับ พอดีผมเขียน code แล้วมันแทรกแถวบนสุดของตำแหน่งที่ต้องการ อยากให้อาจารย์ช่วยแนะนำด้วยครับ
เรื่องการแทรกเอาไว้ทีหลัง ถ้าไม่ต้องแทรกติดปัญหาอะไร แก้กันไปเรื่อย ๆ ก่อนครับ
gentoo
Member
Posts: 15 Joined: Thu Jul 15, 2010 8:55 pm
#7
Post
by gentoo » Sat Jun 30, 2012 7:15 am
[quote="snasui"]
ช่วยทำตัวอย่างในไฟล์เดิมที่แนบมาครั้งแรกที่มี Code ทั้งหลายอยู่ครับ โยงลูกศรชี้ให้เห็นว่าต้องการคำตอบเป็นอย่างไรในไฟล์นั้นเลยจะได้สะดวกในการดูมากกว่าเขียนอธิบายแยกมาเป็นไฟล์อื่น
อาจารย์ครับผมลองเอาไฟล์เดิมมาเขียนรายละเอียดขั้นตอนการทำงานของ code และปัญหาที่เกิดขึ้น พร้อมทั้งตัวอย่างคำตอบที่ต้องการครับ รายละเอียดตามเอกสารแนบครับ
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30944 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#8
Post
by snasui » Sat Jun 30, 2012 12:56 pm
ขอเล่าคร่าว ๆ ก่อนนะครับ ปกติการนำข้อมูลเข้า ไม่ว่าจะเป็น Update หรือเพิ่มควรจะแยกกับการเรียกข้อมูลขึ้นมาดูครับ
เมื่อเรียกดูแล้วต้องการแก้ไขก็ให้ไปกรอกในอีก Form เพื่อ Update , Add หรือ Delete นอกจากนี้ข้อมูลใน Data ควรจะมีรหัสใด ๆ ที่ทำหน้าที่เป็น
คีย์หลัก คือไม่ซ้ำกันเลยในแต่ละบรรทัดแม้ว่าจะเป็น Job No เดียวกันก็ตาม ในการ Update หรือ ลบ หรือ แก้ไข ก็จะใช้คีย์หลักที่ว่านั้นในการจัดการ กรณีเป็นการ Add ก็ให้ระบบสร้างคีย์หลักให้ใหม่
สำหรับที่ถามมาเพื่อแทรกบรรทัดก่อนที่จะนำข้อมูลมาวางนั้นผมปรับ Code มาให้ดูเป็นตัวอย่างตามด้านล่างครับ
Code: Select all
Sub InputDBF()
On Error Resume Next
Dim rAll As Range
Dim l As Long
With Sheets("Data")
Set rAll = .Range("A3", .Range("A" & Rows.Count).End(xlUp))
End With
For l = rAll.Count To 1 Step -1
If rAll(l) = Sheets("Form_Std").Range("F4")(1) Then
rAll(l).Offset(1, 0).Resize(6).EntireRow.Insert
Exit For
End If
Next l
MyVar = [InputRow]
[Target] = MyVar
End Sub
gentoo
Member
Posts: 15 Joined: Thu Jul 15, 2010 8:55 pm
#9
Post
by gentoo » Sat Jun 30, 2012 3:26 pm
snasui wrote: ขอเล่าคร่าว ๆ ก่อนนะครับ ปกติการนำข้อมูลเข้า ไม่ว่าจะเป็น Update หรือเพิ่มควรจะแยกกับการเรียกข้อมูลขึ้นมาดูครับ
เมื่อเรียกดูแล้วต้องการแก้ไขก็ให้ไปกรอกในอีก Form เพื่อ Update , Add หรือ Delete นอกจากนี้ข้อมูลใน Data ควรจะมีรหัสใด ๆ ที่ทำหน้าที่เป็น
คีย์หลัก คือไม่ซ้ำกันเลยในแต่ละบรรทัดแม้ว่าจะเป็น Job No เดียวกันก็ตาม ในการ Update หรือ ลบ หรือ แก้ไข ก็จะใช้คีย์หลักที่ว่านั้นในการจัดการ กรณีเป็นการ Add ก็ให้ระบบสร้างคีย์หลักให้ใหม่
สำหรับที่ถามมาเพื่อแทรกบรรทัดก่อนที่จะนำข้อมูลมาวางนั้นผมปรับ Code มาให้ดูเป็นตัวอย่างตามด้านล่างครับ
[/code]
ขอบพระคุณอาจารย์มากครับที่ได้ช่วยแนะนำครับ ผมคิดว่าต้องทำใหม่ตามที่อาจารย์แนะนำครับเนื่องจากหากทำตามวิธีที่ผมทำนั้นคงไม่ถูกต้องครับเนื่องจากผมหา คีย์หลัก ไม่ได้ครับหากหาไม่มีจริงๆ ผมอาจต้องสร้างคีย์หลักขึ้นมาเพื่อให้ง่ายต่อการทำงานครับ
ส่วนการแทรกบรรทัดนั้นผมคงไม่ได้เอามาใช้ในงานนี้ครับแต่จะใช้อีกงานหนึ่งครับ ต้องขอบพระคุณอาจารย์อีกครั้งที่ได้แนะนำครับ