2017-02-21 21 views
1

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

Sheet1 Sheet2 Sheet3 

Затем я удаляю Sheet3 и хочу добавить еще один лист, который идеально будет Sheet3 и не Sheet4

With ThisWorkbook 

    .Sheets.add After:=.Sheets(.Sheets.Count) 

End With 

Как я могу это сделать?

+0

Сверху моей головы вам нужно будет прокрутить существующие листы, чтобы проверить их имена, найти недостающий лист на итерации и установить новое имя на этот недостающий лист. Затем добавьте лист как обычно с «Name: = SheetName». –

ответ

2

Добавьте этот код в Workbook: enter image description here

Option Explicit 

Private Sub Workbook_NewSheet(ByVal Sh As Object) 

    On Error GoTo Workbook_NewSheet_Error 

    Sh.Name = "Sheet" & Sheets.Count 

    On Error GoTo 0 
    Exit Sub 

Workbook_NewSheet_Error: 

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Workbook_NewSheet of VBA Document DieseArbeitsmappe" 

End Sub 

Довольно много, если у вас есть следующие листы Sheet1, Sheet2 и Sheet4 и вы добавляете новый вы получите сообщение об ошибке, так как имя листа (Sheet4). Вот почему я добавил обработчик ошибок.

+0

Это только заполнит пробел, если удаленный лист является последним в итерации. Если «Лист3» удален и теперь есть 5 листов, он добавит «Sheet5» вместо «Sheet3». –

+0

@BrandonBarney - да, это будет делать именно так. Но я понял, что это то, о чем просит ОП. – Vityata

+1

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