Page 1 of 1
การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 17, 2011 2:27 pm
by gchart
เคยให้อาจารย์เขียนสูตรให้แล้ว แต่เวลาผ่านไปมีการปรับปรุงแบบฟอร์มให้ตรงตามลักษณะใช้งาน
ตามไฟล์แนบผมสร้างแบบฟอร์มไว้คนละชีทกับข้อมูลครับ
ต้องการให้มีการดึงข้อมูลตามคอลั่มที่ระบุไว้ แล้วบันทึกกลับ ดังนี้
1. ใส่เลขรหัสองค์กร ร่วมกับ องค์กร แล้วกดปุ่มเรียกดู ข้อมูลก็จะโชว์ (ต้องใช้ 2 เงื่อนไขพร้อมกัน)
2. ทำการแก้ไขข้อมูลในแต่ละช่อง แล้วสามารถบันทึกกลับได้
3. ปุ่มล้างข้อมูลไว้เคลียร์ข้อมูล
โค๊ดที่อาจารย์เคยสร้างมันซับซ้อนและมีหลายงื่อนไข เกรงว่าคนเอาไฟล์ไช้จะไม่เข้าใจ(รวมทั้งผมด้วย)
บางอย่างจึงใช้วิธีกรอกด้วยตนเองจะแน่นอนกว่าครับ
ขอบคุณครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 17, 2011 7:19 pm
by snasui
ลองดูตามไฟล์แนบครับ
ผมแยกเป็นชีท 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
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Sat Feb 19, 2011 12:10 pm
by gchart
ลองใช้แล้วครับ มีปัญหาคือ
1.เมื่อเรียกข้อมูลมาแล้วแก้ไข ข้อมูลที่แก้ไขมันไปเพิ่มข้อมูลในแถวใหม่ครับ
2.การเรียกข้อมูลต้องใช้ 2 เงื่อนไขครับ ถ้าไม่พบทั้ง 2 เงื่อนไขให้ขึ้นว่า "ไม่พบข้อมูล" ครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Sat Feb 19, 2011 12:18 pm
by snasui
ต้องสร้างปุ่มเพิ่มขึ้นมาอีก 1 ปุ่มแล้วให้ชื่อว่า
แก้ไขข้อมูล ครับ จากนั้น Assigned Macro ให้กับปุ่มนี้ โดยเลือก Macro ที่ชื่อว่า
ReplaceData ครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Sun Feb 20, 2011 11:57 am
by gchart
snasui wrote: ต้องสร้างปุ่มเพิ่มขึ้นมาอีก 1 ปุ่มแล้วให้ชื่อว่า
แก้ไขข้อมูล ครับ จากนั้น Assigned Macro ให้กับปุ่มนี้ โดยเลือก Macro ที่ชื่อว่า
ReplaceData ครับ
ขอบคุณครับ เดี๋ยวจะลองดูครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Mon Feb 21, 2011 9:21 am
by gchart
ผมแก้ไขให้เหลือปุ่มแก้ไขข้อมูลอย่างเดียวนะครับ ปุ่มบันทึกผมไม่ใช้ แต่ใช้วิธีกรอกข้อมูลเองนะครับ
และเมื่อลองใช้แล้วครับ เจอปัญหา ดังนี้
1.เนื่องจากองค์กรที่ต่างกัน อาจมีรหัสบางรหัสที่เหมือนกัน เมื่อเรียกข้อมูลมันไม่ขึ้นตามที่เรียกครับ
เช่น ผมเรียก รหัส กธ.1 ขององค์กร1 แต่โปรแกรมแสดงผลเป็น กธ.1ขององค์กร3 ครับ
(ตามไฟล์ตัวอย่าง)
2.เมื่อมันหาค่าไม่พบจะขึ้น run time error ครับ
3.เมื่อล็อคเซลล์และเรียกใช้งานมันขึ้น run time error ครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Mon Feb 21, 2011 10:03 am
by snasui
อาจจะเป็นที่สูตรในการดึงข้อมูล ตอนนี้ผมปรับใหม่แล้วครับ
ถ้าจะทำการ Protect Sheet เซลล์ใดให้แก้ไขได้ก็ต้องปลด locked เสียก่อนครับ ไม่เช่นนั้นก็ไม่สามารถวางข้อมูลได้ ก็จะเกิด Error ซึ่งก็ถูกต้องแล้วครับ จะไม่ให้มันเกิด Error ก็ต้องไม่ Locked เซลล์ที่ให้แก้ไขได้ครับ
ดูไฟล์แนบประกอบครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Mon Feb 21, 2011 1:01 pm
by gchart
โปรแกรมสามารถรันได้ถึงแถวที่ 1000 หลังจากนั้นขึ้น #N/A ทุกช่องของแบบฟอร์ม
โดยปัจจุบันมีข้อมูลประมาณ 3,800 แถว และเพิ่มขึ้นปีละประมาณ 100 แถวครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Mon Feb 21, 2011 1:15 pm
by snasui
ที่ชีท 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 ครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Mon Feb 21, 2011 4:07 pm
by gchart
ทดลองปรับข้อมูลที่มีอยู่เข้ามาอยู่ในไฟล์ได้แล้ว ปรากฏดังนี้
1.ตอนเปิดไฟล์มันขึ้น security alert multiple issues เตือนเรื่อง macro กับ link จากเดิมเตือนเรื่อง macro อย่างเดียวครับ
2.แก้ G4 (เนื่องจากพิมพ์ผิด) แต่พอกดปุ่มเรียกดู มันกลับค่าเดิมครับ
3.ตามไฟล์แนบ ลองลบข้อมูลออกทั้งหมด ใส่รหัสและองค์กร พอกดปุ่มดึงค่ามันดึงค่าสีแดงมาด้วยครับ
ขอบคุณครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Mon Feb 21, 2011 5:44 pm
by snasui
เรื่อง Link ฟ้องว่าอย่างไรลอง Capture หน้าจอมาดูหน่อยครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 24, 2011 11:15 am
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 หมายถึง มีบางเซลล์ที่ไม่ใช่ช่องกรอกข้อมูล แต่เมื่อเรียกดูมันแสดงค่าด้วยครับ(ตามที่ทำสีแดงไว้)
หากลบตัวสีแดงทิ้งไป แล้วกดปุ่มเรียกดู ค่ามันก็จะกลับมาครับ
(ตามไฟล์แนบ)
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 24, 2011 11:35 am
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 ช่วยทำสีลงในช่องเลยครับ แล้วอธิบายว่าสีไหนต้องการให้เป็นอะไร
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 24, 2011 12:13 pm
by gchart
ขออธิบายเพิ่มเติมนะครับ
-สีดำและสีแดง คือ ชื่อของฟิลด์
-สีน้ำเงินในเซลล์สีขาว คือ ช่องให้แสดงผล เป็นปกติ
-ปัญหาที่พบ คือ ในเซลล์ชื่อฟิลด์ตัวอักษรสีแดง ปกติมันต้องเป็นชื่อฟิลด์ แต่ในไฟล์นี้มันเป็นทั้งชื่อฟิลด์และช่องแสดงผลครับ
ผมลองแก้ไขชื่อฟิลด์ในช่องสีแดงและบันทึกข้อมูลแล้ว แต่เมื่อเปิดไฟล์และกดปุ่ม "เรียกดู" ค่ามันกลับเหมือนเดิมครับ
-ในส่วนของชื่อฟิลด์ตัวอักษรสีดำเป็นปกติดีครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 24, 2011 12:21 pm
by snasui
ไม่ได้ผิดปกติแต่อย่างใดครับ เพราะผมจะวางข้อมูลทับทั้งหน้า ดังนั้น หากต้องการแก้ชื่อ Field ต้องไปแก้ที่ชีท TempT ครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 24, 2011 1:54 pm
by gchart
snasui wrote: ไม่ได้ผิดปกติแต่อย่างใดครับ เพราะผมจะวางข้อมูลทับทั้งหน้า ดังนั้น หากต้องการแก้ชื่อ Field ต้องไปแก้ที่ชีท TempT ครับ
-แก้ในTempTแล้วไม่ได้ แต่ไปแก้ในFormTได้แล้วครับ
-ผมทดลองล็อคเซลล์ชื่อฟิลด์สีดำได้ แต่ไม่สามารถล็อคเซลล์ในชื่อฟิลด์สีแดเพราะมันขึ้นerror
หากต้องการล็อคชื่อฟิลด์ทั้งสีดำและแดง แล้วใช้คำสั่งป้องกันชีทต้องทำอย่างไรครับ ไม่ให้error
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 24, 2011 2:09 pm
by snasui
gchart wrote:snasui wrote: ไม่ได้ผิดปกติแต่อย่างใดครับ เพราะผมจะวางข้อมูลทับทั้งหน้า ดังนั้น หากต้องการแก้ชื่อ Field ต้องไปแก้ที่ชีท TempT ครับ
-แก้ในTempTแล้วไม่ได้ แต่ไปแก้ในFormTได้แล้วครับ
-ผมทดลองล็อคเซลล์ชื่อฟิลด์สีดำได้ แต่ไม่สามารถล็อคเซลล์ในชื่อฟิลด์สีแดเพราะมันขึ้นerror
หากต้องการล็อคชื่อฟิลด์ทั้งสีดำและแดง แล้วใช้คำสั่งป้องกันชีทต้องทำอย่างไรครับ ไม่ให้error
อ่านแล้วสับสนครับ สรุปคือต้องแก้ที่ FormT ครับ ส่วนการ Lock Field สีแดง Locked ได้แต่ต้องมีเทคนิค เนื่องจากใช้การวางทับทั้งหมด ผมจะต้องเขียน Code เพิ่มว่าให้ปลด Locked ก่อนแล้ววางข้อมูล วางแล้วค่อย Lock ไว้ใหม่ เช่นนี้ครับ
Re: การกรอกแบบฟอร์มและการดึงข้อมูลเพื่อบันทึก
Posted: Thu Feb 24, 2011 2:45 pm
by gchart
ให้สามารถกรอกได้เฉพาะช่องแสดงข้อมูลสีน้ำเงินครับ
ส่วนพื้นที่อื่นเมื่อป้องกันแล้วไม่สามารถเลือกได้ครับ