问题: 如何判断1个sheet是否存在于某个workbook里?如果没有就创建一个
1 思路1:百度的例子,用错误捕捉语句判断是否创建
- 先假设存在
- 如果报错就跳转创建新sheet
- 如果存在这样的表直接跳出不再往下
- 思路很明确,简洁
Sub t1()
a = InputBox("请输入要查找的sheet名")
On Error GoTo 100
Sheets(a).Select
MsgBox ("您查找的名为 " & a & " 的sheet已存在")
Exit Sub
100:
Worksheets.Add after:=Worksheets(1)
ActiveSheet.Name = a
MsgBox ("您查找的名为 " & a & " 的sheet不存在,所以现在重新创建了!")
End Sub
2 思路2:百度的例子,用if+错误捕捉语句判断
- 思路更简洁,就一个if
- if判断没有,如果确实没有则创建,如果有就报告
- 但是有错误判断语句
- 也是用错误捕捉语句,但出错后继续往下执行,如果没这句,查一个不存在的sheet会报错,sheets(a)
Sub t5()
a = InputBox("请输入一个sheet名")
On Error Resume Next '没有这句,下面sheets(a)会找不到而报错
If Sheets(a) Is Nothing Then
MsgBox ("你输入的sheet " & a & "不存在,因此重新创建一个新的")
Worksheet.Add
ActiveSheet.Name = a 'activeworksheet错的?
Else
MsgBox ("你输入的sheet " & a & "已经存在")
End If
End Sub
3 思路3:我的思路
3.1 正确代码
- 常规思路,循环判断每个表名是否与要查找的相同
- 如果没有则创建新的
- 但一定要先遍历全部的sheet 才能判断是否有这个表
Sub test3()
Dim sh As Worksheet
a = InputBox("请输入你要查找的sheet名")
b = 0
For Each sh In Worksheets
If sh.Name = a Then
MsgBox ("您输入的sheet " & a & " 已经存在")
b = 1
End If
Next sh
If b = 0 Then
Worksheets.Add
ActiveSheet.Name = a
MsgBox ("您输入的sheet " & a & " 不存在," & "因此创建了新sheet")
End If
End Sub
3.2 我的思路的第一版错误代码
- 如果要用循环所有工作表,判断是否有这个sheet的话,需要先全部遍历后才能确定有没有
- 这种写法是错误的,判断第1个sheet后就会跳出
Sub t2()
Dim sh As Worksheet
a = InputBox("请输入你要查找的sheet名")
For Each sh In Worksheets
If sh.Name = a Then
MsgBox ("您输入的sheet " & a & " 已经存在")
Exit For
Else
Worksheets.Add
ActiveSheet.Name = a
MsgBox ("您输入的sheet " & a & " 不存在," & "因此创建了新sheet")
Exit For '不加这个会重新出错,会重复创建新表冲突? 因为if在for内部
End If
Next sh
End Sub