我已经测试了许多代码来检查工作表是否存在(基于名称),如果不存在则创建一个。其中一些循环所有工作表,有些引用工作表,如果创建错误意味着该工作表不存在。哪个是最合适 - 正统 - 更快的方式来完成这项任务?
目前我正在使用:
Option Explicit
Sub test()
Dim ws As Worksheet
Dim SheetName As String
Dim SheetExists As Boolean
SheetName = "Test"
SheetExists = False
With ThisWorkbook
'Check if the Sheet exists
For Each ws In .Worksheets
If ws.Name = SheetName Then
SheetExists = True
Exit For
End If
Next
If SheetExists = False Then
'If the sheet dont exists, create
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = SheetName
End If
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
这就是我使用的。无需循环。直接尝试分配给一个对象。如果成功,则表示该工作表存在:)
Function DoesSheetExists(sh As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets(sh)
On Error GoTo 0
If Not ws Is Nothing Then DoesSheetExists = True
End Function
Run Code Online (Sandbox Code Playgroud)
用法
Sub Sample()
Dim s As String: s = "Sheet1"
If DoesSheetExists(s) Then
'
'~~> Do what you want
'
Else
MsgBox "Sheet " & s & " does not exist"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17096 次 |
| 最近记录: |