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] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#21
Post
by bank9597 » Mon Oct 17, 2011 5:57 pm
อาจารย์ครับ มีปัญหาอีกแล้วครับ
คือว่าเวลาผมเรียกข้อมูลมาแก้ไข พอแก้ไขเสร็จ ผมก็กดอัพเดท ปรากฏว่ามันจะล้างค่า Validation Define-name ไปหมดเลยครับ
ไม่ทราบว่า เราจะแก้ไขตรงนี้อย่างไรดีครับ
Model.xlsm
You do not have the required permissions to view the files attached to this post.
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#22
Post
by snasui » Mon Oct 17, 2011 6:36 pm
ลองปรับ Code ShowData ตามด้านล่างครับ
จาก
Code: Select all
Sub ShowData()
'Other code
.Range(.Range("B3").End(xlDown).Offset(1, 0), .Range("I" & rl)).Clear
'Other code
End Sub
ปรับเป็น
Code: Select all
Sub ShowData()
'Other code
.Range(.Range("B3").End(xlDown).Offset(1, 0), .Range("I" & rl)).ClearContents
.Range(.Range("B3").End(xlDown).Offset(1, 0), .Range("I" & rl)).ClearFormats
'Other code
End Sub
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#23
Post
by bank9597 » Mon Oct 17, 2011 9:02 pm
ผมหาไม่เจอครับอาจารย์
ขออภัยที่ผมไม่ได้บอกให้ชัดเจน ตอนนี้โมดูล 7และ 8 ผมไม่ได้ใช้งานครับ
ส่วนโมดูลที่เกี่ยวกับการ Update,Delete,Add อยู่ในโมดูลที่ 4 ครับ
รบกวนลองดูใหม่้อีกทีได้ไหมครับ (โค๊ดการเพิ่มข้อมูลยังใช้การไม่ได้ครับ)
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#24
Post
by snasui » Tue Oct 18, 2011 9:25 am
จากไฟล์แนบ Module4 มีแค่ Code ด้านล่างซึ่งเกี่ยวกับการ Search เท่านั้น ไม่มี Update, Delete, Add ครับ
Code: Select all
Sub Button2_Click()
Dim rFind As Range, rDataAll As Range
Dim r As Range, rTarget As Range
Set rFind = Sheets("Edit").Range("D2")
If Sheets("Edit").Range("D2") = "" Then Exit Sub
With Sheets("DataStore")
Set rDataAll = .Range("B2", .Range("B" & Rows.Count).End(xlUp))
If .Columns("b:b").Find(rFind, LookIn:=xlValues) Is Nothing Then
MsgBox ("äÁèÁÕàÅ¢ PO ¹Õé")
Exit Sub
End If
End With
For Each r In rDataAll
If r = rFind Then
Set rTarget = Sheets("Edit").Range("B" & Rows.Count).End(xlUp) _
.Offset(1, 0)
r.Resize(1, 9).Copy
rTarget.PasteSpecial xlPasteValues
rTarget.Offset(0, -1) = Date
End If
Next r
Application.CutCopyMode = False
MsgBox "Get data has finished."
End Sub
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#25
Post
by bank9597 » Tue Oct 18, 2011 9:45 am
เซ็งเลยครับ ผมพลาดเอง ขออภัยครับ
โค๊ดที่ว่าอยู่ในโมดูลที่ 6 ครับ
Code: Select all
Sub Update()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
On Error Resume Next
With Worksheets("Edit")
Set rsAll = .Range("B4", .Range("B" & Rows.Count).End(xlUp))
End With
With Worksheets("DataStore")
Set rtAll = .Range("B2", .Range("B" & Rows.Count).End(xlUp))
End With
For Each rs In rsAll
For i = rtAll.Count To 1 Step -1
If rs = rtAll(i) And rs.Offset(0, 8) = rtAll(i).Offset(0, 8) _
And rs.Offset(0, 9) = "Update" Then
rs.Offset(0, -1).Resize(1, 10).Copy
rtAll(i).Offset(0, -1).PasteSpecial xlPasteValues
End If
Next i
Next rs
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
โค๊ดนี้เป็นโค๊ด Update ข้อมูลครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#26
Post
by snasui » Tue Oct 18, 2011 10:35 am
เปลี่ยนการ Assign Macro ที่ปุ่ม
ปรับปรุงรายการ ให้เรียกใช้ Procedure Update แทน เรียก Procedure UpdateData ครับ
สร้าง Validation เตรียมไว้ในชีท Edit ใหม่แล้วลองทดสอบ Run ดู แล้วรายงานผลมาอีกรอบครับ
เพื่อป้องกันการสับสน Code ที่ไม่ใช้หรือจะเก็บไว้ใช้กับงานอื่นให้ Save เป็นอีกไฟล์แล้วแนบเฉพาะ Code ที่ใช้งานมาถามกันจะสะดวกในการถามและตอบมากกว่าครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#27
Post
by bank9597 » Tue Oct 18, 2011 11:30 am
ครับอาจารย์ เดี๋ยวผมจะลองเปลี่ยนดู (ไม่มั่นใจว่าจะได้แค่ไหน)
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#28
Post
by bank9597 » Wed Oct 19, 2011 2:45 pm
ปรากฏว่ามันจะล้างค่า Validation Define-name ไปหมดเลยครับ
ผมแก้ได้แล้วครับอาจารย์
อยากให้อาจารย์ช่วยดูโค๊ดการเพิ่ม Record ใหม่ให้หน่อยครับ เพราะนอกจากจะมีการ แก้ไข,ลบ ข้อมูลแล้ว ยังมีการเพิ่มข้อมูลใหม่ลงไปอีก
ยกตัวอย่างเช่น PO 101 มีรายการสั่งซื้อ 10 รายการ ซึ่งได้ทำใบสั่งบันทึกลงในระบบแล้ว แต่บังเอิญว่าต้องการเพิ่มรายการสั่งซื้อไปอีก 2 รายการต่อจาก 10 รายการเดิม ใน Po 101 ไม่รู้ว่าต้องเขียนโคีดอย่างไรเพราะเท่าที่ทราบคือ การเพิ่มข้อมูลลงไปจำเป็นต้องมีการ Insert Record ใหม่ลงไป ต่างกับการลบและแก้ไข ที่ทำงานอยู่บนข้อมูลจำนวน Record เท่าเดิม เมื่อเป็นดังนี้ผมเลยดัดแปลงโค๊ดไม่ได้เลย (ความรู้ยังงูๆปลาๆ ครับ)
รบกวนอาจารย์ด้วยครับ
Model.xlsm
You do not have the required permissions to view the files attached to this post.
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#29
Post
by snasui » Wed Oct 19, 2011 2:53 pm
bank9597 wrote: แต่บังเอิญว่าต้องการเพิ่มรายการสั่งซื้อไปอีก 2 รายการต่อจาก 10 รายการเดิม ใน Po 101 ไม่รู้ว่าต้องเขียนโคีดอย่างไรเพราะเท่าที่ทราบคือ การเพิ่มข้อมูลลงไปจำเป็นต้องมีการ Insert Record ใหม่ลงไป
มีเหตุผลใดที่ต้องแทรกรายการครับ ปกติการเพิ่มรายการในฐานข้อมูลเราจะนำไปต่อท้ายรายการล่าสุดครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#30
Post
by bank9597 » Wed Oct 19, 2011 3:06 pm
ครับอาจารย์ ตรงนี้แล้วแต่ครับอาจารย์ ที่กล่าวไปนั้นเป็นเพียงความคิดเห็นของผม ไม่ได้ยึดตามหลักความเป็นจริงว่าเขาทำกันอย่างไร ขออภัยด้วยครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#31
Post
by snasui » Wed Oct 19, 2011 3:43 pm
ผมเขียนตัวอย่าง Code สำหรับการ Add รายการเพิ่มจากเดิมใน Sheet DataStore โดยนำรายการที่มีคำว่า Add ในชีท Edit ไปใช้ ตามด้านล่างครับ
Code: Select all
Sub AddData()
Dim rAll As Range, rs As Range
Dim rt As Range
With Sheets("Edit")
Set rAll = .Range("K4", .Range("K" & Rows.Count).End(xlUp))
End With
For Each rs In rAll
With Sheets("DataStore")
Set rt = .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End With
If rs = "Add" Then
rs.Offset(0, -10).Resize(1, 10).Copy
rt.PasteSpecial xlPasteValues
End If
Next rs
Application.CutCopyMode = False
End Sub
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#32
Post
by bank9597 » Wed Oct 19, 2011 4:10 pm
เยียมเลยครับ ขอบคุณมากครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ