2011-07-27 43 views
10

Có ai biết cách kiểm tra xem các trang tính nhất định có tồn tại hay không trong tài liệu Excel sử dụng Excel VBA không?Làm cách nào để kiểm tra xem các trang tính nhất định có tồn tại hay không trong Excel-VBA?

+0

thể trùng lặp của [Excel VBA Nếu bảng ("wsName") Tồn tại] (http://stackoverflow.com/questions/6040164/excel- vba-if-worksheetwsname-exist) –

+2

Có thể trùng lặp [Kiểm tra hoặc kiểm tra xem trang tính có tồn tại không] (https://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists) – puzzlepiece87

Trả lời

13

Mặc dù (không may) Phương pháp này không có sẵn, chúng ta có thể tạo ra chức năng riêng của chúng tôi để kiểm tra điều này ..

Hy vọng đoạn code dưới đây phù hợp với nhu cầu của bạn.

Edit1: Added cũng xóa tuyên bố ...

Sub test() 

    If CheckSheet(Sheets(3).Name) then 

     Application.DisplayAlerts = False 
     Sheets(Sheets(3).Name).Delete 
     Application.DisplayAlerts = True 

    End If 

End Sub 

Giải pháp tôi muốn đi cho ...

Function CheckSheet(ByVal sSheetName As String) As Boolean 

    Dim oSheet As Excel.Worksheet 
    Dim bReturn As Boolean 

    For Each oSheet In ActiveWorkbook.Sheets 

     If oSheet.Name = sSheetName Then 

      bReturn = True 
      Exit For 

     End If 

    Next oSheet 

    CheckSheet = bReturn 

End Function 

Ngoài ra, nếu bạn không nhớ để sử dụng mã chủ động tăng lỗi (không được khuyến cáo bằng các phương pháp hay nhất về mã hóa phổ biến) bạn có thể sử dụng mã 'Spartan Programming wannabe' này bên dưới ...

Function CheckSheet(ByVal sSheetName As String) As Boolean 

    Dim oSheet As Excel.Worksheet 
    Dim bReturn As Boolean 

    For Each oSheet In ActiveWorkbook.Sheets 

     If oSheet.Name = sSheetName Then 

      bReturn = True 
      Exit For 

     End If 

    Next oSheet 

    CheckSheet = bReturn 

End Function 


Function CheckSheet(ByVal sSheetName As String) As Boolean 

    On Error Resume Next 
    Dim oSheet As Excel.Worksheet 

    Set oSheet = ActiveWorkbook.Sheets(sSheetName) 
    CheckSheet = IIf(oSheet Is Nothing, False, True) 

End Function 
+0

Đây cũng là một giải pháp tuyệt vời - kiểm tra mà không dựa vào lỗi. Tôi biết có một cách tốt hơn, và tôi đã sử dụng cách này trước khi làm việc, tôi chỉ không thể nhớ làm thế nào để làm điều đó. @Tiago: Bạn sẽ sử dụng nó như thế nào trên Trang tính (1)? Chỉ cần vượt qua trong Trang tính (1) .Name? –

+0

@PaulR, yeap, chính xác ... 'Sheets (1) .name' sẽ thực hiện thủ thuật. Lưu ý rằng bạn có thể cần chủ động xác định sổ làm việc bạn sẽ sử dụng, vì tham chiếu 'trang tính' chỉ rõ ràng vào sổ làm việc hoạt động (đôi khi không phải là dự kiến). –

+0

Phải, thỉnh thoảng tôi đã cắn tôi vào công việc. Đối với các hoạt động lớn hơn, tôi có xu hướng sử dụng một khối Với đối tượng Worksheets của tôi ("SheetName") và gọi nó là tốt. Điều này sẽ, tất nhiên, sau khi tôi đã chắc chắn Worksheets ("SheetName") tồn tại. –

3

Something như thế này sẽ giúp bạn bắt đầu:

On Error Resume Next 

Dim wSheet as Worksheet 
Set wSheet = Sheets(1) ' can also be a string, such as Sheets("Sheet1") 

If wSheet Is Nothing Then 
    MsgBox "Worksheet not found!" 
    Set wSheet = Nothing ' make the worksheet point to nothing. 
    On Error GoTo 0 
Else 
    MsgBox "Worksheet found!" 
    Set wSheet = Nothing ' set the found Worksheet object to nothing. You can use the found wSheet for your purposes, though. 
End If 

Mã này được dựa trên http://www.ozgrid.com/VBA/IsWorkbookOpen.htm. Tìm kiếm hàm DoesSheetExist().

Hy vọng điều này sẽ hữu ích!

0

Tôi đã điều chỉnh mã này để sử dụng trong LotusScript, một trong những ngôn ngữ được IBM Notes sử dụng (trước đây là Lotus Notes) như hình dưới đây.

Public Function ExcelSheetExists(_ 
    xlBook As Variant, _ ' Excel workbook object 
    ByVal strSheetName As String _ 
    ) As Boolean 

    On Error GoTo errHandler 

    ForAll xlSheet In xlBook.Sheets 
     If xlSheet.Name = strSheetName Then 
      ExcelSheetExists = True 
      Exit Forall 
     End If 
    End ForAll 

    GoTo Done 

errHandler: 
    ' Call MyCustomErrorHandler() 
    Resume Done 
Done: 

End Function 
0
On Error GoTo Line1 
If Sheets("BOX2").Index > 0 Then 
Else 
Line1: MsgBox ("BOX2 is missing") 
end if 

tôi đã làm nó theo cách này :)

Các vấn đề liên quan