Тема: Проверка наличия листа с конкретным именем в excel-книге
Как проверить - есть ли в данной excel книге (excel-book.xls) лист с именем "frozen"
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Проверка наличия листа с конкретным именем в excel-книге
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как проверить - есть ли в данной excel книге (excel-book.xls) лист с именем "frozen"
Перебрать коллекцию листов данной книги и у каждого проверять свойство Name.
Или же попробовать обратиться к этому листу по имени. При отсутствии будет ошибка.
попробовать обратиться к этому листу по имени. При отсутствии будет ошибка.
Вот этот вариант. Здесь немного корявая обработка ошибок и к тому же позднее связывание, но функция вполне работоспособна.
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
Нет господа, вы как хотите, но мимо такого "шедевра" пройти невозможно. Учите матчасть.
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
Красиво, красиво. Только вот зачем у вас:
... 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.
> Maxim T
Ексель - капризная штука. Не прибил койнить указатель на объект и будет процесс висеть. Иногда бывает что вроде все указатели уничтожены, а все равно висит...
ведь это же локальные переменные, они уничтожатся автоматически при выходе из функции
VK (2004-12-21 10:25:18) абсолютно прав. Так и есть, особливо касается, например, Word-а.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Проверка наличия листа с конкретным именем в excel-книге
Форум работает на PunBB, при поддержке Informer Technologies, Inc