Excel 检查工作表是否存在
我想检查名为“test”的工作表是否存在,如果不存在,则创建该工作表并将其命名为“test” 如果它存在,我将运行一个单独的代码块,但我没有在这里列出它。我使用了错误处理,因为如果发生错误,它会忽略错误Excel 检查工作表是否存在,excel,vba,Excel,Vba,我想检查名为“test”的工作表是否存在,如果不存在,则创建该工作表并将其命名为“test” 如果它存在,我将运行一个单独的代码块,但我没有在这里列出它。我使用了错误处理,因为如果发生错误,它会忽略错误 If Sheets("test").Name = "" Then 'MsgBox Sheets("test").Name & "Name" .Worksheets.Add After:=ThisWorkbook.Worksheets("test2") .Act
If Sheets("test").Name = "" Then
'MsgBox Sheets("test").Name & "Name"
.Worksheets.Add After:=ThisWorkbook.Worksheets("test2")
.ActiveSheet.Name = "test"
End If
无论我做什么,这段代码总是运行并创建一个新的工作表
如果工作表“test”不存在,代码将正常运行。它会创建一个新的工作表并重命名它,然后继续。显然,在另一种情况下,它不会重命名工作表,因为已经有另一个工作表“test”具有相同的名称。尝试以下操作:
Function IsExists(name As String, Optional wb As Workbook) As Boolean
Dim sheet As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set sht = wb.Sheets(name)
On Error GoTo 0
IsExists = Not sheet Is Nothing
End Function
实现这一点的一种稍微不同的方法是创建一个工作表名称字典 然后,可以使用exists函数测试图纸是否存在
Dim sheetNames As Object
Dim ws As Worksheet
' Create and populate dictionary
Set sheetNames = CreateObject("Scripting.Dictionary")
For Each ws In ThisWorkbook.Sheets
sheetNames.Add ws.Name, ws.Index
Next ws
' Test if sheet exists
If Not sheetNames.Exists("test") Then
' If not add to workbook
ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Worksheets("test2")).Name = "test"
' add sheet to dictionary
sheetNames.Add "test", ThisWorkbook.Worksheets("test").Index
End If
如果您对VBA不太熟悉,可以使用以下功能而不是函数:
Sub checkSheet()
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
End Sub
不太清楚为什么要添加其他工作表,但我会使用和外部函数检查工作表是否存在 我还将为“test2”添加一些错误检查,因此这里有一些代码,您应该能够进行调整
Sub Test()
Dim wsName As String: wsName = "test"
If Not WorkSheetExists(wsName) Then Worksheets.Add().Name = wsName
If WorkSheetExists("test2") Then Worksheets(wsName).Move _
After:=ThisWorkbook.Worksheets("test2")
End Sub
Function WorkSheetExists(ByVal strName As String) As Boolean
On Error Resume Next
WorkSheetExists = Not ActiveWorkbook.Worksheets(strName) Is Nothing
End Function
*编辑*
已更新函数以指定应测试的工作簿
如果OP对vba的了解有限,您将如何将您刚刚发布的内容与OP试图对其代码执行的操作结合起来?我将此作为加号-您传递工作表名称和工作簿参考,而不是依次查看每张工作表@Scott它将返回真/假-因此
如果不是IsExists(“Sheet1”),那么
@DarrenBartrup Cook,我知道如何使用它,但是为了得到一个好的答案,它需要向OP展示如何从sub引用函数。不起作用。尝试了这个方法,也尝试了for(遍历所有工作表),基本上他们什么都不做。它根本不靠近wsname表。
Function WorkSheetExists(ByVal SheetName As String, Optional ByRef WorkbookToTest As Workbook) As Boolean
On Error Resume Next
If WorkbookToTest Is Nothing Then Set WorkbookToTest = ThisWorkbook
WorkSheetExists = Not WorkbookToTest.Worksheets(SheetName) Is Nothing
End Function