Как включить оператор with в оператор if? - PullRequest
0 голосов
/ 03 июля 2019

Я работал над кодом для всплывающего окна с сообщением, в котором вы можете ввести имя листа, а затем он создаст новый лист в конце всех остальных с таким именем.

С помощью googling я смог создать код, который выскакивает inputbox, где я пишу нужное имя для нового листа и с помощью оператора with создаёт его в конце всех мои другие листы.

У меня проблемы с оператором if, который должен сказать, что если этого имени не существует, продолжайте выполнение кода и, если имя существует, выйдите из sub (не продолжайте обработку кодов ниже). Я заставил If Not xSht Is Nothing Then работать, записав его как If xSht Is Nothing Then, но это создает два оператора if, поэтому первая часть полностью обнуляется. Я также попытался написать его как оператор else, но затем он перепрыгивает через msgbox и все еще создает новый лист из-за оператора with, приведенного ниже.

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 ]

1 голос
/ 03 июля 2019

Попробуй это.Вы можете отключить ошибки при проверке, если лист существует.Определите переменную после того, как имя было введено, в противном случае вы получите другую ошибку.

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
1 голос
/ 03 июля 2019

В обратном порядке:

Set xSht = Sheets(xName)

и

xName = InputBox("Enter Sheet Name")

(возможны другие проблемы)

...