如何检查工作表的可用性
How to check the availability of a worksheet
我必须运行一组与工作相关的代码sheet“wins”,但前提是该工作sheet存在.
请分享代码以查看 sheet "wins" 的可用性。如果工作sheet"wins"存在,那么我只想运行那组代码,否则我想跳过执行那组代码并移动到下一行代码。
您可以使用 On Error Resume Next
跳过如果您尝试访问不存在的工作表并将其分配给对象变量时发生的错误。因此,如果工作表不存在,则不会发生错误,但变量为 Nothing
。如果工作表存在,则变量不是 Nothing
.
示例:
Sub test()
Dim wsWins As Worksheet
On Error Resume Next
Set wsWins = ActiveWorkbook.Worksheets("wins")
On Error GoTo 0
If Not wsWins Is Nothing Then
MsgBox "Worksheet wins exists."
Else
MsgBox "Worksheet wins does not exist."
End If
End Sub
Axel 的回答会很有效。有些人不喜欢使用错误抛出来测试是否存在某些东西。如果您是他们中的一员,那么我会在 Utility 模块中大量使用以下内容。它适用于工作表、图表等(基本上任何带有 'Name' 属性 的集合):
Public Function ExcelObjectExists(testName As String, excelCollection As Object) As Boolean
Dim item As Object
On Error GoTo InvalidObject
For Each item In excelCollection
If item.Name = testName Then
ExcelObjectExists = True
Exit Function
End If
Next
ExcelObjectExists = False
Exit Function
InvalidObject:
MsgBox "Developer error: invalid collection object passed in ExcelObjectExists."
ExcelObjectExists = False
End Function
你可以这样称呼它:
If ExcelObjectExists("wins", ThisWorkbook.Worksheets) Then
我必须运行一组与工作相关的代码sheet“wins”,但前提是该工作sheet存在.
请分享代码以查看 sheet "wins" 的可用性。如果工作sheet"wins"存在,那么我只想运行那组代码,否则我想跳过执行那组代码并移动到下一行代码。
您可以使用 On Error Resume Next
跳过如果您尝试访问不存在的工作表并将其分配给对象变量时发生的错误。因此,如果工作表不存在,则不会发生错误,但变量为 Nothing
。如果工作表存在,则变量不是 Nothing
.
示例:
Sub test()
Dim wsWins As Worksheet
On Error Resume Next
Set wsWins = ActiveWorkbook.Worksheets("wins")
On Error GoTo 0
If Not wsWins Is Nothing Then
MsgBox "Worksheet wins exists."
Else
MsgBox "Worksheet wins does not exist."
End If
End Sub
Axel 的回答会很有效。有些人不喜欢使用错误抛出来测试是否存在某些东西。如果您是他们中的一员,那么我会在 Utility 模块中大量使用以下内容。它适用于工作表、图表等(基本上任何带有 'Name' 属性 的集合):
Public Function ExcelObjectExists(testName As String, excelCollection As Object) As Boolean
Dim item As Object
On Error GoTo InvalidObject
For Each item In excelCollection
If item.Name = testName Then
ExcelObjectExists = True
Exit Function
End If
Next
ExcelObjectExists = False
Exit Function
InvalidObject:
MsgBox "Developer error: invalid collection object passed in ExcelObjectExists."
ExcelObjectExists = False
End Function
你可以这样称呼它:
If ExcelObjectExists("wins", ThisWorkbook.Worksheets) Then