:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#1

Post by gchart »

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

ตามไฟล์แนบผมสร้างแบบฟอร์มไว้คนละชีทกับข้อมูลครับ
ต้องการให้มีการดึงข้อมูลตามคอลั่มที่ระบุไว้ แล้วบันทึกกลับ ดังนี้
1. ใส่เลขรหัสองค์กร ร่วมกับ องค์กร แล้วกดปุ่มเรียกดู ข้อมูลก็จะโชว์ (ต้องใช้ 2 เงื่อนไขพร้อมกัน)
2. ทำการแก้ไขข้อมูลในแต่ละช่อง แล้วสามารถบันทึกกลับได้
3. ปุ่มล้างข้อมูลไว้เคลียร์ข้อมูล

โค๊ดที่อาจารย์เคยสร้างมันซับซ้อนและมีหลายงื่อนไข เกรงว่าคนเอาไฟล์ไช้จะไม่เข้าใจ(รวมทั้งผมด้วย)
บางอย่างจึงใช้วิธีกรอกด้วยตนเองจะแน่นอนกว่าครับ
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#2

Post by snasui »

:D ลองดูตามไฟล์แนบครับ

ผมแยกเป็นชีท Temp1, FormT มาให้เพื่อลดการเขียน Code ลง ซึ่ง Code ที่เขียนใหม่จะเป็นตามด้านล่างครับ

Code: Select all

Sub ShowDataSearch()
Dim rc As Range
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("FormT").Range("B2:H20")
Set rt = Worksheets("Form").Range("B2")
Set rc = Worksheets("Temp1").Range("A2")
If rc = "" Then
    MsgBox "Can't found data."
    Exit Sub
Else
    rs.Copy: rt.PasteSpecial xlPasteValues
End If
MsgBox "Paste Finish"
Application.CutCopyMode = False
End Sub

Sub ReplaceData()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Temp1").Range("A3:AX3")
Set rt = Worksheets("DATA").Range("A1").Offset( _
    Worksheets("Temp1").Range("AY1"), 0)
If Worksheets("Temp1").Range("A3") = "" Then
    MsgBox "Can't replace data"
    Exit Sub
End If
rs.Copy: rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Replace Complete"
End Sub

Sub ClearFeilds()
Worksheets("Form").Range( _
"B2:B20,D2:D20,F3:H3,F6:H6,F9:H9,F12:H12,F16:H16").ClearContents
MsgBox "Clear data finish"
End Sub

Sub RecordNewData()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Temp1").Range("A3:AX3")
Set rt = Worksheets("DATA").Range("A65536").End(xlUp).Offset(1, 0)
If Worksheets("Temp1").Range("A3") = "" Then
    MsgBox "Can't Record data"
    Exit Sub
End If
rs.Copy: rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Record Complete"
End Sub
You do not have the required permissions to view the files attached to this post.
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#3

Post by gchart »

ลองใช้แล้วครับ มีปัญหาคือ
1.เมื่อเรียกข้อมูลมาแล้วแก้ไข ข้อมูลที่แก้ไขมันไปเพิ่มข้อมูลในแถวใหม่ครับ
2.การเรียกข้อมูลต้องใช้ 2 เงื่อนไขครับ ถ้าไม่พบทั้ง 2 เงื่อนไขให้ขึ้นว่า "ไม่พบข้อมูล" ครับ
Last edited by gchart on Sat Feb 19, 2011 12:29 pm, edited 1 time in total.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#4

Post by snasui »

:tt: ต้องสร้างปุ่มเพิ่มขึ้นมาอีก 1 ปุ่มแล้วให้ชื่อว่า แก้ไขข้อมูล ครับ จากนั้น Assigned Macro ให้กับปุ่มนี้ โดยเลือก Macro ที่ชื่อว่า ReplaceData ครับ
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#5

Post by gchart »

snasui wrote: :tt: ต้องสร้างปุ่มเพิ่มขึ้นมาอีก 1 ปุ่มแล้วให้ชื่อว่า แก้ไขข้อมูล ครับ จากนั้น Assigned Macro ให้กับปุ่มนี้ โดยเลือก Macro ที่ชื่อว่า ReplaceData ครับ
ขอบคุณครับ เดี๋ยวจะลองดูครับ
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#6

Post by gchart »

ผมแก้ไขให้เหลือปุ่มแก้ไขข้อมูลอย่างเดียวนะครับ ปุ่มบันทึกผมไม่ใช้ แต่ใช้วิธีกรอกข้อมูลเองนะครับ

และเมื่อลองใช้แล้วครับ เจอปัญหา ดังนี้
1.เนื่องจากองค์กรที่ต่างกัน อาจมีรหัสบางรหัสที่เหมือนกัน เมื่อเรียกข้อมูลมันไม่ขึ้นตามที่เรียกครับ
เช่น ผมเรียก รหัส กธ.1 ขององค์กร1 แต่โปรแกรมแสดงผลเป็น กธ.1ขององค์กร3 ครับ
(ตามไฟล์ตัวอย่าง)
2.เมื่อมันหาค่าไม่พบจะขึ้น run time error ครับ
3.เมื่อล็อคเซลล์และเรียกใช้งานมันขึ้น run time error ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#7

Post by snasui »

:D อาจจะเป็นที่สูตรในการดึงข้อมูล ตอนนี้ผมปรับใหม่แล้วครับ

ถ้าจะทำการ Protect Sheet เซลล์ใดให้แก้ไขได้ก็ต้องปลด locked เสียก่อนครับ ไม่เช่นนั้นก็ไม่สามารถวางข้อมูลได้ ก็จะเกิด Error ซึ่งก็ถูกต้องแล้วครับ จะไม่ให้มันเกิด Error ก็ต้องไม่ Locked เซลล์ที่ให้แก้ไขได้ครับ

ดูไฟล์แนบประกอบครับ
You do not have the required permissions to view the files attached to this post.
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#8

Post by gchart »

โปรแกรมสามารถรันได้ถึงแถวที่ 1000 หลังจากนั้นขึ้น #N/A ทุกช่องของแบบฟอร์ม

โดยปัจจุบันมีข้อมูลประมาณ 3,800 แถว และเพิ่มขึ้นปีละประมาณ 100 แถวครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#9

Post by snasui »

:D ที่ชีท Temp1 เซลล์ AY1 ปรับช่วงสูตรให้มากกว่าหรือเท่ากับช่วงเซลล์ที่ใช้จริงครับ

จากสูตรเดิม

=IF(OR(Form!B2="",Form!D2=""),"",MATCH(1,IF(Form!$B$2=DATA!$C$2:$C$1000,IF(Form!$D$2=DATA!$D$2:$D$1000,1)),0))

ให้ปรับเลข 1000 เป็นเลขใด ๆ ที่คิดว่าเพียงพอกับการเพิ่มของข้อมูล จากนั้นกดแป้นให้รับสูตรด้วยการกด Ctrl+Shift ค้างไว้แล้วตามด้วย Enter ครับ
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#10

Post by gchart »

ทดลองปรับข้อมูลที่มีอยู่เข้ามาอยู่ในไฟล์ได้แล้ว ปรากฏดังนี้
1.ตอนเปิดไฟล์มันขึ้น security alert multiple issues เตือนเรื่อง macro กับ link จากเดิมเตือนเรื่อง macro อย่างเดียวครับ
2.แก้ G4 (เนื่องจากพิมพ์ผิด) แต่พอกดปุ่มเรียกดู มันกลับค่าเดิมครับ
3.ตามไฟล์แนบ ลองลบข้อมูลออกทั้งหมด ใส่รหัสและองค์กร พอกดปุ่มดึงค่ามันดึงค่าสีแดงมาด้วยครับ
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
Last edited by gchart on Tue Feb 22, 2011 10:05 am, edited 1 time in total.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#11

Post by snasui »

:D เรื่อง Link ฟ้องว่าอย่างไรลอง Capture หน้าจอมาดูหน่อยครับ
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#12

Post by gchart »

gchart wrote:ทดลองปรับข้อมูลที่มีอยู่เข้ามาอยู่ในไฟล์ได้แล้ว ปรากฏดังนี้
1.ตอนเปิดไฟล์มันขึ้น security alert multiple issues เตือนเรื่อง macro กับ link จากเดิมเตือนเรื่อง macro อย่างเดียวครับ
2.แก้ G4 (เนื่องจากพิมพ์ผิด) แต่พอกดปุ่มเรียกดู มันกลับค่าเดิมครับ
3.ตามไฟล์แนบ ลองลบข้อมูลออกทั้งหมด ใส่รหัสและองค์กร พอกดปุ่มดึงค่ามันดึงค่าสีแดงมาด้วยครับ
ขอบคุณครับ
ข้อ 1 แก้ได้แล้วตาม http://www.snasui.com/viewtopic.php?f=3&t=766 ครับ

ข้อ 2 กับข้อ 3 หมายถึง มีบางเซลล์ที่ไม่ใช่ช่องกรอกข้อมูล แต่เมื่อเรียกดูมันแสดงค่าด้วยครับ(ตามที่ทำสีแดงไว้)
หากลบตัวสีแดงทิ้งไป แล้วกดปุ่มเรียกดู ค่ามันก็จะกลับมาครับ
(ตามไฟล์แนบ)
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#13

Post by snasui »

gchart wrote:
gchart wrote:ทดลองปรับข้อมูลที่มีอยู่เข้ามาอยู่ในไฟล์ได้แล้ว ปรากฏดังนี้
1.ตอนเปิดไฟล์มันขึ้น security alert multiple issues เตือนเรื่อง macro กับ link จากเดิมเตือนเรื่อง macro อย่างเดียวครับ
2.แก้ G4 (เนื่องจากพิมพ์ผิด) แต่พอกดปุ่มเรียกดู มันกลับค่าเดิมครับ
3.ตามไฟล์แนบ ลองลบข้อมูลออกทั้งหมด ใส่รหัสและองค์กร พอกดปุ่มดึงค่ามันดึงค่าสีแดงมาด้วยครับ
ขอบคุณครับ
<span>ข้อ 1 แก้ได้แล้วตาม <a href="http://www.snasui.com/viewtopic.php?f=3&t=766" class="smarterwiki-linkify">http://www.snasui.com/viewtopic.php?f=3&t=766</a> ครับ</span>

ข้อ 2 กับข้อ 3 หมายถึง มีบางเซลล์ที่ไม่ใช่ช่องกรอกข้อมูล แต่เมื่อเรียกดูมันแสดงค่าด้วยครับ(ตามที่ทำสีแดงไว้)
หากลบตัวสีแดงทิ้งไป แล้วกดปุ่มเรียกดู ค่ามันก็จะกลับมาครับ
(ตามไฟล์แนบ)
:? ไม่เข้าใจครับ สรุปแล้วเมื่อมีการคลิกปุ่มเรียกดู ต้องการให้แสดงเซลล์ใดบ้างครับ ที่ทำสีแดงไว้นั้นเป็นชื่อของ Field ช่วยทำสีลงในช่องเลยครับ แล้วอธิบายว่าสีไหนต้องการให้เป็นอะไร
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#14

Post by gchart »

ขออธิบายเพิ่มเติมนะครับ
-สีดำและสีแดง คือ ชื่อของฟิลด์
-สีน้ำเงินในเซลล์สีขาว คือ ช่องให้แสดงผล เป็นปกติ
-ปัญหาที่พบ คือ ในเซลล์ชื่อฟิลด์ตัวอักษรสีแดง ปกติมันต้องเป็นชื่อฟิลด์ แต่ในไฟล์นี้มันเป็นทั้งชื่อฟิลด์และช่องแสดงผลครับ
ผมลองแก้ไขชื่อฟิลด์ในช่องสีแดงและบันทึกข้อมูลแล้ว แต่เมื่อเปิดไฟล์และกดปุ่ม "เรียกดู" ค่ามันกลับเหมือนเดิมครับ
-ในส่วนของชื่อฟิลด์ตัวอักษรสีดำเป็นปกติดีครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#15

Post by snasui »

:D ไม่ได้ผิดปกติแต่อย่างใดครับ เพราะผมจะวางข้อมูลทับทั้งหน้า ดังนั้น หากต้องการแก้ชื่อ Field ต้องไปแก้ที่ชีท TempT ครับ
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#16

Post by gchart »

snasui wrote::D ไม่ได้ผิดปกติแต่อย่างใดครับ เพราะผมจะวางข้อมูลทับทั้งหน้า ดังนั้น หากต้องการแก้ชื่อ Field ต้องไปแก้ที่ชีท TempT ครับ
-แก้ในTempTแล้วไม่ได้ แต่ไปแก้ในFormTได้แล้วครับ
-ผมทดลองล็อคเซลล์ชื่อฟิลด์สีดำได้ แต่ไม่สามารถล็อคเซลล์ในชื่อฟิลด์สีแดเพราะมันขึ้นerror
หากต้องการล็อคชื่อฟิลด์ทั้งสีดำและแดง แล้วใช้คำสั่งป้องกันชีทต้องทำอย่างไรครับ ไม่ให้error
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#17

Post by snasui »

gchart wrote:
snasui wrote::D ไม่ได้ผิดปกติแต่อย่างใดครับ เพราะผมจะวางข้อมูลทับทั้งหน้า ดังนั้น หากต้องการแก้ชื่อ Field ต้องไปแก้ที่ชีท TempT ครับ
-แก้ในTempTแล้วไม่ได้ แต่ไปแก้ในFormTได้แล้วครับ
-ผมทดลองล็อคเซลล์ชื่อฟิลด์สีดำได้ แต่ไม่สามารถล็อคเซลล์ในชื่อฟิลด์สีแดเพราะมันขึ้นerror
หากต้องการล็อคชื่อฟิลด์ทั้งสีดำและแดง แล้วใช้คำสั่งป้องกันชีทต้องทำอย่างไรครับ ไม่ให้error
อ่านแล้วสับสนครับ สรุปคือต้องแก้ที่ FormT ครับ ส่วนการ Lock Field สีแดง Locked ได้แต่ต้องมีเทคนิค เนื่องจากใช้การวางทับทั้งหมด ผมจะต้องเขียน Code เพิ่มว่าให้ปลด Locked ก่อนแล้ววางข้อมูล วางแล้วค่อย Lock ไว้ใหม่ เช่นนี้ครับ
gchart
Member
Member
Posts: 31
Joined: Sun May 09, 2010 7:23 pm

Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก

#18

Post by gchart »

ให้สามารถกรอกได้เฉพาะช่องแสดงข้อมูลสีน้ำเงินครับ
ส่วนพื้นที่อื่นเมื่อป้องกันแล้วไม่สามารถเลือกได้ครับ
Post Reply