Как узнать существует ли лист в книге?
Что умеет Excel
Довольно часто при добавлении листов в книгу кодом необходимо удостовериться существует ли уже лист с таким именем или же нет. Т.к. если уже существует, то попытка создать лист с таким же именем неизбежно приведет к ошибке. Можно, конечно, поставить обработчик ошибки On Error.
Sub Add_New_Sheet() On Error Resume Next Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист" End Sub
Sub Add_New_Sheet()
On Error Resume Next
Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
End SubНо тогда, если лист с таким именем уже существует, будет создан лист со следующим порядковым номером(типа Лист4). А этого в большинстве случаев не надо, т.к. обычно планируется все же либо создать лист с нужным именем, либо не создавать вовсе.
Я обычно проверяю так:
Sub Add_New_Sheet() Dim wsSh As Worksheet On Error Resume Next Set wsSh = Sheets("Новый лист") If wsSh Is Nothing Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист" 'здесь можно либо активировать лист, либо производить еще какие действия 'wsSh.Activate End Sub
Sub Add_New_Sheet()
Dim wsSh As Worksheet
On Error Resume Next
Set wsSh = Sheets("Новый лист")
If wsSh Is Nothing Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
'здесь можно либо активировать лист, либо производить еще какие действия
'wsSh.Activate
End SubЕсли предполагается использовать такую проверку более одного раза в коде, то имеет смысл вынести проверку в отдельную функцию
Function Sh_Exist(sName As String) As Boolean Dim wsSh As Worksheet On Error Resume Next Set wsSh = Sheets(sName) Sh_Exist = Not wsSh Is Nothing End Function
Function Sh_Exist(sName As String) As Boolean
Dim wsSh As Worksheet
On Error Resume Next
Set wsSh = Sheets(sName)
Sh_Exist = Not wsSh Is Nothing
End FunctionТогда достаточно будет одной строки кода, в которой будет меняться только имя листа:
Sub Add_New_Sheet() If Not Sh_Exist("Новый лист") Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист" End If End Sub
Sub Add_New_Sheet()
If Not Sh_Exist("Новый лист") Then
Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
End If
End Sub
Также см.:
→Как проверить открыта ли книга?

4630
