Phát hiện các loại trang tính trong VBA (Microsoft Excel)
Nếu bạn đang viết macro xử lý các trang tính khác nhau trong một sổ làm việc, bạn có thể cần phải tìm ra loại trang tính nào trong sổ làm việc, trước khi thực hiện bất kỳ quá trình xử lý nào. Điều này có thể đặc biệt quan trọng vì một số lệnh VBA chỉ hoạt động trên một số loại trang tính nhất định.
Trước khi bạn có thể tìm ra loại trang tính nào trong sổ làm việc, sẽ rất hữu ích nếu bạn biết cách Excel lưu trữ nội bộ một số đối tượng tạo nên sổ làm việc. Excel duy trì cả bộ sưu tập Trang tính và bộ sưu tập Biểu đồ. Bộ sưu tập Trang tính được tạo thành từ các đối tượng trang tính và bộ sưu tập Biểu đồ được tạo thành từ các đối tượng trang tính biểu đồ.
Đối tượng trang tính biểu đồ là những biểu đồ chiếm toàn bộ trang tính; nó không bao gồm những đối tượng được nhúng trong một trang tính.
Điều thú vị là, các đối tượng trang tính và trang biểu đồ cũng là thành viên của bộ sưu tập Trang tính. Vì vậy, nếu bạn muốn xử lý sổ làm việc theo thứ tự các trang tính xuất hiện, thì cách dễ nhất là thực hiện điều đó bằng cách xem qua bộ sưu tập Trang tính. Khi bạn làm như vậy, bạn có thể kiểm tra thuộc tính Type của các đối tượng riêng lẻ trong bộ sưu tập để xác định loại đối tượng đó là. Excel định nghĩa bốn loại đối tượng có thể thuộc về bộ sưu tập Trang tính:
xlWorksheet. * Đây là một trang tính thông thường.
xlChart. * Đây là một biểu đồ.
xlExcel4MacroSheet. * Đây là một trang tính macro, như được sử dụng trong Excel 4.0.
xlExcel4IntlMacroSheet. * Đây là một trang tính macro quốc tế, như được sử dụng trong Excel 4.0.
Bạn có thể bị cám dỗ khi nghĩ rằng nhìn vào danh sách các loại trang tính là đủ. Tuy nhiên, điều thú vị là Excel không phải lúc nào cũng trả về những gì bạn mong đợi cho thuộc tính Type. Thay vào đó, nếu bạn kiểm tra thuộc tính Type cho một biểu đồ, nó sẽ trả về một giá trị bằng xlExcel4MacroSheet.
Điều này có thể gây ra sự cố cho bất kỳ macro nào.
Sau đó, cách giải quyết vấn đề này là so sánh tên của từng mục trong bộ sưu tập Trang tính với tên trong bộ sưu tập Biểu đồ. Nếu tên nằm trong cả hai bộ sưu tập, thì sẽ an toàn hơn nếu giả sử rằng trang tính là một biểu đồ. Nếu nó không có trong cả hai, thì bạn có thể phân tích thêm để xem trang tính có phải là một trong các loại khác hay không. Macro sau, SheetType, tuân theo chính xác quy trình này:
Sub SheetType() Dim iCount As Integer Dim iType As Integer Dim sTemp As String Dim oChart As Chart Dim bFound As Boolean sTemp = "" For iCount = 1 To Sheets.Count iType = Sheets(iCount).Type sTemp = sTemp & Sheets(iCount).Name & " is a" bFound = False For Each oChart In Charts If oChart.Name = Sheets(iCount).Name Then bFound = True End If Next oChart If bFound Then sTemp = sTemp & " chart sheet." Else Select Case iType Case xlWorksheet sTemp = sTemp & " worksheet." Case xlChart sTemp = sTemp & " chart sheet." Case xlExcel4MacroSheet sTemp = sTemp & "n Excel 4 macro sheet." Case xlExcel4IntlMacroSheet sTemp = sTemp & "n Excel 4 international macro sheet" Case Else sTemp = sTemp & "n unknown type of sheet." End Select End If sTemp = sTemp & vbCrLf Next iCount MsgBox sTemp End Sub
Khi bạn chạy macro, bạn sẽ thấy một hộp thông báo hiển thị tên của mỗi trang tính trong sổ làm việc của bạn, cùng với loại trang tính đó là gì.
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (2538) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: