Đổi tên trang tính dựa trên danh sách (Microsoft Excel)
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.