Làm cách nào để kiểm tra xem một trang tính có tồn tại bằng VBA không?
Trong khi làm việc trên nhiều trang tính, có thể có một số trang tính trùng lặp hoặc chúng tôi có thể muốn tránh tạo bất kỳ trang tính trùng lặp nào. Với mục đích này, chúng tôi có thể sử dụng VBA để kiểm tra xem có bất kỳ trang tính nào có cùng tên mà chúng tôi có thể muốn tạo một trang tính không Để kiểm tra xem trang tính có tồn tại hay không, chúng tôi yêu cầu một vòng lặp cùng với từng trang tính trong sổ làm việc và so sánh các tên chúng tôi đã tạo. Chúng tôi sẽ sử dụng hai vòng lặp; Đầu tiên, chúng ta sẽ tạo hai biến. một cái sẽ lưu trữ trang tính và cái thứ hai sẽ lưu tên của trang tính mà chúng tôi muốn tìm kiếm các bản sao hoặc kiểm tra xem trang tính có tên này có tồn tại không. Chúng ta sẽ sử dụng vòng lặp Nếu tệp tồn tại cùng tên, chúng tôi sẽ hiển thị hộp thông báo cho biết rằng trang tính tồn tại. Nếu không, hộp thông báo sẽ hiển thị rằng trang tính không tồn tại Mã số
đầu ra Phương pháp 1 Sổ làm việc này có ba trang tính. Tên của các trang tính là “Input”, “Tmp” và “Output”. Giả sử chúng ta muốn kiểm tra xem trang tính “Tmp” có tồn tại bên trong sổ làm việc này không. Đây là chức năng đầu tiên bạn có thể sử dụng để kiểm tra xem Function IsSheetExist(WB dưới dạng sổ làm việc, tên trang tính dưới dạng chuỗi) dưới dạng Boolean Và đây là cách bạn có thể gọi hàm này từ chương trình con Sub Test_1() Nếu bạn chạy macro khi trang tính “Tmp” có sẵn trong sổ làm việc thì bạn sẽ thấy hộp thông báo này Đây là kết quả bạn sẽ thấy khi không có sheet “Tmp” Dưới đây là lời giải thích cho chức năng đầu tiên Hàm này có hai tham số. Và kiểu dữ liệu của giá trị trả về là boolean Hàm IsSheetExist(WB dưới dạng Workbook, SheetName dưới dạng chuỗi) dưới dạng Boolean Hàm sử dụng câu lệnh For Each Next để lặp qua các trang tính của sổ làm việc đã cho Cho mỗi WS trong WB. Trang tính Hàm StrComp dùng để so sánh tên đã cho với tên của từng trang tính If StrComp(SheetName, WS. Name, vbTextCompare) = 0 Sau đó Tìm hiểu thêm về hàm StrComp Nếu khớp thì hàm sẽ trả về giá trị “True” và thoát Cho mỗi WS trong WB. Trang tính Nếu chức năng không thể tìm thấy tên bảng phù hợp bên trong câu lệnh For Each Next, mã sẽ được thực thi cho đến dòng “End Function”. Khi đó hàm sẽ trả về false vì giá trị mặc định của hàm VBA là false Phương pháp 2 Trong phương pháp này, chúng ta sẽ sử dụng các kỹ thuật xử lý lỗi để kiểm tra xem một trang tính có tồn tại trong sổ làm việc không. Dưới đây là mã hoàn chỉnh cho chức năng thứ hai Function IsSheetExist(WB As Workbook, SheetName As String) As Boolean Bạn có thể gọi hàm này từ một chương trình con giống như chúng ta đã làm ở trên cho hàm đầu tiên Đặt WS = WB. Trang tính (Tên trang tính) Nếu không có sheet nào có tên là SheetName thì dòng trên sẽ báo lỗi như thế này Để ngăn lỗi thời gian chạy đó, câu lệnh "On Error Resume Next" được sử dụng trước dòng đó. Như vậy chương trình sẽ thực hiện các dòng tiếp theo mà không báo lỗi. Tiếp theo phần bên dưới sẽ xác định xem có lỗi hay không và xuất giá trị trả về cho hàm tương ứng If Err <> 0 Then Trong VBA, chúng tôi sử dụng <> cho không bằng nhau. Nó trái ngược với biểu tượng =. Vì vậy, Err<>0 có nghĩa là lỗi không bằng 0. Vì vậy, có một lỗi. Sau đó, chúng tôi có thể quyết định rằng lỗi xảy ra do không có trang tính như vậy. Vì vậy, chúng tôi trả về false cho chức năng. Khác chúng ta có thể trở lại đúng Vì vậy, chúng tôi đã học được hai cách khác nhau để kiểm tra xem một trang tính có tồn tại bên trong sổ làm việc hay không. Đôi khi chúng tôi phải thực hiện một số hành động khác sau khi kiểm tra sự tồn tại của một trang tính cụ thể. Bây giờ hãy xem xét một vài ví dụ mà chúng ta cần thực hiện một hành động khác sau khi kiểm tra sự tồn tại của một trang tính Kiểm tra xem trang tính có tồn tại và xóa bằng VBAĐôi khi bạn có thể cần kiểm tra xem một trang tính cụ thể có tồn tại hay không và sau đó xóa trang tính đó nếu nó tồn tại. Đây là một cách để làm điều đó Hàm DeleteIfSheetExist(WB dưới dạng sổ làm việc, tên trang tính dưới dạng chuỗi) dưới dạng Boolean Bạn có thể gọi hàm trên bên trong một chương trình con như thế này Sub Test_3() Bạn có thể thắc mắc tại sao cần kiểm tra sự tồn tại của sheet. Bạn có thể xóa trang tính ngay lập tức. Sau đó, nếu xảy ra lỗi khi không có trang tính nào có tên đó, bạn có thể sử dụng “On Error Resume Next” để tiếp tục mà không bị gián đoạn. Trên thực tế, bạn có thể xóa trang tính mà không cần kiểm tra sự tồn tại của nó. Nhưng vấn đề là lỗi có thể tăng lên do nhiều lý do khác nhau. Ví dụ: có thể xảy ra lỗi nếu bạn cố xóa một trang tính của sổ làm việc được bảo vệ. Tuy nhiên, cũng có một sự thay đổi cho điều đó. Bạn có thể xác định lý do gây ra lỗi thời gian chạy bằng cách sử dụng số lỗi và sau đó phát triển mã tương ứng Nếu trang tính không tồn tại bỏ quaĐôi khi bạn có thể cần phải bỏ qua một số quy trình nếu một trang tính không tồn tại. Ví dụ, giả sử bạn muốn gọi một chương trình con khác nếu một trang tính tồn tại và bỏ qua nếu nó không tồn tại |