EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
With Sheets("PurchaseOrder")
.Range("I13") = r ': .Range("C7") = r.Offset(0, 1)
End With
Code: Select all
Range("A1:A10").ClearContents
Code: Select all
Range("A1:A10").Clear
Code: Select all
Range("A1:A10").Delete
ผมลองวิธีแล้วครับ ผลออกมาดังนี้คือ แทนที่มันจะเคลียร์ข้อมูลเดิม มันกลับเคลียร์ข้อมูลที่เอาไปวางใหม่ซะงั้น สาเหตุเกิดจากยังไม่ชำนาญในเรื่องการวางโค๊ด ยังไม่ทราบว่าจะต้องมีองค์ประกอบใดอีกบ้าง หรือ วางอะไรก่อน-หลังกรณีต้องการที่จะนำ Code มาวางที่ตำแหน่งเดิมให้ทำการ Cleare เฉพาะค่าเดิมออกก่อน การ Clear ค่าให้ใช้ Code ยกตัวอย่างเช่น
โค้ด: เลือกทั้งหมด
Range("A1:A10").ClearContents
Code: Select all
With Sheets("PurchaseOrder")
.Range("I13") = r.Offset(0, 6)
.Range("C7") = r.Offset(0, 5)
ที่เป็นเช่นนั้นเพราะไม่เข้าใจ Code ครับ การจะให้ลบเชลล์ใด ๆ ต้องบอกโปรแกรมให้ชัด เช่นbank9597 wrote:ผมลองวิธีแล้วครับ ผลออกมาดังนี้คือ แทนที่มันจะเคลียร์ข้อมูลเดิม มันกลับเคลียร์ข้อมูลที่เอาไปวางใหม่ซะงั้น สาเหตุเกิดจากยังไม่ชำนาญในเรื่องการวางโค๊ด ยังไม่ทราบว่าจะต้องมีองค์ประกอบใดอีกบ้าง หรือ วางอะไรก่อน-หลังกรณีต้องการที่จะนำ Code มาวางที่ตำแหน่งเดิมให้ทำการ Cleare เฉพาะค่าเดิมออกก่อน การ Clear ค่าให้ใช้ Code ยกตัวอย่างเช่น
โค้ด: เลือกทั้งหมด
Range("A1:A10").ClearContents
Code: Select all
Sheets("Temp").Range("A1:A10").ClearContents
Code: Select all
Range("A1:A10").ClearContents
เมื่อ Code ทำงานถูกต้องก็ไม่ต้องไปกังวลครับ ค่อยสนใจเมื่อเกิด Error หรือแสดงผลลัพธ์ไม่ถูกต้องส่วนที่ชื่อ "หน่วยงาน","ชื่อบริษัท" ยังวางผิดที่อยู่นั้น ผมใช้วิธีวางโค๊ดไม่รู้ว่าถุกหลักหรือไม่ครับ แต่แสดงผลออกมาตามต้องการครับ เลยนำไปปรับใช้อีกเรื่อยๆครับCode: Select all
With Sheets("PurchaseOrder") .Range("I13") = r.Offset(0, 6) .Range("C7") = r.Offset(0, 5)
ต้องค่อย ๆ เรียนรู้ไปครับ ให้เร่งปูพื้นฐานเรื่องการอ้างอิงเกี่ยวกับ Workbook, Worksheet, Range, Cells การ Loop ต่าง ๆ และจากที่เขียน ๆ มาจะเห็นได้ว่ายังไม่เข้าใจเรือง Offset จึงใช้แบบไม่มั่นใจ ลองทำความเข้าใจตามข้างล่างนี้แต่ปัญหาของผม ยิ่งลึกเข้าไป มันยิ่งยากขึ้น เหมือนเกมส์ยังไงไม่รู้ครับ โค๊ดที่อาจารย์ให้มาน่าจะปรับใช้ได้หมด แต่เปล่าเลย มันจะต้องมีอะไรๆแปลกให้คิดมากอยู่เรื่อยเลยครับ ผมเลยต้องรบกวนอาจารย์บ่อยเหลือเกิน
Code: Select all
'Other code
Sheets(Target).Range("C1:C20") = Sheets(Source).Range("B1:B20").Value
'Other code
Code: Select all
Range("A1").Offset(x,y) หมายถึงถัดจาก A1 ไปจำนวน x บรรทัด y คอลัมน์
Range("A1").Offset(0,0) คือไม่ไปไหนยังอยู่ที่ A1 เหมือนเดิม
Range("A1").Offset(1,1) ตำแหน่งเซลล์จะไปอยู่ที่ B2
ให้เร่งปูพื้นฐานเรื่องการอ้างอิงเกี่ยวกับ Workbook, Worksheet, Cell การ Loop ต่าง ๆ
แจ่มแจ้งครับ เห็นแนวทางทันที (คิดเองไม่ได้เลย) ผมต้องขอเวลาไปลองทำครับA1:A20 ของต้นทาง วางที่ A1:A20 ของปลายทาง, B1:B20 ของต้นทาง วางที่ C1:C20 ของปลายทาง ลักษณะของ Code จะได้เป็น
โค้ด: เลือกทั้งหมด
'Other code
Sheets(Target).Range("C1:C20") = Sheets(Source).Range("B1:B20").Value
'Other code
ทำเช่นนี้กับทุก Form สามารถเขียน Code การวางแต่ละ Form แยกจากกันได้แล้วค่อยสร้าง Procedure มาเรียกใช้ Code ทั้งหมดอีกที
Code: Select all
'Other code
Sheets(Target).Range("C1:C20") = Sheets(Source).Range("B1:B20").Value
'Other code