Страница: 1 |
Страница: 1 |
Вопрос: Как проверить существует ли лист книги в Exel?
Добавлено: 02.08.06 11:24
Автор вопроса: NewB
Нужно сделать такую проверку
Если рабочий лист активной книги Worksheets(2) не существует его нужно добавить.
Пытался сделать так, но VBA ругается
If Worksheets(2) = False Then
ActiveWorkbook.Sheets.Add After:=Worksheets(1)
End If
Подскажите как ?
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 02.08.06 11:33
____ В данном случае, наверное, проще If Worksheets.Count < 2 Then
Номер ответа: 2
Автор ответа:
NewB
Вопросов: 5
Ответов: 4
Профиль | | #2
Добавлено: 02.08.06 12:32
Сам навоял, может кому и пригодится:
Function SheetExiste(intIndexSheet As Integer) As Boolean
Dim objWh As Excel.Worksheet
Dim intIndexLst As Integer
For Each objWh In ActiveWorkbook.Worksheets
intIndexLst = objWh.Index
If intInexLst = intIndexSheet Then
SheetExiste = True
Exit Function
End If
Next objWh
SheetExiste = False
ActiveWorkbook.Sheets.Add After:=Worksheets(intIndexSheet - 1)
End Function
Номер ответа: 3
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #3
Добавлено: 02.08.06 13:53
Можно проще...
Err=0
on error resume next
WhorkSheets(2).Activate
If Err>0 Then
ActiveWorkbook.Sheets.Add After:=Worksheets(1)
End If
Номер ответа: 4
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #4
Добавлено: 02.08.06 14:04
____ Я так понмаю, что индексы листов не могут быть с разрывами. Если второго листа нет, то их всего только один. В этом плане проверка на 3 и вставка после второго может дать ошибку (если лист только один). Потому, всё-таки, ещё короче:
____ В результате появляется лист WorkSheets(index).
____ Можно, конечно, и в функцию оформить, только вот зачем?
Номер ответа: 5
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #5
Добавлено: 02.08.06 14:12
Логично, но только в том случае, если нужно определить листы по индексам, а если нужно найти конкретный лист по имени то можно написать так:
Err=0
on error resume next
application.activeworkbook.sheets(SheetName).Activate
If Err>0 Then
ActiveWorkbook.Sheets.Add
End If
Это более общий метод. Затем добавленный лист можно переименовать.
Номер ответа: 6
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #6
Добавлено: 02.08.06 14:52
____ Тогда ещё добавить:
....
Set sh = ActiveWorkbook.Sheets.Add
____ Что бы было чего переименовывать.
Номер ответа: 7
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #7
Добавлено: 02.08.06 14:56
Согласен, но я же так, в общем. А вообще товарищ не совсем верно задачу поставил - он определяет наличие второго листа. Не знаю что у него за программа, но каждая Workbook по умолчанию уже имеет три листа, и его затея может провалиться, если он запутается с открытыми книгами, лучше все-таки проверять по имени листа, а не номеру.
Номер ответа: 8
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #8
Добавлено: 02.08.06 16:02
____ Насчёт трёх листов, то я это уже давно настойчиво "задавливаю". В своём Excel — в настройках. А учитывая, что клиенты этого не делают, то на VBA всегда создаю отдельно книгу и устанавливаю в ней один лист.
xlApp.SheetsInNewWorkbook = 1[/CODE]
____ Согласен, что имя — более объективно. Индексы не обязательно будут привязаны к конкретному листу. В результате удаления первых листов индексы "переназначаются". С листами удобнее работать, как с ассоциативным массивом.
____ Более того, имя листа (не надпись на ярлычке!) становится глобальным и к нему можно просто обращаться, как к именованному объекту:
____ Причём, в отличие от способа sheets("Имя_листа" при обращении по имени после точки появится подсказка с возможными свойствами и методами.
Номер ответа: 9
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #9
Добавлено: 02.08.06 16:03
____ Насчёт трёх листов, то я это уже давно настойчиво "задавливаю". В своём Excel — в настройках. А учитывая, что клиенты этого не делают, то на VBA всегда создаю отдельно книгу и устанавливаю в ней один лист.
xlApp.SheetsInNewWorkbook = 1[/CODE]
____ Согласен, что имя — более объективно. Индексы не обязательно будут привязаны к конкретному листу. В результате удаления первых листов индексы "переназначаются". С листами удобнее работать, как с ассоциативным массивом.
____ Более того, имя листа (не надпись на ярлычке!) становится глобальным и к нему можно просто обращаться, как к именованному объекту:
____ Причём, в отличие от способа sheets("Имя_листа" при обращении по имени после точки появится подсказка с возможными свойствами и методами.
Номер ответа: 10
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #10
Добавлено: 02.08.06 16:08
Еще удобнее делать так:
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application"
If Err > 0 Then
Set xlApp = CreateObject("Excel.Application"
End If
Так ты не будешь при каждом нажатии F5 попадать в новый экземпляр Excel.
Номер ответа: 11
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #11
Добавлено: 02.08.06 16:10
Да, желательно перед всем этим:
Err = 0
Береженного Бог бережет
Номер ответа: 12
Автор ответа:
Незнайка
Вопросов: 7
Ответов: 188
Профиль | | #12
Добавлено: 02.08.06 20:16
Ребята, круто! Вот вас зацепило!!! Задача действительно фигово сформулирована. Задача проверять лист с индексом 2 - немножко чушь! А так круто! (Без обид!!!)