PDA

View Full Version : ขั้นตอนการสร้างไฟล์ Add-Inn



nutty
14 Jun 2007, 19:55
ผมได้ ทดลองสร้างแฟ้ม Add-Ins จากไฟล์เดิมที่ได้มีการเขียน Macro เอาไว้นะครับ แต่พอจะเรียกใช้ กลับได้ ข้อความเตือนมานะครับว่า "is not a valid Add-in" ซึ่งไม่ทราบว่าเกิดจากสาเหตุอะไร หรือผมทำผิดขั้นตอนอะไรไปหรือเปล่านะครับ
เลยได้เขียนขั้นตอนการสร้างแฟ้ม Add-ins มาให้ทุกท่านช่วยตรวจสอบให้ด้วยนะครับ สำหรับขั้นตอนนั้นมีดังนี้ครับ
1. เปิดไฟล์เดิมที่มี Macro อยู่ขึ้นมา
2. เปิดไฟล์ใหม่ แล้วคลิกเปิด Visual Basic Editor
3. ดับเบิ้ลคลิกที่ ThisWorkbook ใน VBAProject แล้ว
- เลือกรายการใน Dropdown ส่วนของ Object เป็น Workbook
- เลือกรายการใน Dropdown ส่วนของ Procedure เป็น AddinInstall
จะได้ Private Sub Workbook_AddinInstall ขึ้นมา
4. คลิกขวาที่ ThisWorkbook ใน VBAProject เพื่อสร้าง Module1 ไว้สำหรับเก็บ Code จากข้อที่ 1 เนื่องจาก Code จากไฟล์เดิมนั้นมีหลาย Sub นะครับ
5. ตัด Macro จากไฟล์เดิมในข้อที่ 1 มาวางไว้ใน Module1
6. พิมพ์คำสั่ง Call ใน Private Sub Workbook_AddinInstall ในข้อที่ 3 เพื่อเรียก Code จาก Module1 ในข้อที่ 4 (Code มีด้วยกันหลาย Sub ย่อยนะครับ)
7. คลิกเมนู Debug > Compile เพื่อตรวจสอบความถูกต้องของ Code ในข้อที่ 6
8. บันทึกไฟล์ใหม่ไว้ในที่อยู่ของ Add-Inn ดังนี้ คือ C:\Documents and Settings\[User Name]\Application Data\Microsoft\AddIns และเลือก Save as type เป็น Microsoft Excel Add-In
9. คลิกปุ่ม Save แล้วปิดไฟล์ใหม่
10. ปิดไฟล์เดิม แล้ว Save ทับชื่อเดิม โดยไม่มี Code อยู่แล้ว
11. เปิดไฟล์เดิม ที่ตัด Macro ออกไปแล้ว แล้วเข้าไปที่เมนู Tolls > Add-Ins เพื่อเรียกใช้ Add-Ins ที่สร้างขึ้น
มาถึงตรงนี้ ผมก็เจอ ข้อความเตือน "is not a valid Add-in" นะครับ ซึ่งไม่ทราบว่า เกิดจากอะไรนะครับ
รบกวนทุกท่านช่วยแนะนำด้วยนะครับ
ปล. เวลาตั้งชื่อให้ไฟล์ที่เป็น Add-Inn กับไฟล์เดิม จำเป็นต้องตั้งชื่อให้เหมือนกันหรือไม่ครับ

สมเกียรติ
16 Jun 2007, 09:00
ข้อ 3 ผมไม่เคยใช้ เพราะปกติผมจะเก็บรหัสไว้ใน Module ทั้งหมด เพราะรหัสต้องเป็นของกลางที่แฟ้มอื่นสามารถเรียกใช้ได้ ไม่น่าจะเก็บรหัสไว้ใน ThisWorkbook

ข้อ 8 ลองสั่ง save .xla ไว้ในโฟลเดอร์อื่นที่เป็นของตัวเองครับ

ไม่จำเป็นต้องตั้งชื่อเดิมตาม xls ก็ได้

nutty
24 Jun 2007, 02:51
ขอขอบคุณ อาจารย์สมเกียรติ มากครับ

ตอนนี้ผมสามารถสร้างไฟล์ Add Ins ได้แล้วครับ แต่ก็ยังติดปัญหาอยู่อีกนะครับ
รบกวนเรียนถาม อาจารย์สมเกียรติ และผู้รู้ท่านอื่นๆ ด้วยนะครับ

ปัญหาของผม คือ หลังจากที่สามารถเพิ่ม Add Ins ได้แล้วนะครับ ก็ได้เปิดไฟล์ที่ต้องการจะใช้ (ต้องการจะรัน) ขึ้นมานะครับ โดยไฟล์นี้ ไม่มี Code แล้ววนะครับ

แต่พอกดปุ่ม Button1 ในไฟล์เพื่อรัน (ในไฟล์ผมได้สร้าง ปุ่ม ขึ้นมาเพื่อใช้งานนะครับ) กลับพบว่า มีข้อความฟ้องว่า The macro 'Button1_Click' can not be found. นะครับ ไม่ทราบผมจะต้องทำอย่างไรต่อไปครับ เพื่อจะให้ไฟล์นี้รันได้นะครับ

ขอบคุณมากครับ

สมเกียรติ
24 Jun 2007, 09:40
ตรวจสอบชื่อ Macro ที่ assign ไว้ที่ตัวปุ่มก่อนครับว่า เลือกชื่อ Macro ถูกหรือยัง

nutty
24 Jun 2007, 10:35
ผมได้ คลิกขวา ที่ปุ่มแล้วนะครับ พบหน้าต่าง Assign macro ขึ้นมา โดยมี Macro Name ชื่อว่า Button1_Click นะครับ
แต่พอกดปุ่ม New กลับพบข้อความขึ้นมาว่า Reference is not valid ครับ
ไม่ทราบผมต้องแก้ไขอย่างไรครับ
ขอบคุณมากครับ

สมเกียรติ
24 Jun 2007, 11:29
ในการ Assign macro อย่าใช้ Macro ที่ Excel เลือกให้ ขอให้คลิกเลือกชื่อ macro ที่ต้องการเองครับ

nutty
24 Jun 2007, 14:37
ขอบคุณครับ อาจารย์ สมเกียรติ

แต่ตอนที่ผม Assign Macro นั้น ผมไม่พบ Macro ใดๆ ให้เลือกเลยนะครับ พอเข้าไปกด Browse ก็ไม่มีหน้าตาที่จะให้ค้นหาขึ้นมาเลยนะครับ

มาถึงตอนนี้ ผมขอเรียบเรียงความเข้าใจอีกครั้งนะครับ เพื่อให้อาจารย์ สมเกียรติ ตรวจสอบว่า ผมเข้าใจถูกหรือเปล่านะครับ
1. ไฟล์ที่ผมได้เปิดอยู่นั้น หากต้องการให้รันได้ จำเป็นจะต้องสร้าง Sub ย่อยขึ้นมาในโมดูล เพื่อเรียก Sub ที่อยู่ในโมดูลของแฟ้ม Add Ins ที่ต้องการ ใช่ไหมครับ
2. ในการเรียก Sub ที่อยู่ในโมดูลของแฟ้ม Add Ins นั้น สามารถใช้คำสั่ง Call ... เขียนใส่ใน Sub ย่อยของโมดูลนั้น ๆ ใช่ไหมครับ
3. ตอนที่เราจะ Assign Macro ให้กับไฟล์ที่ต้องการจะรันนั้น จำเป็นต้องพบ Sub ที่อยู่ในแฟ้ม Add Ins ด้วย ใช่ไหมครับ หากไม่พบจะต้องทำอย่างไรบ้างครับ
4. ในการเรียกใช้ Macro ข้าม Workbook หรือ ข้าม Add Ins นั้น สามารถทำได้ใช่ไหมครับ

ผมอาจจะเข้าใจช้าไปหน่อยนะครับ รบกวนอาจารย์ช่วยแนะนำด้วยครับ

ขอบคุณมากครับ

สมเกียรติ
25 Jun 2007, 08:52
ผมเข้าใจความต้องการผิดไปครับ เอาใหม่..

ถ้าใช้ add-in ไม่ต้องสร้างปุ่มกดใดๆในแฟ้มที่เราทำงาน แต่ควรหาทางทำให้เมื่อ load add-in เข้ามาในเครื่องแล้ว เกิดเมนูใหม่แทรกเพิ่มขึ้นมาบนเมนูเดิม แล้วให้คลิกเลือกเมนูใหม่นี้เพื่อสั่ง sub ใน add-in ทำงานครับ (ลองใช้แฟ้ม add-in ที่ผมแนบมา เป็น add-in ที่แจกในการอบรม จะพบเมนูชื่อ Expert แทรกเพิ่มก่อนเมนู Help โดยใช้รหัสตาม http://www.excelexperttraining.com/forums/showthread.php?t=14)

ส่วนการสร้างปุ่มกดแล้ว assign macro ใช้กับ macro ที่สร้างในแฟ้มที่เราทำงาน

nutty
26 Jun 2007, 10:45
ขอบคุณอาจารย์ สมเกียรติ มากครับ
มาถึงตรงนี้ ผมคิดว่าได้ความเข้าใจเพิ่มขึ้นมาอีกขั้นหนึ่งแล้ว ยังไงรบกวนให้อาจารย์ช่วยตรวจสอบความเข้าใจของผมอีกครั้งนะครับ จากคำถามต่อไปนี้
1. แฟ้ม Add Ins นั้น ไม่สามารถใช้งานได้กับไฟล์ที่มีการสั่งหรือเรียก Macro โดยการใช้ Tools ใดๆ เช่น Button , Combobox , etc จาก Form ใช่ไหมครับ
2. หากต้องการจะเรียกใช้ Macro โดยการใช้ Tools ใดๆ จาก Form ในข้อที่ 1 ควรจะเขียน Macro ไว้ในไฟล์นั้นๆ ใช่ไหมครับ
3. หากต้องการแยก Code ออกจากไฟล์ในข้อ 2 เพื่อป้องกันผู้ใช้งานเข้ามาแก้ไข ควรจะใช้ Personal Macro Workbook ใช่ไหมครับ
4. การใช้ Personal Macro Workbook นั้น ยังมีข้อด้อยตรงที่หากผู้ใช้งานมีความรู้ จะสามารถเข้ามา Copy ไฟล์ที่มีการรวบรวมโมดูลต่างๆ แยกจากไฟล์งานทั่วไปไว้ จะมีวิธีป้องกันการคัดลอก ให้คัดลอกไปเฉพาะไฟล์ที่ใช้งาน เท่านั้น ไหมครับ
ขอบคุณมากครับ

สมเกียรติ
26 Jun 2007, 11:29
1. แฟ้ม Add Ins นั้น ไม่สามารถใช้งานได้กับไฟล์ที่มีการสั่งหรือเรียก Macro โดยการใช้ Tools ใดๆ เช่น Button , Combobox , etc จาก Form ใช่ไหมครับ

ไม่ทราบครับเพราะไม่เคยลองสักที แต่คิดว่าถ้าใช้ VBA สั่ง run code ใน Add-in ต่ออีกชั้น น่าจะเป็นไปได้ ต้องเรียนถามคนที่ใช้ VBA เป็นประจำ


2. หากต้องการจะเรียกใช้ Macro โดยการใช้ Tools ใดๆ จาก Form ในข้อที่ 1 ควรจะเขียน Macro ไว้ในไฟล์นั้นๆ ใช่ไหมครับ


ปกติเป็นอย่างที่คิดมาครับ แต่ถ้าเราทำ Form ที่ใช้บ่อยๆเป็นของกลางที่ใช้ร่วมกันไว้เป็น Add-in ได้ก็จะดีไม่น้อย เพราะไม่ต้องเสียเวลาทำซ้ำไว้ในแต่ละแฟ้ม



3. หากต้องการแยก Code ออกจากไฟล์ในข้อ 2 เพื่อป้องกันผู้ใช้งานเข้ามาแก้ไข ควรจะใช้ Personal Macro Workbook ใช่ไหมครับ
4. การใช้ Personal Macro Workbook นั้น ยังมีข้อด้อยตรงที่หากผู้ใช้งานมีความรู้ จะสามารถเข้ามา Copy ไฟล์ที่มีการรวบรวมโมดูลต่างๆ แยกจากไฟล์งานทั่วไปไว้ จะมีวิธีป้องกันการคัดลอก ให้คัดลอกไปเฉพาะไฟล์ที่ใช้งาน เท่านั้น ไหมครับ



ผมไม่แนะนำให้ใช้ Personal Macro Workbook เพราะต้องเป็นรหัสที่ใช้ร่วมกันซึ่งจะพร้อมทำงานเมื่อเปิด Excel ขึ้นมา และเราควบคุมการใช้งานไม่ได้ว่าเมื่อใดอยากจะเลิกใช้

ควรสร้างแฟ้มที่มีรหัสหลักที่ใช้บ่อยๆ แล้วเราเลือกเปิดแฟ้มนี้ขึ้นมาหรือทำเป็น Add-in ดีกว่าครับ