测试或检查工作表是否存在。

154
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

基本上,我通过循环遍历源工作簿中的所有工作表,然后将目标工作簿中的destsheet设置为与当前在原始工作簿中迭代的工作表同名的工作表。

如何测试该工作表是否存在?类似于:

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then 

2
可能是重复的问题:Excel VBA If WorkSheet("wsName") Exists - sancho.s ReinstateMonicaCellio
24个回答

0
不需要循环或使用函数,我可以看到吗?
如果 wkbkdestination.Worksheets(ThisWorkSheet.Name).Name = ThisWorksheet.Name Then
'做一些事情
Else '跳到循环的末尾
End If

-1

我知道这是一个旧帖子,但这里有另一个简单且快速的解决方案。

Public Function worksheetExists(ByVal wb As Workbook, ByVal sheetNameStr As String) As Boolean

On Error Resume Next
worksheetExists = (wb.Worksheets(sheetNameStr).Name <> "")
Err.Clear: On Error GoTo 0

End Function

-1

我想出了一种简单的方法来做到这一点,但我没有为此创建一个新的子程序。相反,我只是在我正在工作的子程序中“运行了一个检查”。假设我们要查找的工作表名称是“Sheet_Exist”,如果找到它,我们只想激活它:

Dim SheetCounter As Integer

SheetCounter = 1

Do Until Sheets(SheetCounter).Name = "Sheet_Exist" Or SheetCounter = Sheets.Count + 1
 SheetCounter = SheetCounter +1
Loop
If SheetCounter < Sheets.Count + 1 Then
 Sheets("Sheet_Exist").Activate
Else
 MsgBox("Worksheet ""Sheet_Exist"" was NOT found")
End If

我还添加了一个弹出框,用于当表格不存在时。


-5

我实际上有一种简单的方法来检查工作表是否存在,然后执行一些指令:

在我的情况下,我想删除该工作表,然后使用相同的名称重新创建相同的工作表,但是如果程序无法删除该工作表,因为它已经被删除,则代码会中断。

Sub Foo ()

    Application.DisplayAlerts = False

    On Error GoTo instructions
    Sheets("NAME OF THE SHEET").Delete

    instructions:

    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "NAME OF THE SHEET"

End Sub

这个答案的问题在于,一旦确定该工作表确实存在,它就会被删除,因此不再存在。如果将其编写为函数,它可能会被命名为SheetExistsAfterDeletion,并且始终返回FALSE。 - ChrisB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接