:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#1

Post by yangkodza »

Sub Macro3()
'
' Macro3 แมโคร
'


'
Range("C3").Select
ActiveCell.FormulaR1C1 = _
"='C:\Users\Admin\Desktop\ป.2\รายชื่อประถม.xlsx]».2.2'!R3C3:R52C5"
Range("C3").Select
Selection.AutoFill Destination:=Range("C3:E3"), Type:=xlFillDefault
Range("C3:E3").Select
Selection.AutoFill Destination:=Range("C3:E52")
Range("C3:E52").Select
Range("C3").Select
End Sub

ตัวอักษรสีแดงเป็นตำแหน่งเซฟงานปกติ
ถ้ามีการเปลี่ยนแปลงตำแหน่ง
มีวิธีให้มาโครเช็คอัตโนมัติไหมครับ
งานมี 2 ไฟล์
ไฟล์แรกเป็นไฟล์ไว้กรอกคะแนน
ไฟล์ที่สองเป็นไฟล์ฐานข้อมูลรายชื่อ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#2

Post by snasui »

:D การเปลี่ยนแปลงตำแหน่งไฟล์แล้วให้ Code ค้นหาตำแหน่งมาให้นั้นเป็นการทำเรื่องยาก เพราะต้องหาทุก Drive ทุก Folder ในเครื่อง โดยปกติแล้วเราจะไม่เขียน Code ในลักษณะนี้ เพราะจะเสียเวลาไปโดยไม่จำเป็น ควรทำความตกลงกับผู้ทำงานให้ Save ลงในตำแหน่งที่กำหนด หรือเขียน VBA ให้เลือก Save ในตำแหน่งที่กำหนดจะเป็นทางเลือกที่ดีกว่า

สำหรับ Event ที่ใช้ตรวจสอบเมื่อมีการ Save คือ Workbook_BeforeSave อยู่ใน ThisWorkbook ซึ่งจะอยู่ในรูปแบบตามด้านล่าง

Code: Select all

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    'Your code
End Sub
ตรง Your code คือคำสั่งที่ต้องเขียนขึ้นเองให้ทำการใด ๆ เช่นให้ Save ในตำแหน่งที่ต้องการไว้ครั้งหนึ่งก่อนเมื่อผู้ใช้งานมีการ Save ไฟล์ เป็นต้น
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#3

Post by yangkodza »

อาจาร์ครับ
ยกตัวอย่างได้ไหมครับ
ถ้าจะเป็นการบันทึกไว้หน้าเดสทอป เครื่องแต่ละเครื่องอ้างอิงตำแหน่งไม่เหมือนกัน
แล้วถ้าต้องการเก็บไว้ C:\data ครับ ต้องเขียนอย่างไรครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#4

Post by snasui »

:D ช่วยแนบไฟล์ตัวอย่างที่เขี่ยน Code มาด้วยครับ

ตัวสีแดงที่ระบายมานั้น ดูเหมือนจะไม่ถูกต้อง ชื่อไฟล์จะต้องมีก้ามปูครอบ ไม่ใช่ก้ามปูเปิดหายไปเหมือนที่ยกมาด้านบนครับ
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#5

Post by yangkodza »

snasui wrote::D ช่วยแนบไฟล์ตัวอย่างที่เขี่ยน Code มาด้วยครับ

ตัวสีแดงที่ระบายมานั้น ดูเหมือนจะไม่ถูกต้อง ชื่อไฟล์จะต้องมีก้ามปูครอบ ไม่ใช่ก้ามปูเปิดหายไปเหมือนที่ยกมาด้านบนครับ
ไฟล์แนบครับ
http://www.upload-thai.com/dl/120db53b0 ... 5ca6cda19f

ความตั้งใจจริงคือ งานมี 2 ไฟล์

Image

ไฟล์ฐานข้อมูลที่เป็นรายชื่อ

Image

และได้แบ่งห้องโดยทำเป็น sheet แต่ละแผ่น ซึ่งตรงส่วนนี้วิชาการเป็นคนทำ ทำทุกปี และบางครั้งมีการอัพเดทรายชื่อเป็นช่วงๆ กรณ๊เด็กเข้าใหม่
ผมเลยคิดว่าถ้ามีการอัพเดทรายชื่อ ก็แค่เอาไฟล์ต้นฉบับที่ทางวิชาการทำมา copy ทับ

Image

คราวนี้ตัวงาน ผมต้องการให้มาแสดงรายชื่อที่นี่ ซึ่งเป็นอีกไฟล์นึงกับตัวฐานข้อมูล

Image

และเมื่อรายชื่อขึ้นมาแล้ว รายชื่อจะไปแสดงในแผ่นงานอื่นๆด้สย ตามรายวิชา
ตอนนี้ผมให้รายชื่อไปแสดงในรายวิชาได้แล้วโดยใช้สูตร
ิb8=รายชื่อนักเรียน!C3
c8=รายชื่อนักเรียน!d3
d8=รายชื่อนักเรียน!e3
ดังภาพ
Image

สิ่งที่ผมเจอคือ
ถ้าเราไม่ใช้มาโครใช้วิธีแมนวลสามารถทำงานได้
แล้วเราจะเอาไฟล์ไปไว้ที่ไหนก็ได้ โดยฐานข้อมูลจะตามตลอด
วิธีการของผมคือ
ที่หน้ารายชื่อในไฟล์งานจริงเลือก cell C3 แล้วแก้ไขแถบสูตร
เช่นจากเดิมเป็น =[รายชื่อประถม.xlsx]ป.2.1!$C$3:$E$52
ผมแก้ไขให้เป็น ป.2.2 แล้วกด Enter (ตรงส่วนนี้ทำให้มีช่องเซลคอยรับค่าห้องแล้วนำมาประมวลผลไหมครับ)เพราะการแก้ไขแถบสูตรมีความเสี่ยงพอสมควร
จากนั้นลาก autofill จาก Cell c3 ไปถึง cell e3
และลาก autofill จาก cell e3 ลงไปถึง cell e52 (ตรงนี้ใช้ ดับเบิ้ลคลิกเมาส์ได้ครับ)
ผมทำแบบนี้สามาถทำงานได้ปกติ แต่ว่าคนที่จะเอาไฟล์งานไปใช้เป็นครูในโรงเรียน 100 กว่าคน
แต่ละคนก็รุ่รป้าๆ ซะส่วนใหญ่ ส่วนผมเองสอนคอมเด็กๆมา 16 ปีแล้วครับ 555+

ผมอยากจะทำให้ง่ายที่สุดสำหรับครูและฝ่ายวิชาการก็ไปต้องปรับเรื่องรายชื่อนักเรียนใหม่
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#6

Post by snasui »

yangkodza wrote:เช่นจากเดิมเป็น =[รายชื่อประถม.xlsx]ป.2.1!$C$3:$E$52
ผมแก้ไขให้เป็น ป.2.2 แล้วกด Enter (ตรงส่วนนี้ทำให้มีช่องเซลคอยรับค่าห้องแล้วนำมาประมวลผลไหมครับ)เพราะการแก้ไขแถบสูตรมีความเสี่ยงพอสมควร
:D สามารถกดแป้น Ctrl+H เพื่อเปิดกล่อง Replace จากนั้นช่องบนคีย์ค่าเดิม เช่น ป.2.1 ช่องล่างคีย์ ป.2.2 จากนั้นกดปุ่ม Replace All

สำหรับไฟล์แนบให้แนบมาที่ฟอรัม โดยปรับให้มีขนาดไม่เกิน 300kb กรณีไฟล์ขนาดใหญ่ ให้ลบข้อมูลที่ไม่เกี่ยวกับคำถามทิ้งไปก่อนครับ
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#7

Post by menem »

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

** การบันทึกทั้งหมด อยู่ใน Folder เดียวกัน
** หากต้องการให้อยู่คนละ Folder ได้ จะต้องมีการระบุไว้อย่างชัดเจนว่า ไฟล์ไหนอยู่ที่ไหนนะครับ

Code: Select all

Sub Macro2()
'
' Macro2 áÁâ¤Ã
'

    CurrDir = Application.ActiveWorkbook.Path
    ClassRoom = InputBox("ËéͧàÃÕ¹ àªè¹ 1.1 ¤×Í ».1/1")

'
    Range("C3").Select
'    ActiveCell.FormulaR1C1 = _
'        "='D:\Documents\Desktop\Ẻà¡çº 57¤Ðá¹¹ ¾ÔàÈÉ\».2\[ÃÒª×èÍ»ÃжÁ.xlsx]».2'!R3C3:R52C5"
    ActiveCell.FormulaR1C1 = "='" & CurrDir & "\[ÃÒª×èÍ»ÃжÁ.xlsx]»." & ClassRoom & "'!R3C3:R52C5"
    Range("C3").Select
    Selection.AutoFill Destination:=Range("C3:E3"), Type:=xlFillDefault
    Range("C3:E3").Select
    Selection.AutoFill Destination:=Range("C3:E52")
    Range("C3:E52").Select
    Range("C3").Select
End Sub
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#8

Post by yangkodza »

menem wrote:น่าจะประมาณนี้ครับ แต่ปัญหาที่จะตามมาคือ ไฟล์ที่ใช้บันทึกคะแนน มีเพียงไฟล์เดียว
ดังนั้น เวลาบันทึกก็จะเหลือเฉพาะข้อมูลของห้องล่าสุดเท่านั้น เว้นแต่จะมีการสั่งบันทึก
ลงในไฟล์ใหม่ต่างหาก (หรือใช้ VBA กำหนดชื่อไฟล์เพื่อทำการบันทึกให้อัตโนมัติอีกที)

** การบันทึกทั้งหมด อยู่ใน Folder เดียวกัน
** หากต้องการให้อยู่คนละ Folder ได้ จะต้องมีการระบุไว้อย่างชัดเจนว่า ไฟล์ไหนอยู่ที่ไหนนะครับ

Code: Select all

Sub Macro2()
'
' Macro2 áÁâ¤Ã
'

    CurrDir = Application.ActiveWorkbook.Path
    ClassRoom = InputBox("ËéͧàÃÕ¹ àªè¹ 1.1 ¤×Í ».1/1")

'
    Range("C3").Select
'    ActiveCell.FormulaR1C1 = _
'        "='D:\Documents\Desktop\Ẻà¡çº 57¤Ðá¹¹ ¾ÔàÈÉ\».2\[ÃÒª×èÍ»ÃжÁ.xlsx]».2'!R3C3:R52C5"
    ActiveCell.FormulaR1C1 = "='" & CurrDir & "\[ÃÒª×èÍ»ÃжÁ.xlsx]»." & ClassRoom & "'!R3C3:R52C5"
    Range("C3").Select
    Selection.AutoFill Destination:=Range("C3:E3"), Type:=xlFillDefault
    Range("C3:E3").Select
    Selection.AutoFill Destination:=Range("C3:E52")
    Range("C3:E52").Select
    Range("C3").Select
End Sub
Image

Image
ผมพยายามแก้เป็นชั่วโมงก็ไม่ผ่าน ผมแก้จุดที่ขีดเส้นใต้สีแดงครับ
test มัธยม.xls
รายชื่อมัธยม.xls
You do not have the required permissions to view the files attached to this post.
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#9

Post by menem »

ชื่อไฟล์ของ รายชื่อมัธยม เป็น .xlsx หรือว่า .xls ครับ ?
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#10

Post by yangkodza »

menem wrote:ชื่อไฟล์ของ รายชื่อมัธยม เป็น .xlsx หรือว่า .xls ครับ ?
เวนกำ ถึงบางอ้อครับ เป็น xls ครับ

ขอบคุณมากๆครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้มาโครทำงานถูกต้องโดยไม่ต้องปรับปรุงค่า

#11

Post by snasui »

yangkodza wrote:เวนกำ ถึงบางอ้อครับ เป็น xls ครับ

ขอบคุณมากๆครับ
:D คุณกำลังทำผิดกฎข้อ 1 ด้านบน ช่วยระมัดระวังด้วยครับ
Post Reply