如何将with语句与if语句合并?

时间:2019-07-03 10:57:38

标签: excel vba if-statement with-statement

我一直在编写代码,以弹出一个消息框,您可以键入工作表的名称,然后它将在所有其他具有该名称的工作表的末尾创建一个新工作表。

在谷歌搜索的帮助下,我能够制作出一个弹出inputbox的代码,在其中我要为新工作表写一个想要的名称并带有with语句,它在末尾创建它在我所有其他的床单中。

我遇到的问题是if语句,它应该说,如果该名称不存在,请继续运行代码,如果该名称确实存在,请退出sub(不要继续处理下面的代码)。我通过将If Not xSht Is Nothing Then编写为If xSht Is Nothing Then来使其工作,但这会创建两个if语句,因此第一部分将完全无效。我还尝试将其编写为else语句,但是由于下面的with语句,它跳过了msgbox并仍然创建了一个新的工作表。

Dim ws As Worksheet
Dim xName As String
Dim xSht As Object

Set xSht = Sheets(xName)
xName = InputBox("Enter Sheet Name")

If xName = "" Then Exit Sub

If Not xSht Is Nothing Then
    MsgBox ("Name already exists")
    Exit Sub
End If

With ThisWorkbook   'Adds new sheet with the name it has been given
    Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    ws.Name = xName
End With

<More code>

2 个答案:

答案 0 :(得分:1)

颠倒顺序:

Set xSht = Sheets(xName)

和:

xName = InputBox("Enter Sheet Name")

(可能还有其他问题)

答案 1 :(得分:1)

尝试一下。您可以在检查工作表是否存在时关闭错误。输入名称后定义变量,否则会出现另一个错误。

Sub x()

Dim ws As Worksheet
Dim xName As String
Dim xSht As worksheet

xName = InputBox("Enter Sheet Name")
If xName = "" Then Exit Sub

On Error Resume Next 'avoids error if sheet doesn't exist
Set xSht = Sheets(xName)
On Error GoTo 0      'turn off error avoidance

If Not xSht Is Nothing Then
    MsgBox "Name already exists"
    Exit Sub
End If

With ThisWorkbook
    Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    ws.Name = xName
End With

End Sub