Page 1 of 1
สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 10:07 am
by walrus
ผมต้องการนำข้อมูลจากฐานข้อมูล ดึงไปอีกชีทเพื่อไว้ทำการพิมพ์ออกมา ในรูปแบบคล้ายๆ Slip
ไม่ทราบว่ามีวิธีอะไรที่ดึงข้อมูลไปได้บ้างครับ ?
แบบฟอร์มจะเป็นขนาดกระดาษ A4 แต่แบ่งเป็น 6 ช่อง
โดยสมมติว่ามี Order 5 Order ให้ดึงออกมาแล้วหยุดที่ 1 หน้า ช่องที่ 6 ที่ไม่มีออร์เดอร์จะว่างไว้
สมมติอีกตัวอย่าง
หากมี Order 10 Order จะดึงออกมาได้ 2 หน้า โดย หน้าที่ 1 order ครบ 6 ช่อง แต่หน้าที่ 2 order จะมีแค่ 4 และ 2 ช่องล่างสุดว่างไว้ และหยุดส่วนที่ว่างไว้เท่านี้น่ะครับ ไม่มีช่องว่าง เลยไปหน้า 3 , 4 , 5 .......
ในไฟล์ตัวอย่าง ผมใส่สูตร Vlookup ไว้ดึงคำตอบที่ต้องการออกมาเฉยๆ ครับ ผมเกรงว่าหากมี Order มากๆ ผมมานั่งใส่ Vlookup ทีละ Order ไม่ไหวครับ อยากให้ดึงออกมาได้เลยเหมือนจดหมายเวียนน่ะครับ
รบกวนหน่อยนะครับ
print slip.xlsx
Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 10:24 am
by bank9597

ลองทำฟอร์มอีกฟอร์ม เพื่อดึงออร์เดอร์ที่ต้องการพิมพ์ออกมาว่า ต้องการพิมพ์ออร์เดอร์ จะได้ใช้สูตรง่ายขึ้น
ตัวอย่างที่ทำมาใช้ดึงโดยตรงจาก DB อีกทั้งยังไม่มีตัวที่เป็นคีย์หลักที่ใช้ในการดึงข้อมูลครับ

Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 10:33 am
by walrus
bank9597 wrote:
ลองทำฟอร์มอีกฟอร์ม เพื่อดึงออร์เดอร์ที่ต้องการพิมพ์ออกมาว่า ต้องการพิมพ์ออร์เดอร์ จะได้ใช้สูตรง่ายขึ้น
ตัวอย่างที่ทำมาใช้ดึงโดยตรงจาก DB อีกทั้งยังไม่มีตัวที่เป็นคีย์หลักที่ใช้ในการดึงข้อมูลครับ

ผมไม่เข้าใจอ่ะครับ สมมติว่าในไฟล์ตัวอย่างคือสิ่งที่ตอ้งการพิมพ์ทั้งหมดแล้วหล่ะครับ ? แล้วตัวที่เป็นคีย์หลักที่ใช้ในการดึง อิงจาก Order ได้หรือไม่ครับ ?
Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 11:02 am
by bank9597
ผมไม่เข้าใจอ่ะครับ สมมติว่าในไฟล์ตัวอย่างคือสิ่งที่ตอ้งการพิมพ์ทั้งหมดแล้วหล่ะครับ ? แล้วตัวที่เป็นคีย์หลักที่ใช้ในการดึง อิงจาก Order ได้หรือไม่ครับ ?

ไม่เป็นไรครับ แนวทางการทำไม่จำเป็นต้องเหมือนกันครับ แต่ที่ผมถนัดคือการดึงข้อมูลมาจาก Database ก่อน เช่น ต้องการดูข้อมูลออร์เดอร์ 101 ผมก็คีย์รหัสออร์เดอร์ลงไปแล้วดึงข้อมูลขึ้นมา เมื่อข้อมูลมาแสดงแล้ว หากต้องการพิมพ์ กดให้กดปุ่มพิมพ์ ข้อมูลที่อยู่ในฟอร์มก็จะถูกดึงไปจัดวางตามฟอร์มที่เราต้องการพิมพ์อีกทีอย่างถูกต้องครับ
อันนี้เป็นวิธีการที่ผมใช้อยู่ สำหรับที่คุณ walrus ถามมา ผมเกรงว่าผมจะใช้สูตรในการทำยากกว่าของคุณ walrus เสียอีกครับ
อีกวิธีนึงคือใช้ VBA ครับ แต่ต้องเขียนโค๊ดมาดูก่อน จะได้ปรับปรุงต่อไปครับ

Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 11:14 am
by walrus
bank9597 wrote:
ผมไม่เข้าใจอ่ะครับ สมมติว่าในไฟล์ตัวอย่างคือสิ่งที่ตอ้งการพิมพ์ทั้งหมดแล้วหล่ะครับ ? แล้วตัวที่เป็นคีย์หลักที่ใช้ในการดึง อิงจาก Order ได้หรือไม่ครับ ?

ไม่เป็นไรครับ แนวทางการทำไม่จำเป็นต้องเหมือนกันครับ แต่ที่ผมถนัดคือการดึงข้อมูลมาจาก Database ก่อน เช่น ต้องการดูข้อมูลออร์เดอร์ 101 ผมก็คีย์รหัสออร์เดอร์ลงไปแล้วดึงข้อมูลขึ้นมา เมื่อข้อมูลมาแสดงแล้ว หากต้องการพิมพ์ กดให้กดปุ่มพิมพ์ ข้อมูลที่อยู่ในฟอร์มก็จะถูกดึงไปจัดวางตามฟอร์มที่เราต้องการพิมพ์อีกทีอย่างถูกต้องครับ
อันนี้เป็นวิธีการที่ผมใช้อยู่ สำหรับที่คุณ walrus ถามมา ผมเกรงว่าผมจะใช้สูตรในการทำยากกว่าของคุณ walrus เสียอีกครับ
อีกวิธีนึงคือใช้ VBA ครับ แต่ต้องเขียนโค๊ดมาดูก่อน จะได้ปรับปรุงต่อไปครับ

ขอบคุณ คุณ bank9597 มากครับสำหรับแนวทาง VBA ยังไม่เคยแตะเลยครับ
ถ้าใช้แนวทาง Mail Merge พอทำได้หรือเปล่าครับ ? กำลังศึกษาว่า Mail Merge มันจะทำได้มั้ย
ก่อนหน้านี้ผมเคยใช้ Mail Merge พิมพ์ซองงานแต่งงานตัวเอง

Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 11:26 am
by bank9597
Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 2:04 pm
by ZEROV
เพื่อความเข้าใจให้ตัดเรื่อง Form ออกไปก่อน
ที่ชีท "Database"
ref =$A$3:$G$7
Page = $J$1
h3=INDEX(OFFSET(ref,Page*5-5,0),ROW(A1),COLUMN(A1))
Copy สูตร ไป 5R x 7C
Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 6:54 pm
by snasui
walrus wrote:ผมต้องการนำข้อมูลจากฐานข้อมูล ดึงไปอีกชีทเพื่อไว้ทำการพิมพ์ออกมา ในรูปแบบคล้ายๆ Slip
ไม่ทราบว่ามีวิธีอะไรที่ดึงข้อมูลไปได้บ้างครับ ?
แบบฟอร์มจะเป็นขนาดกระดาษ A4 แต่แบ่งเป็น 6 ช่อง
โดยสมมติว่ามี Order 5 Order ให้ดึงออกมาแล้วหยุดที่ 1 หน้า ช่องที่ 6 ที่ไม่มีออร์เดอร์จะว่างไว้
สมมติอีกตัวอย่าง
หากมี Order 10 Order จะดึงออกมาได้ 2 หน้า โดย หน้าที่ 1 order ครบ 6 ช่อง แต่หน้าที่ 2 order จะมีแค่ 4 และ 2 ช่องล่างสุดว่างไว้ และหยุดส่วนที่ว่างไว้เท่านี้น่ะครับ ไม่มีช่องว่าง เลยไปหน้า 3 , 4 , 5 .......
ในไฟล์ตัวอย่าง ผมใส่สูตร Vlookup ไว้ดึงคำตอบที่ต้องการออกมาเฉยๆ ครับ ผมเกรงว่าหากมี Order มากๆ ผมมานั่งใส่ Vlookup ทีละ Order ไม่ไหวครับ อยากให้ดึงออกมาได้เลยเหมือนจดหมายเวียนน่ะครับ
รบกวนหน่อยนะครับ
print slip.xlsx
กรณีต้องการให้เป็นอัตโนมัติคงต้องพึ่ง VBA หรือสูตรร่วมกับ VBA เพื่อ Run ทีละหน้าแล้วสั่งพิมพ์ ผมได้ทำตัวอย่างการใช้สูตรและ Scroll bar เพื่อเลื่อนไปยังหน้าถัด ๆ ไป ดูได้ตามไฟล์แนบครับ
Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 10:02 pm
by walrus
snasui wrote:walrus wrote:ผมต้องการนำข้อมูลจากฐานข้อมูล ดึงไปอีกชีทเพื่อไว้ทำการพิมพ์ออกมา ในรูปแบบคล้ายๆ Slip
ไม่ทราบว่ามีวิธีอะไรที่ดึงข้อมูลไปได้บ้างครับ ?
แบบฟอร์มจะเป็นขนาดกระดาษ A4 แต่แบ่งเป็น 6 ช่อง
โดยสมมติว่ามี Order 5 Order ให้ดึงออกมาแล้วหยุดที่ 1 หน้า ช่องที่ 6 ที่ไม่มีออร์เดอร์จะว่างไว้
สมมติอีกตัวอย่าง
หากมี Order 10 Order จะดึงออกมาได้ 2 หน้า โดย หน้าที่ 1 order ครบ 6 ช่อง แต่หน้าที่ 2 order จะมีแค่ 4 และ 2 ช่องล่างสุดว่างไว้ และหยุดส่วนที่ว่างไว้เท่านี้น่ะครับ ไม่มีช่องว่าง เลยไปหน้า 3 , 4 , 5 .......
ในไฟล์ตัวอย่าง ผมใส่สูตร Vlookup ไว้ดึงคำตอบที่ต้องการออกมาเฉยๆ ครับ ผมเกรงว่าหากมี Order มากๆ ผมมานั่งใส่ Vlookup ทีละ Order ไม่ไหวครับ อยากให้ดึงออกมาได้เลยเหมือนจดหมายเวียนน่ะครับ
รบกวนหน่อยนะครับ
print slip.xlsx
กรณีต้องการให้เป็นอัตโนมัติคงต้องพึ่ง VBA หรือสูตรร่วมกับ VBA เพื่อ Run ทีละหน้าแล้วสั่งพิมพ์ ผมได้ทำตัวอย่างการใช้สูตรและ Scroll bar เพื่อเลื่อนไปยังหน้าถัด ๆ ไป ดูได้ตามไฟล์แนบครับ
ขอบคุณมากครับ สะดวกมากๆเลยครับ ถ้าไม่เป็นการรบกวนผมอยากทราบขั้นตอนการทำได้หรือไม่ครับ ?
หากไม่สะดวกไม่เป็นไรครับ

Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 10:22 pm
by snasui

ขั้นตอนมีดังนี้ครับ
- เพิ่ม Scroll bar โดย
- เข้าเมนู Developer
- คลิก Insert
- ที่ Form Control คลิก Scroll Bar
- นำมาวาดลงในพื้นที่ที่ต้องการ
- คลิกขวาลงใน Scroll Bar > Format Control
- ที่ Current value: คีย์ 1 > ที่ Cell Link: คลิก J1 > OK
- เขียนสูตรใน Form แรกโดย
- ที่ B2 คีย์
=INDEX(Database!$B$3:$G$1000,COUNTIF(A$2:A2,A2)+6*($J$1-1),MATCH(A2,Database!$B$2:$G$2,0))
Enter > Copy ไปวางที่ B4, D4, F4
- ที่ E2 คีย์
=INDEX(Database!$C$3:$C$1000&" "&Database!$D$3:$D$1000,COUNTIF(A$2:A2,A2)+6*($J$1-1))
Enter
- Copy Form แรกไปวางที่ตำแหน่ง Form อื่น ๆ
Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Wed Mar 28, 2012 10:43 pm
by bank9597
Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Thu Mar 29, 2012 9:05 am
by walrus
snasui wrote:
- ที่ B2 คีย์
=INDEX(Database!$B$3:$G$1000,COUNTIF(A$2:A2,A2)+6*($J$1-1),MATCH(A2,Database!$B$2:$G$2,0))
Enter > Copy ไปวางที่ B4, D4, F4
ที่ต้องก็อบปี้ ไปวางที่ B4,D4,F4 ต้องแก้ให้มัน Match กับหัวเรื่องด้วยใช่มั้ยครับ ผมก็อปปี้ไปอย่างเดียวมันเป็นแต่ออร์เดอร์อย่างเดียว แต่พอลองแก้ให้มัน match กันแล้ว OK แล้วครับ
แต่ยังไงขอบคุณมากมากครับสำหรับความรู้ไม่รู้จะขอบคุณยังไงดี ผมรักเว็บบอร์ดนี้จริงๆเลย

Re: สอบถามวิธีการดึงข้อมูลออกไปทำแบบฟอร์มเพื่อพิมพ์ครับ
Posted: Fri Mar 30, 2012 6:53 am
by snasui
walrus wrote:ที่ต้องก็อบปี้ ไปวางที่ B4,D4,F4 ต้องแก้ให้มัน Match กับหัวเรื่องด้วยใช่มั้ยครับ ผมก็อปปี้ไปอย่างเดียวมันเป็นแต่ออร์เดอร์อย่างเดียว แต่พอลองแก้ให้มัน match กันแล้ว OK แล้วครับ
ขึ้นอยู่กับวิธีการ Copy และ Paste ครับ ผม Copy และ Paste
โดยไม่ต้องแก้สูตรเพิ่มเติมโดย
- คลิกขวาที่ B2 > Copy
- กดแป้น Ctrl ค้างไว้แล้วคลิก B4, D4, F4
- คลิกขวา > Paste Special > Formulas > OK