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 for để duyệt qua tất cả các tệp trong một thư mục và câu lệnh if-else để kiểm tra xem tên của trang tính có trùng tên với trang tính kia không

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ố

#VBA
Sub sheetCheck()

Dim sheet As Worksheet
Dim Name As String

Name = "Sheet1"

For Each sheet In ThisWorkbook.Worksheets

    If sheet.Name = Name Then

            MsgBox "Yes! " & Name & " is there in the workbook."
            Exit Sub

    End If

Next sheet

MsgBox "No! " & Name & "is not there in the workbook."

End Sub

đầu ra

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?

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

     Làm mờ WS dưới dạng trang tính

  Đối với mỗi WS trong WB. Trang tính
          If StrComp(SheetName, WS. Name, vbTextCompare) = 0 Sau đó
              IsSheetExist = True
              Thoát chức năng
           Kết thúc Nếu
     Next WS

End Function

Và đây là cách bạn có thể gọi hàm này từ chương trình con

Sub Test_1()

     Làm mờ WB_Data dưới dạng Sổ làm việc
     Làm mờ kết quả dưới dạng Boolean

     Đặt WB_Data = ActiveWorkbook
     Result = IsSheetExist(WB_Data, "Tmp")

     MsgBox Result

End Sub

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

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?

Đây là kết quả bạn sẽ thấy khi không có sheet “Tmp”

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?

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

WS tiếp theo

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 đó

Kết thúc Nếu

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
     If StrComp(SheetName, WS. Name, vbTextCompare) = 0 Sau đó
          IsSheetExist = True
          Thoát chức năng
    Kết thúc Nếu
Next WS

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

     Dim WS As Worksheet

  On Error Resume Next
     Set WS = WB.Worksheets(SheetName)

     If Err <> 0 Then
          IsSheetExist = False
  Else
          IsSheetExist = True
     End If

     On Error GoTo 0

End Function

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

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?

Để 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
     IsSheetExist = False
Else
     IsSheetExist = True
End If

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

     Làm mờ WS dưới dạng trang tính

  Đối với mỗi WS trong WB. Trang tính
          If StrComp(SheetName, WS. Name, vbTextCompare) = 0 Sau đó
                 Ứng dụng. DisplayAlerts = False
               WS. Xóa
              Ứng dụng. DisplayAlerts = True
              Thoát chức năng
          Kết thúc nếu
     WS tiếp theo

Kết thúc chức năng

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()

     Làm mờ WB_Data dưới dạng Sổ làm việc

     Đặt WB_Data = ActiveWorkbook

    Gọi DeleteIfSheetExist(WB_Data, "

End Sub

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