Sự khác nhau giữa book.Worksheets và book.Sheets trong Application (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,749
Được thích
4,341
Giới tính
Nam
Tôi chắc rằng đa số các bạn nghĩ rằng book.Worksheets và book.Sheets trong Application là giống nhau hoàn toàn, nhưng chỉ được viết ngắn lại để tiết kiệm ký tự. Nhưng điều đó là sai lầm hoàn toàn.

Khi bạn viết lệnh book.Worksheets("Sheet1")book.Sheets("Sheet1") đều tham chiếu đúng trang tính. Nhưng tại sao lại có đến hai lệnh này gây ra rắc rối.
Thật ra định nghĩa trang trong tệp Excel không chỉ duy nhất có trang tính, còn có biểu đồ, trang macro, ... Chính vị vậy book.Sheets để tổng hợp tất cả thành một danh sách chung là Sheets. Worksheets là danh sách duy nhất chỉ có trang tính, Charts là danh sách duy nhất chỉ có trang biểu đồ.

Nếu dự án của bạn có trang tính Sheet1 Chart1, để tham chiếu đến hai trang này thì cần đến hai phương thức tham chiếu là book.Worksheetsbook.Charts chính vì đó gây ra rắc rối trong viết mã, nên phương thức book.Sheets giúp bỏ qua rắc rối này.

Cách viết mã tham chiếu trang theo thuộc tính đúng nhất của chúng:
JavaScript:
Dim Sh As Object
Set Sh = ActiveBook.Charts("Chart1")
Set Sh = ActiveBook.Worksheets("Sheet1")

Cách viết mã tham chiếu trang chung với Sheets:
JavaScript:
Dim Sh As Object
Set Sh = ActiveBook.Sheets("Chart1")
Set Sh = ActiveBook.Sheets("Sheet1")
Set Sh = ActiveBook.Sheets("Macro1")

Bài viết này giúp các bạn hiểu về hai phương thức Worksheets và Sheets trong Application, để dễ dàng hơn trong viết mã. Tránh nhầm lẫn gây ra rối mã.
 
Sheets và WorkSheets đều là thuộc tính kiểu Collection của đối tượng WorkBook.
Vì là collection cho nên các phần tử của chúng không bắt buộc phải cùng một chủng loại.
WorkSheets chỉ chứa thuân một loại là worksheet (bảng tính) trong khi Sheets còn có thể chứa một vài chủng loại khác.

Sở dĩ có chuyện rắc rối này là vì ngày xưa (xưa lắm) MS định nghĩa "sheet" không rõ rệt lắm.
Macro 4 có 4 loại được MS coi là sheet:
  • xlWorksheet. worksheet bình thường.
  • xlChart. chart, chart sheet.
  • xlExcel4MacroSheet. macro sheet, dùng trong Excel 4.0.
  • xlExcel4IntlMacroSheet. international macro sheet, dùng trong Excel 4.0.
Thực ra còn một loại nữa gọi là DialogSheet nhưng Macro 4 đã thay thế loại này bằng Userform.

Kết luận:
Trừ phi bạn muốn làm việc với tất cả các loại, thường thì chỉ nên dùng thẳng collection WorkSheets và collection Charts cho nó lành.
Chú thích:
Sheets.Count = WorkSheets.Count + Charts.Count + Excel4MacroSheets.Count + Excel4IntlMacroSheets.Count
 
Upvote 0
Tôi làm chi tiết thêm. Excel cung cấp 4 loại sheet:

1. DialogSheet (Object không có interface Type). Loại sheet này vẫn tồn tại và được sử dụng. Userform là một giao diện khác được tạo bởi ActiveX).
2. Worksheet (Type = xlWorksheet)
3. Chart (Type = xlChart)
4. Worksheet (Type = xlWorksheet)

Sheets.Count = DialogSheets.Count + Charts.Count + Excel4MacroSheets.Count + Worksheets.Count


SheetDialog.png

Để kiểm tra các loại sheet có thể dùng code sau:

C#:
Sub DetectSheets()
    Dim sh As Object
    For Each sh In ThisWorkbook.Sheets
        Debug.Print "Name: " & sh.Name & " | Type: " & TypeName(sh)
    Next
End Sub

DetectSheetType.png
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom