Тема: Проверка наличия листа с конкретным именем в excel-книге

Как проверить - есть ли в данной excel книге (excel-book.xls) лист с именем "frozen"

Re: Проверка наличия листа с конкретным именем в excel-книге

Перебрать коллекцию листов данной книги и у каждого проверять свойство Name.
Или же попробовать обратиться к этому листу по имени. При отсутствии будет ошибка.

Re: Проверка наличия листа с конкретным именем в excel-книге

попробовать обратиться к этому листу по имени. При отсутствии будет ошибка.

Вот этот вариант. Здесь немного корявая обработка ошибок и к тому же позднее связывание, но функция вполне работоспособна.

Function sheet_exist(file_name As String, sheet_name As String) As Boolean
    Dim exlapp
    Dim wbk
    Dim ws
    Set exlapp = CreateObject("Excel.Application")
    On Error GoTo no_file
    Set wbk = exlapp.Parent.Workbooks.Open(file_name)
    On Error GoTo 0
    GoTo go_on_1
no_file:
    MsgBox "Cannot open file " & file_name
    GoTo go_on_2
go_on_1:
    On Error GoTo no_such_sheet
    Set ws = wbk.Worksheets.Item(sheet_name)
    On Error GoTo 0
    sheet_exist = True
    GoTo go_on_2
no_such_sheet:
    sheet_exist = False
go_on_2:
    exlapp.Quit
End Function

Re: Проверка наличия листа с конкретным именем в excel-книге

Нет господа, вы как хотите, но мимо такого "шедевра" пройти невозможно. Учите матчасть.

Option Explicit
Option Base 0
Option Compare Text
Public Function testWorkSheet(ByVal bookName As String, ByVal sheetName As String) As Boolean
Dim objExcel As Object, tempBook As Object, tempSheet As Object
If Dir(bookName) <> "" Then
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Workbooks.Open fileName:=bookName
    Set tempBook = objExcel.ActiveWorkbook
    For Each tempSheet In tempBook.Worksheets
        If (StrComp(tempSheet.Name, sheetName, vbTextCompare) = 0) Then
            testWorkSheet = True
            Exit For
        End If
    Next
    objExcel.Quit
End If
Set objExcel = Nothing
Set tempBook = Nothing
Set tempSheet = Nothing
End Function

Re: Проверка наличия листа с конкретным именем в excel-книге

Красиво, красиво. Только вот зачем у вас:

...
Set objExcel = Nothing
Set tempBook = Nothing
Set tempSheet = Nothing
End Function

ведь это же локальные переменные, они уничтожатся автоматически при выходе из функции ? Вот и в хелпе (матчасти то ись) пишут:
When several object variables refer to the same object, memory and system resources associated with the object to which the variables refer are released only after all of them have been set to Nothing, either explicitly using Set, or implicitly after the last object variable set to Nothing goes out of scope.

Re: Проверка наличия листа с конкретным именем в excel-книге

> Maxim T
Ексель - капризная штука. Не прибил койнить указатель на объект и будет процесс висеть. Иногда бывает что вроде все указатели уничтожены, а все равно висит...

Re: Проверка наличия листа с конкретным именем в excel-книге

Maxim T пишет:

ведь это же локальные переменные, они уничтожатся автоматически при выходе из функции

VK (2004-12-21 10:25:18) абсолютно прав. Так и есть, особливо касается, например, Word-а.