กระทู้เก่าบอร์ด อ.Yeadram
4,649 6
URL.หัวข้อ /
URL
รบกวนถามเรื่อง Export Files เป็น xls. โดยให้แยก Sh
ยกตัวอย่างนะครับ มีข้อมูลใน Table
Name Age
A 30
B 25
C 40
D 30
E 30
F 25
ต้องการให้ Export เป็น Excel โดยแยก File Excel ตามอายุ
โดยให้ File Name ชื่อ Age 25-30 ประกอบด้วย Sheet1 มีข้อมูล นายฺB , นายF และSHEET2 มีข้อมูล นายA , นายD , นายE
และ File Name ชื่อ Age 31-40 ประกอบด้วย Sheet1 มีข้อมูล นายC
*** ขอบคุณครับ ^/\^
Name Age
A 30
B 25
C 40
D 30
E 30
F 25
ต้องการให้ Export เป็น Excel โดยแยก File Excel ตามอายุ
โดยให้ File Name ชื่อ Age 25-30 ประกอบด้วย Sheet1 มีข้อมูล นายฺB , นายF และSHEET2 มีข้อมูล นายA , นายD , นายE
และ File Name ชื่อ Age 31-40 ประกอบด้วย Sheet1 มีข้อมูล นายC
*** ขอบคุณครับ ^/\^
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R02731
ร่วมด้วยช่วยตอบ อิอิ มีตัวอย่างส่งไปไว้ที่ accboad@gamil.com ครับลองดู
จะมีไฟล์ 2000.mdb ผมลองเอามาประยุคใช้กับงานแล้ว
ตัวอย่างนี้ได้มาจาก อ.สุภาพ ครับ
จะมีไฟล์ 2000.mdb ผมลองเอามาประยุคใช้กับงานแล้ว
ตัวอย่างนี้ได้มาจาก อ.สุภาพ ครับ
3 @R02737
คือตอนนี้ผม Copy Code ของคนอื่นมา
ซึ่งจะ Out put ออกเป็นแต่ละ File ตามเงื่อนไขของ Quries เลย
ตัวอย่างเช่น
ผมสร้างเงื่อนไขว่า ให้กลุ่มอายุ 25 เป็น 1 Quries กลุ่ม 30 เป็นอีก 1 Quries และ 40 เป็นอีก 1 Quries และก็ไปสร้าง Code ตามนี้
Private Sub Command0_Click()
DoCmd.OutputTo acOutputQuery, "qry_Age25", acFormatXLS, "C:\Age_25.xls"
DoCmd.OutputTo acOutputQuery, "qry_Age30", acFormatXLS, "C:\Age_30.xls"
DoCmd.OutputTo acOutputQuery, "qry_Age40", acFormatXLS, "C:\Age_40.xls"
End Sub
*** ผลที่ได้ผมจะได้ File ทั้งหมด 3 File
1. กลุ่มอายุ 25 เป็น 1 File
2. กลุ่มอายุ 30 เป็น 1 File
3. กลุ่มอายุ 40 เป็น 1 File
แต่ผมต้องการแก้ไข Code นี้ให้ออกเหลือ 2 Files โดย
File.xls ที่ 1 มี Sheet แรก เป็นกลุ่มอายุ 25 Sheet สอง เป็นกลุ่มอายุ 30
File.xls ที่ 2 มี Sheet แรก เป็นกลุ่มอายุ 40
*** รบกวนด้วยครับ ขอบคุณครับ
ซึ่งจะ Out put ออกเป็นแต่ละ File ตามเงื่อนไขของ Quries เลย
ตัวอย่างเช่น
ผมสร้างเงื่อนไขว่า ให้กลุ่มอายุ 25 เป็น 1 Quries กลุ่ม 30 เป็นอีก 1 Quries และ 40 เป็นอีก 1 Quries และก็ไปสร้าง Code ตามนี้
Private Sub Command0_Click()
DoCmd.OutputTo acOutputQuery, "qry_Age25", acFormatXLS, "C:\Age_25.xls"
DoCmd.OutputTo acOutputQuery, "qry_Age30", acFormatXLS, "C:\Age_30.xls"
DoCmd.OutputTo acOutputQuery, "qry_Age40", acFormatXLS, "C:\Age_40.xls"
End Sub
*** ผลที่ได้ผมจะได้ File ทั้งหมด 3 File
1. กลุ่มอายุ 25 เป็น 1 File
2. กลุ่มอายุ 30 เป็น 1 File
3. กลุ่มอายุ 40 เป็น 1 File
แต่ผมต้องการแก้ไข Code นี้ให้ออกเหลือ 2 Files โดย
File.xls ที่ 1 มี Sheet แรก เป็นกลุ่มอายุ 25 Sheet สอง เป็นกลุ่มอายุ 30
File.xls ที่ 2 มี Sheet แรก เป็นกลุ่มอายุ 40
*** รบกวนด้วยครับ ขอบคุณครับ
4 @R02747
เพิ่มเติมครับ หากข้อมูล Filed age มีอายุไม่แน่นอนละครับ ต้องทำอย่างไรคือมีช่วงอายุตั้งแต่ 15 ปี ถึง 80 ปี และบางอายุอาจมีหรือไม่มีก็ได้ครับ หากใช้ code ตามที่คุณเต้ย อาจต้องเขียนเยอะมาก มีวิธีอื่นอีกไหมครับ
ขอบคุณครับ
ขอบคุณครับ
5 @R03958
อยากทราบว่ามี code แบบอื่นอีกไหมครับ กรณีที่ช่วงอายุมีมาก และ ไม่แน่นอน ครับ
6 @R03960
ถ้าการ export มันมีข้อจำกัดเยอะไม่ยืดหยุ่น
ก็เขียนเป็นลูปเอาซิครับ แต่โค้ดมันยาวนะ
- import library Excel เข้าในโปรเจค
- ประกาศตัวแปรออบเจค Excel
- สั่งให้ ออบเจคสร้างไฟล์ excel เปล่าๆ
- สั่งให้ ไฟล์นั่นสร้าง sheet เปล่าๆ (สั่งสร้างทีละชีท หรือหลายชีทก็ได้)
- ไปหาข้อมูลต้นทางมา อาจจะสร้างเป็น เรคคอร์ดเซ็ทจากคิวรี่
- วนลูปโปรยข้อมุลจากคิวรี่ลงใน cell เป้าหมายใน sheet เป้าหมาย
เช่น ex.sheet(0).cell(1,2)= rs(0)
- พอเสร็จงาน (จบลูป) ก็สั่งเซฟ ไฟล์
ex.save
ex.close
set ex = nothing
อะไรประมาณนี้ครับ
ยืดหยุ่นได้มากพอไหมครับ เพราะในกระบวนการโปรยข้อมูล คุณสามารถตรวจสอบข้อมูลได้เป็นฟิลด์ๆ ไปเลยทีเดียวล่ะ
if rs("age")>80 then
ex.sheet(0).cells(1,1)=""
else
ex.sheet(0).cells(1,1)=rs(1)
end if
ตั้งชื่อ เปลี่ยนชื่อ sheet ได้ตามใจชอบทุกอย่าง
ex.sheet(0).name = "sss555"
บอกไปเป็นแนวทางอีกทางเลือกครับ
เพราะผมเคยได้รับ PO ของลูกค้าเจ้าหนึ่ง ส่งมาเป็น excel ประจำ แต่ข้อมูลที่ผมต้องการนำเข้ามาบันทึกไม่ได้อยู่ในรูปแบบที่ import ได้ง่าย เพราะมันมี รวมเซล มีช่องสำหรับชื่อบริษัท อะไรอีกหลายๆ อย่างที่ผมไม่ต้องการ
ผมก็ใช้วิธีนี้แหละ วนลูปอ่านเอา เป็น cells เลยครับ เอาเฉพาะ บรรทัดที่เราต้องการจริงๆ เอาเฉพาะ cell ที่เราต้องการจริงๆ
เพราะฉะนั้นการ โปรยข้อมูลจาก Access ลง Excel มันก็ต้องได้เช่นกัน แค่มันกลับฝั่งของ สมการเท่านั้น
Dim ex as Excel.application
set ex = createobject("Excel.Application")
dim wb as workbook
set wb=ex.createworkbook....
dim sh as wb.worksheet
อะไรประมาณนี้แหละครับ ลองๆ ลุยไปครับ
มันยาว คงไม่มีเวลาทำตัวอย่างให้ดูหรอกครับ
ก็เขียนเป็นลูปเอาซิครับ แต่โค้ดมันยาวนะ
- import library Excel เข้าในโปรเจค
- ประกาศตัวแปรออบเจค Excel
- สั่งให้ ออบเจคสร้างไฟล์ excel เปล่าๆ
- สั่งให้ ไฟล์นั่นสร้าง sheet เปล่าๆ (สั่งสร้างทีละชีท หรือหลายชีทก็ได้)
- ไปหาข้อมูลต้นทางมา อาจจะสร้างเป็น เรคคอร์ดเซ็ทจากคิวรี่
- วนลูปโปรยข้อมุลจากคิวรี่ลงใน cell เป้าหมายใน sheet เป้าหมาย
เช่น ex.sheet(0).cell(1,2)= rs(0)
- พอเสร็จงาน (จบลูป) ก็สั่งเซฟ ไฟล์
ex.save
ex.close
set ex = nothing
อะไรประมาณนี้ครับ
ยืดหยุ่นได้มากพอไหมครับ เพราะในกระบวนการโปรยข้อมูล คุณสามารถตรวจสอบข้อมูลได้เป็นฟิลด์ๆ ไปเลยทีเดียวล่ะ
if rs("age")>80 then
ex.sheet(0).cells(1,1)=""
else
ex.sheet(0).cells(1,1)=rs(1)
end if
ตั้งชื่อ เปลี่ยนชื่อ sheet ได้ตามใจชอบทุกอย่าง
ex.sheet(0).name = "sss555"
บอกไปเป็นแนวทางอีกทางเลือกครับ
เพราะผมเคยได้รับ PO ของลูกค้าเจ้าหนึ่ง ส่งมาเป็น excel ประจำ แต่ข้อมูลที่ผมต้องการนำเข้ามาบันทึกไม่ได้อยู่ในรูปแบบที่ import ได้ง่าย เพราะมันมี รวมเซล มีช่องสำหรับชื่อบริษัท อะไรอีกหลายๆ อย่างที่ผมไม่ต้องการ
ผมก็ใช้วิธีนี้แหละ วนลูปอ่านเอา เป็น cells เลยครับ เอาเฉพาะ บรรทัดที่เราต้องการจริงๆ เอาเฉพาะ cell ที่เราต้องการจริงๆ
เพราะฉะนั้นการ โปรยข้อมูลจาก Access ลง Excel มันก็ต้องได้เช่นกัน แค่มันกลับฝั่งของ สมการเท่านั้น
Dim ex as Excel.application
set ex = createobject("Excel.Application")
dim wb as workbook
set wb=ex.createworkbook....
dim sh as wb.worksheet
อะไรประมาณนี้แหละครับ ลองๆ ลุยไปครับ
มันยาว คงไม่มีเวลาทำตัวอย่างให้ดูหรอกครับ
Time: 0.4514s
ใช้ query เลือกข้อมูลที่ต้องการแล้ว Export ไปตั้งชื่อไฟล์ได้ตามต้องการเลยครับ