ตัวอย่างที่ 1 : ต้องการเปลี่ยนชื่อชีท ให้มีชื่อใหม่ตามค่าที่อยู่ในเซลล์ A1

สมมติ เดิมชีทมีชื่อว่า Sheet1 เราต้องการเปลี่ยนชื่อชีทตามค่าที่เก็บไว้ในเซลล์ A1 เช่น ถ้า A1 มีคำว่า MyJan ก็ให้รหัส VBA ทำหน้าที่เปลี่ยนชื่อชีทเป็น MyJan และถ้า A1 มีค่าใหม่ ก็ให้ชื่อชีทถูกเปลี่ยนชื่อใหม่ตามค่าในเซลล์ A1 ได้ตามต้องการ

ขั้นที่ 1 : ใช้ Recorder บันทึกการคลิกเลือกเซลล์ A1 แล้วพิมพ์คำว่า MyJan ลงไป จะได้รหัส VBA :

Range("A1").Select
ActiveCell.FormulaR1C1 = "MyJan"

ขั้นที่ 2 : ใช้ Recorder บันทึกการสั่ง Home > Format > Rename Sheet แล้วพิมพ์คำว่า MyJan ทับคำว่า Sheet1 จะได้รหัส VBA :

Sheets("Sheet1").Name = "MyJan"

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

ขั้นที่ 3 : ทดลองเขียน VBA โดยผสมรหัสทั้งสองขั้นเข้าด้วยกันเป็นดังนี้

Sub RenameSheet()
    Sheets("Sheet1").Name = Range("A1")
End Sub

ซึ่งจะพบว่ารหัสใน Sub Procedure ชื่อ RenameSheet นี้ทำงานได้เพียงครั้งเดียว เนื่องจากตัวรหัส Sheets("Sheet1").Name กำหนดไว้ว่า ให้เปลี่ยนชีทที่มีชื่อว่า Sheet1 ดังนั้นหากในแฟ้มไม่มีชีทชื่อ Sheet1 เพราะถูกเปลี่ยนชื่อชีทเป็น MyJan ไปแล้ว รหัสจึงไม่สามารถทำงานตามต้องการ

ขอให้สังเกตย้อนกลับไปดูรหัสที่ได้จากขั้นแรก จะเห็นว่ามีรหัสคำว่า ActiveCell ซึ่งมีหมายถึงเซลล์ตำแหน่งใดก็ได้ ขอเพียงแต่กำลังถูกเลือกใช้งานอยู่ จึงมีคำว่า Active นำหน้า สงสัยไหมว่าในเรื่องของชีทนั้นมี ActiveSheet ด้วยไหม คราวนี้ให้ลองใช้คำว่า ActiveSheet ค้นหาใน Help ดูจะพบคำอธิบาย ดังนี้

ActiveSheet Property

Returns an object that represents the active sheet (the sheet on top) in the active workbook or in the specified window or workbook. Returns Nothing if no sheet is active. Read-only.

Remarks

If you don’t specify an object qualifier, this property returns the active sheet in the active workbook.

If a workbook appears in more than one window, the ActiveSheet property may be different in different windows.

Example

This example displays the name of the active sheet.

MsgBox "The name of the active sheet is " & ActiveSheet.Name

ถ้าอยากอ่านคำอธิบายทีละบรรทัดก็ตามใจ แต่ส่วนสำคัญที่สุดที่ควรดูเป็นจุดแรกก็คือตัวอย่างที่แสดงไว้ จะเห็นว่ามีคำสั่ง ActiveSheet.Name ซึ่งแปลว่า ชื่อชีทของชีทที่กำลังเลือกอยู่ และน่าจะนำมาใช้แทนคำว่า Sheets("Sheet1").Name ได้

ขั้นที่ 4 : กลับไปแก้รหัสที่เขียนเองใหม่ แล้วจะพบว่ารหัสชุดนี้ทำงานได้ตลอด

Sub RenameSheet()
    ActiveSheet.Name = Range("A1")
End Sub

หมายเหตุ ถ้าค้นหาคำว่า Active จาก Help จะพบว่านอกจาก ActiveCell และ ActiveSheet แล้วยังมี ActiveWorkbook, ActiveWindow, ActiveChart, ActivePane, และ ActivePrinter ให้เลือกนำมาใช้ได้

Related Articles

© Copyright 1999

สงวนลิขสิทธิ์ตามกฎหมาย

ห้ามนำข้อความหรือส่วนหนึ่งส่วนใดของบทความหรือวิดีโอหรือรูปภาพไปใช้เพื่อการค้าขาย หรือเพื่อประโยชน์ส่วนตัว

อนญาตให้นำไปใช้เพื่อสาธารณประโยชน์โดยขอให้ระบุที่มาและชื่อผู้เขียนกำกับไว้ด้วยเสมอ

ลิงก์เว็บ Excel Expert Training

เว็บสำหรับ เรียนออนไลน์

เว็บสำหรับ เรียนแบบกลุ่ม-ส่วนตัว

ติดตามข่าวสารได้จาก facebook

ถามปัญหาได้ที่ กลุ่มคนรัก Excel

และไลน์กลุ่ม Excel Expert Group

ที่อยู่และการติดต่อ

สมเกียรติ ฟุ้งเกียรติ 7/1 รามคำแหง ซอย 35 หัวหมาก บางกะปิ กทม 10240 โทร 097-140-5555, 02-718-9331

Excel@ExcelExpertTraining.com

SFK MVPLogoH60