|
||||||||||||
Как узнать существует ли лист в книге?
Время создания: 16.03.2019 23:43
Текстовые метки: SheetExist
Раздел: Разные закладки - VBA - Excel - Листы
Запись: xintrea/mytetra_db_adgaver_new/master/base/1514991231mwe4fofzjv/text.html на raw.githubusercontent.com
|
||||||||||||
|
||||||||||||
Как узнать существует ли лист в книге? ' ===================================================================================== ' ##### существует ли лист в книге ' ' ------------------------------------------------------------------------------------- Function FnSh_Exist(oWb As Workbook, sName As String) As Boolean Dim wsSh As Worksheet On Error Resume Next Set wsSh = oWb.Sheets(sName) FnSh_Exist = Not wsSh Is Nothing End Function ' ===================================================================================== ' ===================================================================================== ' ##### Добавление(назначение листа) ' Sub test_FnAdd_New_Sheet() Set oSh = FnAdd_New_Sheet(ThisWorkbook, "Def") End Sub ' ------------------------------------------------------------------------------------- Function FnAdd_New_Sheet(ByVal oWb As Workbook, _ ByVal strShName As String) As Worksheet Dim wsSh As Worksheet On Error Resume Next blnShExist = FnSh_Exist(oWb, strShName) 'проверка существования листа If blnShExist Then Set FnAdd_New_Sheet = oWb.Sheets(strShName) Else oWb.Sheets.Add(, oWb.Sheets(oWb.Sheets.Count)).Name = strShName Set FnAdd_New_Sheet = oWb.Sheets(strShName) End If End Function ' ===================================================================================== Довольно часто при добавлении листов в книгу кодом необходимо удостовериться существует ли уже лист с таким именем или же нет. Т.к. если уже существует, то попытка создать лист с таким же именем неизбежно приведет к ошибке. Можно, конечно, поставить обработчик ошибки On Error. 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
Если предполагается использовать такую проверку более одного раза в коде, то имеет смысл вынести проверку в отдельную функцию Function Sh_Exist(wb As Workbook, sName As String) As Boolean Dim wsSh As Worksheet On Error Resume Next Set wsSh = wb.Sheets(sName) Sh_Exist = Not wsSh Is Nothing End Function
Функция проверяет наличие листа в указанной книге и возвращает True, если лист есть в книге и False, если листа нет. Sub Add_New_Sheet() If Not Sh_Exist(ActiveWorkbook, "Новый лист") Then ActiveWorkbook.Sheets.Add(, ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)).Name = "Новый лист" End If End Sub
"Новый лист" - вместо этого текста указывается имя листа, наличие которого необходимо проверить. Sub Add_New_Sheet() If Not Sh_Exist(Workbooks("Отчет.xlsx"), "Новый лист") Then Workbooks("Отчет.xlsx").Sheets.Add(, Workbooks("Отчет.xlsx").Sheets(Workbooks("Отчет.xlsx").Sheets.Count)).Name = "Новый лист" End If End Sub
Хотя в данном случае практичнее выделить отдельную переменную: Sub Add_New_Sheet() Dim wbCheck As Workbook Set wbCheck = Workbooks("Отчет.xlsx") If Not Sh_Exist(wbCheck, "Новый лист") Then wbCheck.Sheets.Add(, wbCheck.Sheets(wbCheck.Sheets.Count)).Name = "Новый лист" End If End Sub
Можно еще упростить и конструкцию With использовать, но это уже другая тема |
||||||||||||
Так же в этом разделе:
|
||||||||||||
|
||||||||||||
|