Excel VBA (Visual Basic for Applications) là công cụ mạnh mẽ giúp tự động hóa các tác vụ và mở rộng khả năng của Excel. Trong bài viết này, Thủ Thuật sẽ hướng dẫn bạn cách sử dụng VBA cho worksheet trong Excel, giúp bạn thao tác dữ liệu và tùy chỉnh bảng tính hiệu quả hơn.
Mở Đầu
Workbook, Worksheet, và Cell là ba thành phần cốt lõi trong VBA. Hầu hết các đoạn mã VBA đều tương tác với một hoặc cả ba yếu tố này. Việc nắm vững cách sử dụng Worksheet trong VBA là rất quan trọng, cho phép bạn thực hiện các thao tác từ đơn giản như truy cập ô, đến phức tạp như ẩn, thêm, di chuyển, hoặc sao chép worksheet. Bài viết này sẽ trang bị cho bạn kiến thức cần thiết để làm chủ Worksheet VBA.
Hướng Dẫn Nhanh Về Worksheet VBA
Bảng dưới đây tóm tắt các tác vụ thường gặp khi làm việc với Worksheet VBA. Lưu ý: Worksheet
trong bảng này không chỉ định workbook cụ thể, nghĩa là Worksheet
chứ không phải ThisWorkbook.Worksheets
, wk.Worksheets
,… Điều này giúp ví dụ dễ hiểu hơn. Trong thực tế, bạn cần chỉ định workbook nếu không muốn sử dụng workbook mặc định.
Tác Vụ | Cách Thực Hiện |
---|---|
Truy cập theo tên | Worksheets("Sheet1") |
Truy cập theo vị trí | Worksheets(2) , Worksheets(4) |
Worksheet đầu tiên | Worksheets(1) |
Worksheet cuối cùng | Worksheets(Worksheets.Count) |
Sử dụng tên mã | Xem phần “Sử dụng Tên Mã Worksheet” |
Worksheet hiện tại | ActiveSheet |
Khai báo biến | Dim sh As Worksheet |
Gán biến | Set sh = Worksheets("Sheet1") |
Thêm worksheet | Worksheets.Add |
Thêm và gán biến | Set sh = Worksheets.Add |
Thêm vào đầu | Worksheets.Add Before:=Worksheets(1) |
Thêm vào cuối | Worksheets.Add After:=Worksheets(Worksheets.Count) |
Thêm nhiều Worksheet | Worksheets.Add Count:=3 |
Kích hoạt Worksheet | sh.Activate |
Sao chép | sh.Copy |
Sao chép sau | sh1.Copy After:=sh2 |
Sao chép trước | sh1.Copy Before:=sh2 |
Xóa | sh.Delete |
Xóa không cảnh báo | Application.DisplayAlerts = False: sh.Delete: Application.DisplayAlerts = True |
Đổi tên | sh.Name = "Data" |
Ẩn/Hiện | sh.Visible = xlSheetHidden , sh.Visible = xlSheetVisible |
Lặp qua (For) | For i = 1 To Worksheets.Count: Debug.Print Worksheets(i).Name: Next i |
Lặp qua (For Each) | For Each sh In Worksheets: Debug.Print sh.Name: Next |
Giới Thiệu
Ba yếu tố quan trọng nhất của VBA là Workbook, Worksheet, và Cell. Trong tất cả các mã chúng ta viết, 90% sẽ liên quan đến 1 hoặc cả 3 yếu tố trên.
Sử dụng worksheet để truy cập vào các ô của nó rất phổ biến trong VBA. Chúng ta có thể sử dụng VBA để ẩn, thêm, di chuyển hoặc sao chép worksheet. Tuy nhiên, chúng ta sẽ sử dụng chủ yếu để thực hiện các hành động trên một hoặc nhiều ô.
Sử dụng worksheet đơn giản hơn workbook. Với workbook, bạn phải mở chúng, tìm thư mục chứa chúng và kiểm tra xem chúng có đang được sử dụng hay không. Với worksheet, việc kiểm tra chỉ đơn giản là xem nó có hiển thị trong workbook hay không.
Truy Cập Worksheet
Trong VBA, mỗi workbook chứa một tập hợp các worksheet. Mỗi worksheet nằm trong bộ sưu tập Worksheets
. Bạn phải chỉ định tên worksheet để truy cập nó.
Ví dụ, đoạn mã sau viết “Hello World” vào ô A1 của Sheet1, Sheet2, và Sheet3 trong workbook hiện tại:
Bộ sưu tập Worksheets
luôn nằm trong một workbook. Nếu không chỉ định workbook, VBA sẽ sử dụng workbook mặc định.
Ẩn Worksheet
Ví dụ sau minh họa cách ẩn và hiện một worksheet:
Nếu muốn ngăn người dùng truy cập worksheet, bạn có thể ẩn nó. Worksheet ẩn chỉ có thể được hiển thị bằng mã VBA.
Bảo Vệ Worksheet
Ví dụ sau đây minh họa cách bảo vệ worksheet:
Lỗi “Subscript Out Of Range”
Khi làm việc với worksheet trong VBA, bạn có thể gặp lỗi “Subscript Out Of Range”. Lỗi này xảy ra khi bạn cố gắng truy cập một worksheet không tồn tại. Nguyên nhân có thể là:
- Tên worksheet viết sai chính tả.
- Tên worksheet đã bị thay đổi.
- Worksheet đã bị xóa.
- Chỉ số vượt quá số lượng worksheet hiện có (ví dụ:
Worksheets(5)
khi chỉ có 4 worksheet). - Workbook sai (ví dụ:
Workbooks("book1.xlsx").Worksheets("Sheet1")
thay vìWorkbooks("book3.xlsx").Worksheets("Sheet1")
).
Nếu gặp lỗi này, hãy sử dụng vòng lặp để hiển thị tên của tất cả các worksheet trong bộ sưu tập.
Sử Dụng Chỉ Số (Index)
Bạn có thể truy cập worksheet bằng chỉ số, tức là vị trí của tab worksheet trong workbook. Ví dụ:
Trong ví dụ trên, Debug.Print
được sử dụng để xuất kết quả ra cửa sổ Immediate (View > Immediate Window hoặc Ctrl + G).
Sử Dụng Tên Mã Worksheet
Cách tốt nhất để truy cập worksheet là sử dụng tên mã (code name). Tên mã không thay đổi khi bạn đổi tên worksheet, giúp mã VBA của bạn hoạt động ổn định.
Trong hình dưới, tên mã nằm ngoài ngoặc, còn tên worksheet nằm trong ngoặc.
Bạn có thể thay đổi cả tên worksheet và tên mã trong cửa sổ Properties (xem hình dưới).
Nếu mã của bạn sử dụng tên mã, việc người dùng thay đổi tên worksheet sẽ không ảnh hưởng đến hoạt động của mã. Ví dụ:
Tên Mã Trong Workbook Khác
Nhược điểm của việc sử dụng tên mã là nó chỉ áp dụng cho worksheet trong cùng workbook chứa mã VBA (ví dụ: ThisWorkbook
). Tuy nhiên, bạn có thể sử dụng hàm để tìm tên mã của worksheet trong workbook khác.
Ví dụ trên cho thấy ngay cả khi người dùng thay đổi tên mã của worksheet, mã VBA vẫn hoạt động bình thường. Bạn cũng có thể sử dụng VBAProject
của workbook để làm điều tương tự. Ví dụ:
Tóm tắt về tên mã:
- Sử dụng trực tiếp trong mã:
Sheet1.Range
. - Hoạt động ngay cả khi tên worksheet thay đổi.
- Chỉ áp dụng cho worksheet trong cùng workbook với mã.
- Có thể thay thế
ThisWorkbook.Worksheets("sheetname")
bằng tên mã. - Sử dụng hàm
SheetFromCodeName
để lấy tên mã từ workbook khác.
Sử Dụng ActiveSheet
ActiveSheet
đại diện cho worksheet đang hoạt động. Chỉ sử dụng ActiveSheet
khi bạn chắc chắn muốn thao tác với worksheet hiện tại. Nếu không, hãy chỉ định worksheet cụ thể.
Nếu sử dụng Range
mà không chỉ định worksheet, ActiveSheet
sẽ được mặc định.
Khai Báo Đối Tượng Worksheet
Khai báo đối tượng worksheet giúp mã gọn gàng và dễ đọc hơn.
Ví dụ dưới đây so sánh việc cập nhật vùng dữ liệu với và không khai báo đối tượng worksheet. Sub đầu tiên không khai báo, trong khi các sub còn lại khai báo đối tượng worksheet, giúp mã rõ ràng hơn.
Bạn cũng có thể sử dụng With
với đối tượng worksheet:
Thêm Worksheet
Bạn có thể thêm worksheet mới vào workbook bằng hàm Add
. Nếu không chỉ định đối số, worksheet mới sẽ được thêm trước ActiveSheet
.
Worksheet mới sẽ có tên mặc định như “Sheet4”. Bạn có thể đổi tên bằng thuộc tính Name
.
Ví dụ sau thêm worksheet mới và đặt tên là “Accounts”:
Public Sub AddSheet()
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets.Add
sht.Name = "Accounts"
ThisWorkbook.Worksheets.Add Count:=3
End Sub
Bạn cũng có thể chỉ định vị trí của worksheet mới bằng cách sử dụng Before
hoặc After
:
Public Sub AddSheetFirstLast()
Dim shtNew As Worksheet
Dim shtFirst As Worksheet, shtLast As Worksheet
With ThisWorkbook
Set shtFirst = .Worksheets(1)
Set shtLast = .Worksheets(.Worksheets.Count)
Set shtNew = Worksheets.Add(Before:=shtFirst)
shtNew.Name = "FirstSheet"
Set shtNew = Worksheets.Add(After:=shtLast)
shtNew.Name = "LastSheet"
End With
End Sub
Xóa Worksheet
Để xóa worksheet, sử dụng Delete
:
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Sheet12")
sh.Delete
Để ẩn thông báo cảnh báo khi xóa, sử dụng:
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
Lặp Qua Các Worksheet
Bạn có thể lặp qua các worksheet trong bộ sưu tập Worksheets
bằng For Each
hoặc For
:
For Each
:
Public Sub LoopForEach()
Dim sht As Worksheet
For Each sht In ThisWorkbook.Worksheets
sht.Range("A1") = "Hello World"
Next sht
End Sub
For
:
Public Sub LoopFor()
Dim i As Long
For i = 1 To ThisWorkbook.Worksheets.Count
ThisWorkbook.Worksheets(i).Range("A1") = "Hello World"
Next i
End Sub
Bộ Sưu Tập Sheets
Ngoài Worksheets
, còn có bộ sưu tập Sheets
. Sheets
bao gồm cả worksheet và chart sheet (sheet biểu đồ).
Worksheets
: Chỉ chứa các worksheet.
Sheets
: Chứa cả worksheet và chart sheet.
Kết Luận
Bài viết đã cung cấp hướng dẫn chi tiết về cách sử dụng Excel Worksheet VBA. Hy vọng những kiến thức này sẽ giúp bạn tối ưu hóa công việc với Excel và nâng cao hiệu suất làm việc. Hãy khám phá thêm các bài viết khác của Thủ Thuật để tìm hiểu thêm về các kỹ thuật VBA hữu ích.
Discussion about this post