สมมติ เดิมชีทมีชื่อว่า 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 ให้เลือกนำมาใช้ได้

Author: สมเกียรติ ฟุ้งเกียรติEmail: This email address is being protected from spambots. You need JavaScript enabled to view it.

E-Learning

Go to top