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
#1
Post
by bank9597 » Tue Dec 17, 2013 6:14 pm
จากโค๊ดด้านล่าง ผมไม่แน่ใจว่ามีอะไรผิดพลาด โค๊ดไม่อัพเดทข้อมูลให้ ซึ่งปกติหากเปิดไฟล์ทั้งสองอยู่ ก็สามารถอัพเดทข้อมูลได้ปกติครับ รบกวนดูให้หน่อยครับ
Code: Select all
Option Explicit
Dim db As Worksheet
Dim ws As Worksheet
Dim objWorkbook As Workbook
Private Sub cmd_save_Click()
Set objWorkbook = Workbooks.Open("D:\ระบบงานออฟฟิศ\database.xlsm")
Set db = objWorkbook.Sheets("tbl_supplier")
Set ws = Workbooks("center.xlsm").Worksheets("temp_sup")
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
If Me.txt_name <> "" Then
Set rsAll = ws.Range("A13:K13")
Set rtAll = db.Range("A2", db.Range("A" & Rows.Count).End(xlUp))
For Each rs In rsAll
For i = rtAll.Count To 1 Step -1
If rs = rtAll(i) And rs.Offset(0, 0) = rtAll(i).Offset(0, 0) Then
rs.Offset(0, 1).Resize(1, 10).Copy
rtAll(i).Offset(0, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox ("อัพเดทข้อมูลเรียบร้อยแล้ว")
ws.Range("C17:K17").ClearContents
End If
Next i
Next rs
Else
MsgBox "คุณยังไม่ระบุชื่อบุคคล", vbCritical
End If
objWorkbook.Close True
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#2
Post
by snasui » Tue Dec 17, 2013 6:48 pm
ลอง Run ดูทีละ Step แล้วสังเกตดูว่า Code สำหรับการ Copy และ Paste ทำงานหรือไม่ครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#3
Post
by bank9597 » Tue Dec 17, 2013 9:41 pm
snasui wrote: ลอง Run ดูทีละ Step แล้วสังเกตดูว่า Code สำหรับการ Copy และ Paste ทำงานหรือไม่ครับ
ครับผม เดี๋ยวจะมารายงานผลอีกครั้งครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#4
Post
by bank9597 » Fri Dec 20, 2013 4:57 pm
รบกวนด้วยครับอาจารย์ แก้ไม่ได้ซักที
ผมแนบไฟล์ทั้งสองมาให้ครับ
โมดูล cmd_save ในไฟล์ center.xlsm ครับ
You do not have the required permissions to view the files attached to this post.
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#5
Post
by snasui » Fri Dec 20, 2013 6:12 pm
อาการของการ Update ข้อมูลไม่ได้โปรแกรมฟ้องหรือแสดงผลอย่างไรครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#6
Post
by bank9597 » Fri Dec 20, 2013 8:32 pm
snasui wrote: อาการของการ Update ข้อมูลไม่ได้โปรแกรมฟ้องหรือแสดงผลอย่างไรครับ
อัพเดทข้อมูลไม่ได้ครับ ถ้าผมใช้โค๊ดแค่
Code: Select all
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With ws
Set rsAll = .Range("A13")
Set rs = .Range("A13:A13")
End With
With db
Set rtAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
End With
With ws
For Each rs In rsAll
For i = rtAll.Count To 1 Step -1
If rs = rtAll(i) And rs.Offset(0, 0) = rtAll(i).Offset(0, 0) Then
rs.Offset(0, 1).Resize(1, 10).Copy
rtAll(i).Offset(0, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox ("อัพเดทข้อมูลเรียบร้อยแล้ว")
End If
Next i
Next rs
End With
แล้วเปิดไฟล์ทั้งสองอยู่ มันจะอัพเดทได้ปกติครับ แต่พอปิดไฟล์ database แล้วเรียกขึ้นมาบันทึก มันก็อัพเดทไม่ได้ซะงั้น
ผมลองใส่ Else แล้ว msgbox เข้าไปในคำสั่ง แล้วสั่ง Run ดู ปรากฏว่าค้างอยู่ที่ Msgbox อย่างนั้นครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#7
Post
by snasui » Fri Dec 20, 2013 9:06 pm
ลองปรับ Code เดิมเป็นตามด้านล่างครับ
Code: Select all
Option Explicit
Sub cmd_save()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
Dim db As Worksheet
Dim ws As Worksheet
Dim objWorkbook As Workbook
Dim rowNum As Integer
Set objWorkbook = Workbooks.Open("D:\ระบบงานออฟฟิศ\database.xlsx")
Set db = objWorkbook.Sheets("tbl_supplier")
Set ws = Workbooks("center.xlsm").Worksheets("temp_sup")
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
With ws
Set rsAll = .Range("A13:A13")
End With
With db
Set rtAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
End With
For Each rs In rsAll
With Application
If .CountIf(rtAll, rs) > 0 Then
rowNum = .Match(rs, rtAll, 0)
rtAll(rowNum).Offset(0, 1).Resize(1, 10) = rs.Offset(0, 1).Resize(1, 10).Value
End If
End With
Next rs
objWorkbook.Close True
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
MsgBox "Your records updated"
End Sub
ผมเอา Message Box มาไว้หลังสุดเพื่อแสดงว่าได้เปิดไฟล์ บันทึกข้อมูลและปิดไฟล์ไปแล้วจึงค่อยแจ้งว่าการบันทึกสำเร็จ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#8
Post
by bank9597 » Sat Dec 21, 2013 1:23 am
ทดสอบแล้วผ่านครับ เดี๋ยวผมจะนำไปปรับใช้กับของจริงครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#9
Post
by bank9597 » Mon Dec 23, 2013 3:02 pm
อาจารย์ครับ สั่งรันจาก userform แล้วโค๊ดไม่ทำงานเลยครับ ผมเอาโค๊ดไปปรับใช้ใน command button ปรากฏว่าโค๊ดไม่ทำงาน
ต้องแยกโค๊ดออกมาเขียนใน module แทน แล้วเขียนโค๊ดใน command button ว่า
Code: Select all
Private Sub cmd_save_Click()
Unload Me
Call saveup
frm_sup_up.show
End Sub
มันเป็นเพราะอะไรครับ อาจารย์พอจะทราบไหม
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#10
Post
by snasui » Mon Dec 23, 2013 5:58 pm
ลองแนบ
ไฟล์ตัวอย่างพร้อม Code ชุดที่ไม่ทำงาน มาดูครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#11
Post
by bank9597 » Mon Dec 23, 2013 6:22 pm
snasui wrote: ลองแนบ
ไฟล์ตัวอย่างพร้อม Code ชุดที่ไม่ทำงาน มาดูครับ
อาจารย์ครับ รบกวนอีกครั้งน่ะครับ
ผมต้องใช้ userform เพื่อความสะดวกของผู้ใช้งานครับ
โค๊ดที่ใช้งานได้ผลอยู่ในโมดูล update ครับ
ส่วนโค๊ดที่ไม่ทำงาน อยู่ใน userform ครับ มีอยู่ฟอร์มเดียวครับ
You do not have the required permissions to view the files attached to this post.
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#12
Post
by snasui » Mon Dec 23, 2013 7:16 pm
ผมทดสอบ Code ใน UserForm แล้วไม่พบปัญหาใด ช่วยแจ้งรายละเอียดปัญหาเพื่อจะได้แก้ได้ตรงจุดครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#13
Post
by bank9597 » Mon Dec 23, 2013 8:41 pm
snasui wrote: ผมทดสอบ Code ใน UserForm แล้วไม่พบปัญหาใด ช่วยแจ้งรายละเอียดปัญหาเพื่อจะได้แก้ได้ตรงจุดครับ
ผมทดสอบแก้ไขข้อมูลใน Userform (ที่ดึงขึ้นมา) แล้วกด บันทึก ปรากฏว่าโค๊ดไม่ทำการบันทึกเปลี่ยนแปลงให้ครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#14
Post
by snasui » Mon Dec 23, 2013 9:19 pm
ลองกดแป้น F8 เพื่อ Run ทีละ Step ดูว่าติดที่บรรทัดใดครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#15
Post
by bank9597 » Mon Dec 23, 2013 10:31 pm
อาจารย์ครับ มันไม่ติดบันทัดไหนครับ
กด F8 ก็รันฟอร์มขึ้นมาปกติ แต่พอทำการแก้ไขข้อมูลแล้วกดบันทึก มันกลับไม่เปลี่ยนแปลงอะไรเลยครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#16
Post
by snasui » Mon Dec 23, 2013 11:06 pm
ผมลองเปลี่ยนแปลงข้อมูลแล้วก็เปลี่ยนได้ครับ Code ใน Module ให้ลบทิ้งไปก่อนหรือ Mark เป็น Comment ไปก่อน
เราสามารถเขียน Code ใน UserForm ทำงานดังกล่าวได้ไม่จำเป็นต้องอาศัย Module เข้ามาช่วย
Code ที่เขียนมานั้นเป็นการแก้ไขข้อมูลเดิม ไม่ใช่เป็นการเพิ่ม Record หากไม่มี Record เดิมอยู่จะไม่เห็นการเปลี่ยนแปลงใด
ช่วยเขียนเป็นลำดับการทดสอบว่าต้องทดสอบอย่างไร หากทดสอบตามนั้นแล้วเกิดผลอย่างไร ที่ถูกต้องควรเป็นอย่างไร จะได้เข้าถึงปัญหาได้โดยไวครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#17
Post
by bank9597 » Tue Dec 24, 2013 10:16 am
ขอบคุณมากครับ รู้สึกว่าจะได้แล้วครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ