Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Dim wkbkdestination As Workbook
Dim destsheet As Worksheet

For Each ThisWorkSheet In wkbkorigin.Worksheets 
    'this throws subscript out of range if there is not a sheet in the destination 
    'workbook that has the same name as the current sheet in the origin workbook.
    Set destsheet = wkbkdestination.Worksheets(ThisWorkSheet.Name) 
Next

Về cơ bản, tôi lặp qua tất cả các tờ trong sổ làm việc gốc sau đó đặt

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
6 trong sổ làm việc đích vào tờ có cùng tên với bản được lặp lại trong sổ làm việc gốc.

Làm thế nào tôi có thể kiểm tra nếu bảng đó tồn tại? Cái gì đó như:

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

BIGBEN

41.9k6 Huy hiệu vàng24 Huy hiệu bạc37 Huy hiệu đồng6 gold badges24 silver badges37 bronze badges

hỏi ngày 14 tháng 7 năm 2011 lúc 3:23Jul 14, 2011 at 3:23

1

Một số dân gian không thích phương pháp này vì việc sử dụng lỗi "không phù hợp", nhưng tôi nghĩ rằng nó được coi là chấp nhận được trong VBA ... Một cách tiếp cận khác là lặp lại mặc dù tất cả các tờ cho đến khi bạn tìm thấy một trận đấu.

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Darcyy

5.1565 huy hiệu vàng27 Huy hiệu bạc41 Huy hiệu đồng5 gold badges27 silver badges41 bronze badges

Đã trả lời ngày 14 tháng 7 năm 2011 lúc 4:27Jul 14, 2011 at 4:27

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Tim Williamstim WilliamsTim Williams

Phù bằng vàng 144K88 gold badges92 silver badges118 bronze badges

11

Nếu bạn chỉ quan tâm đến các bảng tính, bạn có thể sử dụng một cuộc gọi đánh giá đơn giản:

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function

Đã trả lời ngày 12 tháng 2 năm 2015 lúc 9:25Feb 12, 2015 at 9:25

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

RoryroryRory

31.6K5 Huy hiệu vàng30 Huy hiệu bạc33 Huy hiệu đồng5 gold badges30 silver badges33 bronze badges

10

Bạn không cần xử lý lỗi để thực hiện điều này. Tất cả những gì bạn phải làm là lặp lại trên tất cả các bảng tính và kiểm tra xem tên được chỉ định có tồn tại không:

Dim exists As Boolean

For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "MySheet" Then
        exists = True
    End If
Next i

If Not exists Then
    Worksheets.Add.Name = "MySheet"
End If

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Đã trả lời ngày 27 tháng 3 năm 2013 lúc 20:21Mar 27, 2013 at 20:21

fbonettifbonettifbonetti

6.4643 Huy hiệu vàng33 Huy hiệu bạc32 Huy hiệu Đồng3 gold badges33 silver badges32 bronze badges

1

Vì kiểm tra các thành viên của bộ sưu tập là một vấn đề chung, đây là phiên bản trừu tượng của câu trả lời của @Tim:

Function Contains(objCollection As Object, strName as String) As Boolean
    Dim o as Object
    On Error Resume Next
    set o = objCollection(strName)
    Contains = (Err.Number = 0)
    Err.Clear
 End Function

Hàm này có thể được sử dụng với bất kỳ bộ sưu tập nào như đối tượng (

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
7,
Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
8,
Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
9,
Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
0, v.v.).

Để kiểm tra sự tồn tại của một tờ, hãy sử dụng

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
1

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

shA.t

16.2k5 Huy hiệu vàng51 Huy hiệu bạc107 Huy hiệu đồng5 gold badges51 silver badges107 bronze badges

Đã trả lời ngày 24 tháng 1 năm 2013 lúc 20:11Jan 24, 2013 at 20:11

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Peter Albertpeter AlbertPeter Albert

16.6K4 Huy hiệu vàng64 Huy hiệu bạc88 Huy hiệu đồng4 gold badges64 silver badges88 bronze badges

2

Tôi đã viết cái này:

Function sheetExist(sSheet As String) As Boolean
On Error Resume Next
sheetExist = (ActiveWorkbook.Sheets(sSheet).Index > 0)
End Function

Đã trả lời ngày 16 tháng 4 năm 2018 lúc 19:24Apr 16, 2018 at 19:24

AobraobrAOBR

2492 Huy hiệu bạc4 Huy hiệu đồng2 silver badges4 bronze badges

3

Đã sửa: Không xử lý lỗi: Without error-handling:

Function CheckIfSheetExists(SheetName As String) As Boolean
      CheckIfSheetExists = False
      For Each WS In Worksheets
        If SheetName = WS.name Then
          CheckIfSheetExists = True
          Exit Function
        End If
      Next WS
End Function

Đã trả lời ngày 17 tháng 2 năm 2015 lúc 14:07Feb 17, 2015 at 14:07

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Shai Alonshai AlonShai Alon

93513 Huy hiệu bạc20 Huy hiệu Đồng13 silver badges20 bronze badges

0

Trong trường hợp bất kỳ ai muốn tránh VBA và kiểm tra nếu bảng tính tồn tại hoàn toàn trong công thức ô, có thể sử dụng các chức năng

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
2 và
Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
3:

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
4

Điều này sẽ trả về

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
5 nếu sổ làm việc chứa một tờ có tên là
Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
6 và
Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
7 nếu không.

Đã trả lời ngày 7 tháng 1 năm 2016 lúc 6:33Jan 7, 2016 at 6:33

Hàm Function WorksheetExists(sName As String) As Boolean WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)") End Function 8 nhỏ gọn (không phụ thuộc vào xử lý lỗi!)

Đây là một chức năng ngắn và đơn giản không dựa vào việc xử lý lỗi để xác định xem một bảng tính có tồn tại hay không (và được tuyên bố đúng để hoạt động trong mọi tình huống!)

Function wsExists(wsName As String) As Boolean
    Dim ws: For Each ws In Sheets
    wsExists = (wsName = ws.Name): If wsExists Then Exit Function
    Next ws
End Function

Ví dụ sử dụng:

Ví dụ sau đây thêm một bảng tính mới có tên

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
9, nếu nó chưa tồn tại:

If Not wsExists("myNewSheet") Then Sheets.Add.Name = "myNewSheet"

Thêm thông tin:

  • MSDN: ________ 40 Tuyên bố ____ ____ 41 (VBA)
    Dim exists As Boolean
    
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "MySheet" Then
            exists = True
        End If
    Next i
    
    If Not exists Then
        Worksheets.Add.Name = "MySheet"
    End If
    
    0…
    Dim exists As Boolean
    
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "MySheet" Then
            exists = True
        End If
    Next i
    
    If Not exists Then
        Worksheets.Add.Name = "MySheet"
    End If
    
    1 Statement
    (VBA)
  • MSDN: Tuyên bố
    Dim exists As Boolean
    
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "MySheet" Then
            exists = True
        End If
    Next i
    
    If Not exists Then
        Worksheets.Add.Name = "MySheet"
    End If
    
    2 (VBA)
    Dim exists As Boolean
    
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "MySheet" Then
            exists = True
        End If
    Next i
    
    If Not exists Then
        Worksheets.Add.Name = "MySheet"
    End If
    
    2 Statement
    (VBA)
  • MSDN: Các toán tử so sánh (VBA)Comparison Operators (VBA)

Đã trả lời ngày 11 tháng 5 năm 2018 lúc 16:56May 11, 2018 at 16:56

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Ashleedawgashleedawgashleedawg

Phim thương hiệu vàng 19.5K77 gold badges69 silver badges101 bronze badges

Giải pháp của tôi trông giống như TIMS nhưng cũng hoạt động trong trường hợp các tờ không phải là bảng tính - Biểu đồ

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
0

.

Đã trả lời ngày 3 tháng 8 năm 2014 lúc 15:43Aug 3, 2014 at 15:43

Uildriksuildriksuildriks

511 Huy hiệu bạc1 Huy hiệu đồng1 silver badge1 bronze badge

Muộn nhiều năm, nhưng tôi chỉ cần làm điều này và không thích bất kỳ giải pháp nào được đăng ... vì vậy tôi đã tạo ra một giải pháp, tất cả là nhờ vào sự kỳ diệu của (cử chỉ tay cầu vồng SpongeBob) "Đánh giá ()"!

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
1

Trả về true nếu tờ không tồn tại; Sai nếu tờ không tồn tại. Bạn có thể thay thế bất kỳ phạm vi nào bạn thích cho "1: 1", nhưng tôi khuyên không nên sử dụng một ô duy nhất, vì nó có lỗi (ví dụ: #N/A), nó sẽ trả về đúng.

Đã trả lời ngày 1 tháng 8 năm 2016 lúc 16:37Aug 1, 2016 at 16:37

1

Đặt bài kiểm tra vào một chức năng và bạn sẽ có thể sử dụng lại nó và bạn có khả năng đọc mã tốt hơn.

Không sử dụng "Sơ yếu lý lịch lỗi tiếp theo" vì nó có thể mâu thuẫn với phần khác trong mã của bạn.

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
2

Đã trả lời ngày 9 tháng 1 năm 2014 lúc 9:26Jan 9, 2014 at 9:26

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Martin Carlssonmartin CarlssonMartin Carlsson

4412 Huy hiệu vàng6 Huy hiệu bạc16 Huy hiệu đồng2 gold badges6 silver badges16 bronze badges

Ngắn và sạch sẽ:

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
3

Đã trả lời ngày 3 tháng 4 năm 2020 lúc 4:13Apr 3, 2020 at 4:13

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Anh hùng anh hùng ExcelExcel Hero

13.9k4 Huy hiệu vàng29 Huy hiệu bạc38 Huy hiệu đồng4 gold badges29 silver badges38 bronze badges

0

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
4

Đã trả lời ngày 5 tháng 8 năm 2013 lúc 10:56Aug 5, 2013 at 10:56

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

M1NTM1NTM1NT

3761 Huy hiệu vàng4 Huy hiệu bạc12 Huy hiệu đồng1 gold badge4 silver badges12 bronze badges

Tại sao không sử dụng một vòng nhỏ để xác định xem bảng tính được đặt tên có tồn tại không? Giả sử nếu bạn đang tìm kiếm một bảng tính có tên "Sheet1" trong sổ làm việc hiện đang mở.

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
5

Đã trả lời ngày 16 tháng 1 năm 2015 lúc 7:55Jan 16, 2015 at 7:55

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

ScottMCCSCOTTMCCScottMcC

3.7991 Huy hiệu vàng26 Huy hiệu bạc35 Huy hiệu Đồng1 gold badge26 silver badges35 bronze badges

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
6

Đã trả lời ngày 28 tháng 3 năm 2017 lúc 12:24Mar 28, 2017 at 12:24

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

ShrikantshrikantShrikant

5134 Huy hiệu bạc15 Huy hiệu Đồng4 silver badges15 bronze badges

Nếu bạn là một fan hâm mộ của

Dim exists As Boolean

For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "MySheet" Then
        exists = True
    End If
Next i

If Not exists Then
    Worksheets.Add.Name = "MySheet"
End If
3 hoặc bạn làm việc từ một quốc gia không phải tiếng Anh với một Excel không phải là tiếng Anh thì đây là một giải pháp tốt, hoạt động:

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
7

Hoặc trong một chức năng như thế này:

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
8

Đã trả lời ngày 23 tháng 5 năm 2017 lúc 9:25May 23, 2017 at 9:25

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

VityatavityataVityata

41.7K7 Huy hiệu vàng53 Huy hiệu bạc89 Huy hiệu đồng7 gold badges53 silver badges89 bronze badges

Thay đổi "dữ liệu" thành bất kỳ tên nào bạn đang thử nghiệm ...

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 
9

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Dan Lowe

47.6K17 Huy hiệu vàng120 Huy hiệu bạc110 Huy hiệu đồng17 gold badges120 silver badges110 bronze badges

Đã trả lời ngày 10 tháng 7 năm 2017 lúc 16:54Jul 10, 2017 at 16:54

gth826agth826agth826a

Huy hiệu bạc 1011 Huy hiệu đồng1 silver badge4 bronze badges

Không còn nghi ngờ gì nữa, chức năng trên có thể hoạt động, tôi vừa kết thúc với mã sau hoạt động khá tốt:

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
0

Lưu ý:

Dim exists As Boolean

For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "MySheet" Then
        exists = True
    End If
Next i

If Not exists Then
    Worksheets.Add.Name = "MySheet"
End If
4 là nơi tôi yêu cầu người dùng nhập tên, vì vậy điều này có thể không giống với bạn.

Cody Grey ♦

Phim thương hiệu vàng 234K50482 Huy hiệu bạc561 Huy hiệu đồng50 gold badges482 silver badges561 bronze badges

Đã trả lời ngày 28 tháng 6 năm 2016 lúc 2:24Jun 28, 2016 at 2:24

Tôi đã làm một điều khác: Chỉ xóa một tờ chỉ khi nó tồn tại - không gặp lỗi nếu nó không:

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
1

Đã trả lời ngày 17 tháng 2 năm 2015 lúc 15:22Feb 17, 2015 at 15:22

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Shai Alonshai AlonShai Alon

93513 Huy hiệu bạc20 Huy hiệu Đồng13 silver badges20 bronze badges

Tôi sử dụng chức năng này để kiểm tra và trả về một tên trang tính mới nếu cần. WSName là tên bảng tính mong muốn và WBCUR là sổ làm việc bạn muốn đăng ký. Tôi sử dụng nó vì không cần xử lý lỗi và có thể gọi nó bất cứ khi nào tôi tạo bảng tính mới.

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
2

Đã trả lời ngày 14 tháng 7 năm 2021 lúc 19:51Jul 14, 2021 at 19:51

Hướng dẫn vba check sheet exists - bảng kiểm vba tồn tại

Tôi đã đưa ra một cách dễ dàng để làm điều đó, nhưng tôi đã không tạo ra một phụ mới cho nó. Thay vào đó, tôi chỉ "chạy séc" trong phụ tôi đang làm việc. Giả sử tên trang tính mà chúng tôi đang tìm kiếm là "Sheet_Exist" và chúng tôi chỉ muốn kích hoạt nó nếu tìm thấy:

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
3

Tôi cũng đã thêm một cửa sổ bật lên khi tờ không tồn tại.

Đã trả lời ngày 14 tháng 6 năm 2018 lúc 15:13Jun 14, 2018 at 15:13

Tôi biết đó là một bài viết cũ, nhưng đây là một giải pháp đơn giản khác nhanh chóng.

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
4

Đã trả lời ngày 4 tháng 4 năm 2019 lúc 15:39Apr 4, 2019 at 15:39

GuestGuestGuest

4302 Huy hiệu bạc4 Huy hiệu đồng2 silver badges4 bronze badges

Tôi thực sự đã có một cách đơn giản để kiểm tra xem trang tính có tồn tại và sau đó thực hiện một số hướng dẫn:

Trong trường hợp của tôi, tôi muốn xóa trang tính và sau đó tạo lại cùng một trang có cùng tên nhưng mã bị gián đoạn nếu chương trình không thể xóa trang tính vì nó đã bị xóa

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
5

Cody Grey ♦

Phim thương hiệu vàng 234K50482 Huy hiệu bạc561 Huy hiệu đồng50 gold badges482 silver badges561 bronze badges

Đã trả lời ngày 28 tháng 6 năm 2016 lúc 2:24Mar 7, 2014 at 14:47

1