snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#1
Post
by Panuwat » Thu Feb 17, 2011 3:26 pm
ผมได้ลองทำการประเมินผลพนักงานแบบคร่าวๆ เนื่องจากมีปัญหาอยู่ 3 ข้อที่จะเรียนถามอาจารย์ครับ
รายละเอียดโปรแกรม
1.การวัดผล เป็นเชิงปริมาณ 80% (เกี่ยวกับผลงานการขาย การหาเป้าหมาย) เชิงคุณภาพ 20% (เกี่ยวกับการทำงานภายใน) รวม 100%
2.การคีย์ข้อมูลจะตีย์ทุกเดือน สรุปเป็นรายปี
ปัญหาที่เรียนถาม
1.ต้องการ Export file เฉพาะชีด "ผลงานรายเดือน" ออกเป็นอีก 1 ไฟล์ โดยใช้ชื่อสาขาที่ใช้ในที่นี้คือ "บึงสามพัน.xls"วางไว้หน้า Desktop ซึ่งชื่อจะต้องแตกต่างกันไปตามชื่อสาขาที่ใช้ครับ
2.เนื่องจากโปรแกรมที่แนบ จะแสดงผลคะแนนในช่วงเดือนสุดท้ายที่ทำ (ช่องสีเขียว ชีต 1-10) ไม่สามารถแยกเป็นรายเดือนได้ ต้องการใช้แสดงเป็นรายเดือน Outstanding ในแต่ละเดือนครับ (ประมาณว่าให้โปรแกรมเช็คว่าถึงสิ้นเดือนก็สรุปคะแนนลงในเดือนนั้น เช่น ปี 2554 โปรแกรมจะสรุปเฉพาะเดือน มกราคม เดือน กุมภาพันธ์ จะสรุปถึงวันนี้ครับ
3.เนื่องจากโปรแกรมมีข้อมูลสำคัญต่อการให้คะแนน ซึ่งสามารถให้ผู้ใช้รู้ แต่ไม่สามารถแก้ไขได้ ผมได้ทำ Input box เพื่อให้ใส่ Password เพื่อแก้ไขแล้ว (ชีต"ข้อมูลสำคัญ"๗แต่ตอนคีย์ Password ให้โปรแกรมแสดงเป็น *** ครับ
ขอแสดงความนับถือ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Thu Feb 17, 2011 8:29 pm
ข้อ 1 ต้องการ Export Sheet ออกเป็นไฟล์ไว้ที่ Desktop โดยให้ชื่อตามสาขาซึ่งชื่อสาขาอยู่ในเซลล์ B1 ของชีทรายงานผลงาน สามารถใช้ Code ตามด้านล่างครับ
Code: Select all
Sub CreateFile()
Dim fName As Range
Set fName = ActiveSheet.Range("B1")
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\YourName\Desktop\" _
& fName & ".xls"
End Sub
YourName ใน Code ข้างบนคือ
ชื่อของผู้ใช้งานเครื่อง นั้น ๆ
ข้อ 2 ไม่เข้าใจครับ พื้นที่สีเขียวที่บอกคืออยู่ในช่วง S9:S21 ของแต่ละชีท ซึ่งไม่ได้เกี่ยวข้องกับรายชื่อ จึงไม่สามารถ Match กันได้ ลองอธิบายถึงช่วงข้อมูลเพื่อจะได้เข้าถึงข้อมูลได้อย่างรวดเร็วครับ
ข้อ 3 การให้คีย์รหัสแล้วแสดงเป็นรหัสแบบ Password ต้องเปลี่ยน InputBox ไปเป็น Form มาใช้แทน และเพิ่ม TextBox เข้ามาใน Form นั้น โดยกำหนด Property ของ TextBox เพิ่มตรง
PasswordChar โดยคีย์เครื่องหมาย
* ครับ
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#3
Post
by Panuwat » Thu Feb 17, 2011 9:17 pm
ข้อ1.ผมได้ลอง Copy Code ของของท่านอาจารย์ลงไปในปุ่มแล้ว ปรากฏว่าเกิดค่า EROR ขึ้นครับ (ตามไฟล์แนบประกอบการพิจารณา) แต่ถึงจะ EROR ก็ปรากฏเป็นไฟล์ book1 ขึ้นมาและผลลัพย์ตรงความต้องการ แต่ความต้องการจริงๆของผมคือ ให้ไฟล์ที่เกิดใหม่ ต้องชื่อ บึงสามพัน.xls ("B1") และไฟล์ บึงสามพัน.XLS ยังไม่ต้อง Active ให้ไปอยู่ที่หน้า Desktop เลย และไฟล์ที่ Active ยังเป็นไฟล์แม่เหมือนเดิมครับ
ส่วนข้อ 2 และข้อ 3 ผ่านได้เลยครับ
ขอแสดงความนับถือ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Thu Feb 17, 2011 9:24 pm
ส่งไฟล์ที่ทดลองทำแล้วมาให้ดูหน่อยครับ
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#5
Post
by Panuwat » Thu Feb 17, 2011 9:42 pm
ผมได้จัดส่งไฟล์ให้แล้วครับ ปุ่มอยู่ในชีต รายงานผลงาน ครับ
อีกอย่างหนึ่งครับผมอยากให้ไฟล์ใหม่ที่เกิดขึ้น เป็นการ Copy ไป เฉพาะค่า เพราะต้องส่งไฟล์นี้ไปที่อีกหน่วยงานหนึ่งครับ (แยก และไม่เกี่ยวข้องกับไฟล์แม่ครับ) อันที่เกิดใหม่นี้ยังเป็นสูตรจากไฟล์แม่อยู่ครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Thu Feb 17, 2011 9:52 pm
ผมได้ขยายภาพที่ส่งมาให้ใน Word เพื่อดู Error และดู Code ในไฟล์ที่ส่งมาให้แล้วครับ พบว่า
ยังไม่แก้ Path ให้ถูกต้อง
ตรง
C:\Documents and Settings\
YourName \Desktop\" _
& fName & ".xls"
ปกติต้องเป็นชื่อของผู้ใช้เครื่องนั้น ๆ ลองสังเกตดูในเครื่องที่ใช้อยู่ัปัจจุบันนี้ครับว่า Path สำหรับ Save ที่ Desktop เป็นอย่างไร ให้ใส่ตามนั้นครับ เช่นของผมเป็น
Code: Select all
C:\Documents and Settings\Santipong\Desktop\" _
& fName & ".xls"
ผมปรับ Code มาให้ใหม่เพื่อให้ Copy เป็น Value และปิดไฟล์ที่สร้างขึ้นมาใหม่ตามด้านล่างครับ
Code: Select all
Sub Button48_Click()
Dim fName As Range
Set fName = ActiveSheet.Range("B1")
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\Yourname\Desktop\" _
& fName & ".xls"
ActiveSheet.UsedRange.Copy
ActiveSheet.UsedRange.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#7
Post
by Panuwat » Thu Feb 17, 2011 10:22 pm
ทำได้แล้วครับ ตรงความต้องการทุกอย่าง ดีใจมากครับ ขอบพระคุณอาจารย์ที่เสียเวลากับผม ขอให้อาจารย์มีสุขภาพที่แข็งแรง รวย รวย นะครับ
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Thu Feb 17, 2011 10:24 pm
ขอบคุณสำหรับคำอวยพรครับ
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#9
Post
by Panuwat » Fri Feb 18, 2011 8:10 pm
รบกวนท่านอาจารย์อีกแล้วครับ สืบเนื่องจากโปรแกรมประเมินผลเดิม ผมทำตารางรองรับสำหรับพนักงานจำนวน 30 คน (เพราะแต่ละสาขาจำนวนพนักงานจะไม่เท่ากัน) ซึ่งสาขาของผม มีพนักงานจำนวน 7 คน ซึ่งจะทำให้เหลือช่องว่างอีก 23 ช่อง ซึ่งดูแล้วไม่สวยงาม และการพิมพ์ ก็ต้องมานั่งเซต ( ตัวอย่างตามไฟล์ประเมินผลแนบ ใน ชีตรายงานผลงาน ตั้งแต่ คอลัมน์ K จนถึง AG จะว่าง)
ความต้องการ : อยากให้โปรแกรมเช็คจากชีต "ข้อมูลสาขา" ว่ามีพนักงานที่จะถูกประเมินกี่คน ก็ให้โปรแกรมทำการซ่อน คอลัมน์ที่ว่าง ให้คงเหลือที่คอลัมน์ที่ใช้งาน
EX โปรแกรมประมินผล2 ตราแนบ ในชีต "รายงานผลงาน" ต้องการซ่อน คอลัมน์ K จนถึง คอลัมน์ AG ส่วน คอลัมน์ AH , AI (ซึ่งเป็นผลรวม) ยังคงอยู่8iy[
ขอแสดงความนับถือ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#10
Post
by snasui » Fri Feb 18, 2011 10:13 pm
ผมเขียน Code สำหรับ Hide และ Unhide คอลัมน์ว่างตั้งแต่ K:AG มาให้ครับ ซึ่งแล้วแต่ว่าว่างกี่คอลัมน์ก็จะกระทบแค่เพียงเท่านั้น นอกจากนี้หากมีการเรียก Code ซ้ำก็จะทำตรงกันข้าม คือหากมีการ Hide อยู่ก็จะ Unhide หาก Unhide อยู่ก็จะ Hide จะได้สะดวกในการเพิ่มหรือลดข้อมูลครับ
Code: Select all
Sub HideAndUnhide()
Dim r As Range
With ActiveSheet
Set r = .Range(.Range("AG3"), .Range("AG3").End(xlToLeft).Offset(0, 1))
End With
r.EntireColumn.Hidden = Not r.EntireColumn.Hidden
End Sub
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#11
Post
by Panuwat » Fri Feb 18, 2011 10:20 pm
ขอบคุณมากๆครับอาจารย์
ขอแสดงความนับถือ
ภาณุวัฒน์
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#12
Post
by Panuwat » Thu Feb 24, 2011 12:19 pm
เรียนท่านอาจารย์ครับ ตามที่ท่านอาจารย์ได้ช่วยแก้ปัญหาในเรื่องของการ Export Data ตามปัญหาดังนี้คือ ต้องการ Export file เฉพาะชีด "ผลงานรายเดือน" ออกเป็นอีก 1 ไฟล์ โดยใช้ชื่อสาขาที่ใช้ในที่นี้คือ "บึงสามพัน.xls"วางไว้หน้า Desktop ซึ่งชื่อจะต้องแตกต่างกันไปตามชื่อสาขาที่ใช้ครับ
ท่านอาจารย์ก็ไปบอก Code ซึ่งผมได้นำไปทำแล้ว ปรากฏว่าได้ตามที่ต้องการคือ
1. EXPORT เป็นไฟล์ใหม่ ใช้ชื่อที่แตกต่างตามสาขา (Cell ที่กำหนด)
2.นำไฟล์ใหม่ไปวางที่หน้า Desktop โดยที่ไฟล์ใหม่ไม่ Active และให้ไฟล์แม่ยังคง Active อยู่
3.ข้อมูลในไฟล์ใหม่จะต้องเป็นค่า ไม่เป็นสูตร
จึงอยากขอความกรุณาท่านอาจารย์ที่ต่อเนื่องจากเดิมดังนี้
1.ไฟล์ใหม่ดังกล่าวพบปัญหาคือ มันจะติดปุ่ม Buttons ไปด้วยครับ ซึ่ง User เมื่อนำไฟล์ใหม่ไปใช้แล้วคลิ๊กปุ่มนั้นจะเกิดการ ERROR ผมจึงไม่ต้องการให้ไฟล์ใหม่ที่ออกไป มีปุ่ม Buttons ติดไปด้วยครับ (ไม่สนใจเรื่อง Format ความสวยงามครับ ต้องการแต่ข้อมูลที่เป็นค่าและไม่ใช้สูตร
2.กรณีในการรับข้อมูล IMport Data ผมต้องการ เมื่อกดปุ่ม Buttons แล้ว จะปรากฏหน้าต่างในการหาไฟล์ที่จะนำเข้ามาเป็นข้อมูล งานการประเมินผล ครับ
ขยายความ งานที่ผมทำนี้เป็นงานการประเมินผล เป็นส่วนกลาง เหตุที่ต้องมีการ Export ไฟล์ คือนำส่งผลการประเมินไปให้หน่วยงานพิจารณาเงินเดือน และจำเป็นต้องมีการ Import ไฟล์ คือ พนักงานแต่ละคนของสาขาผมจะต้องนำส่งไฟล์การขายผลิตภัณฑ์ต่างๆ มีให้ทุกสิ้นเดือน ผมจะต้องนำไฟล์เหล่านั้น Import เข้ามาในโปรแกรมประเมินผลงานทุกเดือน (พนักงานจะส่งไฟล์ทุกสิ้นเดือน และผม Import ไฟล์นั้นเข้าในโปรแกรมประเมินผลงานในแต่ละเดือน
รบกวนท่านอาจารย์ช่วยแก้ปัญหาให้ผมด้วยครับ
ขอแสดงความนับถือ
ภาณุวัฒน์
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#13
Post
by snasui » Thu Feb 24, 2011 4:34 pm
สำหรับการลบปุ่มออกไป สามารถปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Sub Button48_Click()
Dim fName As Range
Set fName = ActiveSheet.Range("B1")
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\Yourname\Desktop\" _
& fName & ".xls"
ActiveSheet.UsedRange.Copy
ActiveSheet.UsedRange.Range("A1").PasteSpecial xlPasteValues
ActiveSheet.Shapes("Button 1").Delete
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
สำหรับการให้เปิดหน้าต่าง Open เมื่อคลิกปุ่มดูที่นี่ครับ
http://support.microsoft.com/kb/161930 ตัวอย่างในฟอรัมนี้ดูที่
http://www.snasui.com/viewtopic.php?f=3&t=309&start=10
Panuwat
Member
Posts: 82 Joined: Thu Feb 03, 2011 1:05 pm
#14
Post
by Panuwat » Sat Feb 26, 2011 8:48 pm
ขอบพระคุณอาจารย์มากครับ