Проверьте, существует ли лист, затем удалите и добавьте новый с тем же именем - PullRequest
0 голосов
/ 26 апреля 2020

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

Sub DeleteSheet ()
   Dim ws as worksheet

   For each ws in worksheets
       if ws.name = "test" then
           Application.DisplayAlerts = False
           ws.delete
           Application.DisplayAlerts = True
       End if
   Next ws

   Sheets.add.name = "test"
End Sub

Кажется, он не работает, когда я запускаю саб. Сначала лист был удален, но он не создает новый. Мне нужно запустить его во второй раз, чтобы получить новый лист.

Пожалуйста, помогите мне с этим. Я был бы очень признателен. Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 26 апреля 2020

Вместо

Sheets.add.name = "test"

Вы можете создать объект, а затем задать имя:

Set ws = Sheets.add
ws.name = "test"

Или еще лучше:

Set ws = Worksheets.Add
ws.Name = "test"
0 голосов
/ 26 апреля 2020

Попробуйте этот код, вам может понадобиться вставить имя листа для удаления и добавить новое в этот код.

Sub deletews()

Dim ws As Worksheet
Dim wsName As String
wsName = InputBox("Insert your sheet name")
Application.DisplayAlerts = False
For Each ws In Worksheets
If Sheets(wsName).name = wsName Then
Sheets(wsName).delete
Sheets.Add
ActiveSheet.name = wsName
End If
Next ws
Application.DisplayAlerts = True
End Sub
0 голосов
/ 26 апреля 2020

В вашем нынешнем виде ваш код относится к активной книге. Попробуйте указать свою ссылку Worksheets. Например, если целевой книгой является книга, на которой выполняется макрос, попробуйте ...

Sub DeleteSheet()
   Dim wb As Workbook
   Dim ws As Worksheet

   Set wb = ThisWorkbook

   For Each ws In wb.Worksheets
       If ws.Name = "test" Then
           Application.DisplayAlerts = False
           ws.Delete
           Application.DisplayAlerts = True
       End If
   Next ws

   wb.Sheets.Add.Name = "test"
End Sub

Чтобы указать другую книгу, замените ...

Set wb = ThisWorkbook

на

Set wb = Workbooks("Book2.xlsx") 'change the workbook name accordingly
0 голосов
/ 26 апреля 2020

Другой вариант - удалить лист и использовать обработку ошибок для продолжения, если он не существует:

Sub sDelete()
    On Error GoTo E_Handle
    Sheets("Testing").Delete
    Sheets.Add.Name = "Testing"
sExit:
    On Error Resume Next
    Exit Sub
E_Handle:
    Select Case Err.Number
        Case 9
            Resume Next
        Case Else
            MsgBox Err.Description & vbCrLf & vbCrLf & "sDelete", vbOKOnly + vbCritical, "Error: " & Err.Number
    End Select
    Resume sExit
End Sub

С уважением,

0 голосов
/ 26 апреля 2020

Использование 2 шаги:

Sub DeleteSheet()
   Dim ws As Worksheet

   For Each ws In Worksheets
       If ws.Name = "test" Then
           Application.DisplayAlerts = False
           ws.Delete
           Application.DisplayAlerts = True
       End If
   Next ws

   Sheets.Add
   ActiveSheet.Name = "test"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...