为什么我不能使用“If Sheets('worksheetname')是什么”来检查Excel VBA中是否存在工作表

时间:2015-02-12 05:33:25

标签: excel vba excel-vba

我的意思是,我知道如何使用On Error Resume Next来解决这个问题。但我只是不明白为什么会发生这种错误。为什么excel编译器如果找不到某些工作表就不会返回Nothing ....我是否误解了一些概念?

2 个答案:

答案 0 :(得分:2)

是的,如果Sheets("Output")不存在,则会出错 您正在尝试访问不存在的对象。

试试这个:

Dim wsop As Worksheet

On Error Resume Next
Set wsop = Sheets("Output")
On Error Goto 0

If wsop Is Nothing Then
    Set wsop = Sheets.Add(, Sheets(Sheets.Count)) 'after last sheet
    wsop.Name = "Output"
End If

请注意,我们使用 OERN OEG0 来抑制变量赋值期间的错误。
要了解有关error handling的更多信息,请查看该链接。 HTH。

答案 1 :(得分:0)

试试这个

Sub test()

Dim wsSheet As Worksheet
On Error Resume Next
Set wsSheet = Sheets("Output") 'declare before check
On Error GoTo 0
If wsSheet Is Nothing Then
 Worksheets.Add.Name = "Output"
End If

End Sub