Gilbert có một trang tính (có tên là “Điều khiển”) chứa danh sách các tên trang tính mong muốn trong các ô A1: A12. Anh ta cần một cách, trong macro, để đổi tên từng trang tính trong số 12 trang tính khác trong sổ làm việc dựa trên phạm vi ô đó. Tên trang tính không cần phải động; chúng chỉ cần được đổi tên khi anh ta chạy macro.

Cốt lõi của việc phát triển macro để giải quyết nhu cầu này là dựa vào thuộc tính Name của mỗi trang tính mà bạn muốn đổi tên. Ví dụ, bạn có thể sử dụng một macro rất đơn giản như sau:

Sub RenameSheets()

Dim c As Range     Dim J As Integer

J = 0     For Each c In Range("A1:A12")

J = J + 1         If Sheets(J).Name = "Control" Then J = J + 1         Sheets(J).Name = c.Text     Next c End Sub

Macro chỉ cần bước qua phạm vi ô A1: A12 và nếu trang tính tiếp theo không có tên “Điều khiển”, thì nó sẽ đổi tên trang tính thành giá trị ô.

Như đã lưu ý, macro này rất đơn giản và rất có thể phải mạnh mẽ hơn rất nhiều. Ví dụ: nên làm gì nếu có nhiều hơn (hoặc ít hơn) 13 trang tính trong sổ làm việc hiện tại? Phải làm gì nếu có các ô trống trong phạm vi A1: A12? Phải làm gì nếu ai đó chạy macro và “Control” không phải là trang tính đang hoạt động?

Phải làm gì nếu có hai giá trị giống nhau trong A1: A12? Điều gì sẽ xảy ra nếu có khoảng trắng ở đầu hoặc cuối trên một hoặc nhiều tên trong phạm vi A1: A12? Những câu hỏi này và (rất có thể) là một loạt các câu hỏi khác có thể ảnh hưởng đến cách nhìn của macro. Đây là phiên bản macro đã nhận xét có tính đến một số khả năng vừa được đề cập:

Sub RenameSheets()

Dim c As Range     Dim J As Integer     Dim K As Integer     Dim sName As String     Dim w(12) As String     Dim bGo As Boolean     Dim sTemp As String

bGo = True     If Worksheets.Count <> 13 Then         ' Check to make sure exactly 13 worksheets in workbook         bGo = False         sTemp = "There are more than 13 worksheets."

End If     If ActiveSheet.Name <> "Control" Then         ' Check to make sure Control is active         bGo = False         sTemp = "Control worksheet is not active."

Else         ' Check for empty and duplicate cells in range         J = 0         For Each c In Range("A1:A12")

sName = Trim(c.Text)

If sName <> "" Then                 For K = 1 to J                     If LCase(w(K)) = LCase(sName) Then                         bGo = False                         sTemp = "Duplicate sheet names in list."

End If                 Next K                 If bGo Then                     ' Everything still good; add name                     J = J + 1                     w(J) = sName                 End If             End If         Next c     End If

If bGo Then         K = 0         For J = 1 To 12             K = K + 1             If Sheets(K).Name = "Control" Then K = K + 1             Sheets(K).Name = w(J)

Next J     Else         MsgBox(sTemp)

End If End Sub

Lưu ý rằng phiên bản thứ hai của macro dài hơn phiên bản đầu tiên bao nhiêu? Bất cứ khi nào bạn bắt đầu thêm nhiều kiểm tra trong một macro, nó thực sự có thể làm cho nó lâu hơn nhiều so với không có kiểm tra. Tất nhiên, lợi ích của việc thêm các séc là macro của bạn ít có khả năng gặp sự cố vì nó được sử dụng bởi những người khác ngoài bạn.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (1506) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.