Vba как проверить существует ли лист

Комментарии

On Error GoTo errНandle:
Set c = sheets(sSName)
‘ Альтернативный вариант :
Worksheets(sSName).Cells(1, 1) = Worksheets(sSName).Cells(1, 1)
IsWorkSheetExist = True
Exit Function
errНandle:
IsWorkSheetExist = False
End Function

Рublic Function IsWorkSheetExist(sSName As String) As Boolean
Dim c As Object

On Error GoTo errНandle:
Set c = sheets(sSName)
‘ Альтернативный вариант :
Worksheets(sSName).Cells(1, 1) = Worksheets(sSName).Cells(1, 1)
IsWorkSheetExist = True
Exit Function
errНandle:
IsWorkSheetExist = False
End Function

Только вот ошибочка: Set c = sheets(sName) — не правильно правильно: Set c = sheets(sSName). Или следующий код:
‘ Function IsWorkSheetExist
‘ Проверяет, имеется ли в активной рабочей книге лист с именем sSName.
‘ В случае успеха возвращает True, иначе — False

Рublic Function IsWorkSheetExist(sSName As String) As Boolean
Dim c As Object

On Error GoTo errНandle:
Set c = sheets(sSName)
‘ Альтернативный вариант :
Worksheets(sSName).Cells(1, 1) = Worksheets(sSName).Cells(1, 1)
IsWorkSheetExist = True
Exit Function
errНandle:
IsWorkSheetExist = False
End Function

Определить, есть ли лист в книге с заданным именем

Есть ли лист с определенным именем в книге?
Коллеги, подскажите, как определить это? Спасибо!

Определить существует ли лист в книге
Привет всем. Подскажите пожалуйста как определить существует ли лист в книге имя которого.

Проверить есть ли файл с заданным именем в папке
Здравствуйте. Мне необходимо проверить есть ли файл с таким именем в папке, и если есть, то.

Как создать новый лист в книге со ссылкой на предыдущий лист?
Добрый день. Есть реестр учета спецтехники. Его заполняет диспетчер каждый день. т.е. каждый день.

Лучший ответСообщение было отмечено как решение

Решение

AndreA SN, я, конечно, рискую, но ради Вас готов разок получить по шее.
Вы задаёте так много интересных вопросов по Excel’ю, ответы на которые давным-давно лежат в сети.

а у меня к Вам один вопрос: Вы в курсе, что существуют поисковые системы?

Лучший ответСообщение было отмечено как решение

Решение

Лучший ответСообщение было отмечено как решение

Решение

Ну и мои 5 копеек.

Можно использовать ADODB-соединение к книге екселя, открыть рекордсет для OpenSchema с параметром adSchemaTables. Проход по рекордсету даст все листы книги. Поиск по рекордсету позволит найти заданное имя. Метод удобен для поиска листов из внешнего файла.

да в курсе я))) но такого количества толковых ответов да еще сконцентрированных в одном месте Вы там не найдете))) Поисковая система для профи))) а я, слава Богу, вопросы пока учусь задавать. При этом решаю свои насущные задачки. Вот что гарантированно могу сказать — то не деньги я Вашими ответами зарабатываю)))
А вообще по моему профилю я не считаю, сколько раз мне задают один и тот же вопрос. Я просто отвечаю. А программирование — совсем не мой профиль)))
а если серьезно — пока тут висит один мой вопрос — я занимаюсь другими. На расшифровку поисковика нет совсем времени. И английский плохо знаю опять же. Вообщем благодарствую сказал.

Добавлено через 3 минуты
Кстати, о невеждах, ikki)))

Слепой иногда пройдет там, где зрячий оступится)))

Не вижу здравого смысла в сообщении #4: это засорение интернета ненужной информацией по данному вопросу и усложнение для непрограммистов, которым просто нужно написать макрос.

VBA Excel. Проверка существования листа

Пользовательская функция VBA Excel для проверки существования листа в рабочей книге путем определения результата присвоения ссылки на него объектной переменной. Присвоение состоялось (SheetExist = True) – искомый лист существует, произошла ошибка и присвоение не состоялось (SheetExist = False) – лист не существует.

Аргументы функции SheetExist:

  • WbName – имя открытой рабочей книги, в которой ищется лист.
  • ShName – имя искомого рабочего листа.

Перебор существующих листов циклом

Проверка существования рабочего листа в книге Excel с помощью перебора существующих листов циклом VBA и сравнения их имен с именем искомого листа. Совпадение найдено (SheetExist = True) – искомый лист существует, совпадение не найдено (SheetExist = False) – лист не существует.

Как узнать существует ли лист в книге?

Довольно часто при добавлении листов в книгу кодом необходимо удостовериться существует ли уже лист с таким именем или же нет. Т.к. если уже существует, то попытка создать лист с таким же именем неизбежно приведет к ошибке. Можно, конечно, поставить обработчик ошибки 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, если листа нет.
wb — объект Workbook, наличие листа в которой надо проверить.
sName — имя листа, наличие которого необходимо проверить.
Код функции Sh_Exist необходимо поместить в стандартный модуль и тогда для проверки наличия листа достаточно будет одной строки кода:

Sub Add_New_Sheet() If Not Sh_Exist(ActiveWorkbook, "Новый лист") Then ActiveWorkbook.Sheets.Add(, ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)).Name = "Новый лист" End If End Sub

«Новый лист» — вместо этого текста указывается имя листа, наличие которого необходимо проверить.
Если проверять надо не в активной книге, а в какой-либо другой, то вместо ActiveWorkbook необходимо указать эту книгу. Например, если книга называется «Отчет.xlsx», то код будет таким:

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 использовать, но это уже другая тема 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *