Страница: 1 |
Страница: 1 |
Вопрос: Set xlApp = CreateObject("Excel.Application&q
Добавлено: 17.05.05 13:21
Автор вопроса: Lister | ICQ: 298621256
Когда Excel отсутствует на компе
Set xlApp = CreateObject("Excel.Application")
вызывает ошибку 91, причем обработчик ошибок почему-то ее не перехватывает и прога слетает.
Как можно проверить наличие на компьютере Excel.Application?
Второй вопрос:
в момент создания файла Excel (а файлы бывает создаются долго) Screen.MousePointer = vbHourglass не работает. Чем это вызвано и как заставить смениться курсор?
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #1
Добавлено: 17.05.05 14:42
Странно: ошибка "Object variable or With block variable not set" (код 91) - относится к разряду "trappable errors". И должна перехватываться обработчиком, по идее. Кроме того, если Эксель не установлен, то приведённый тобою код должен вызывать ошибку 429. У меня Эксель установлен, поэтому я могу лишь попытаться эмулировать ту же ошибку:
Dim MyObj As Object
Set MyObj = CreateObject("Just.Some.Shit"
End Sub
Ругается, что "ActiveX component can't create object" (код 429). А "On Error Resume Next" прекрасно подавляет ошибку...
Я сам всегда проверял наличие Офисных приложений путём вызова CreateObject с обработчиком ошибок.
Странно всё это...
Номер ответа: 2
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #2
Добавлено: 17.05.05 14:51
Да, ужасно странно...
Кидаю exe на голую машину только с ХРюном и зарегистрированными библиотеками VB/
Пока выкрутился следующим образом:
проверяю в реестре наличие HKEY_CLASSES_ROOT\Excel.Application
Это конечно не панацея, но помогает
Номер ответа: 3
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #3
Добавлено: 17.05.05 14:54
А как у тебя xpApp объявлена?
Номер ответа: 4
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #4
Добавлено: 17.05.05 15:01
Object
Номер ответа: 5
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #5
Добавлено: 17.05.05 15:15
А где именно у тебя расположен вызов "Set xlApp = ..."? в смысле - в каком типе проекта (EXE, DLL, etc)? хотя... вряд ли это влияет.
Номер ответа: 6
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #6
Добавлено: 17.05.05 15:28
Да чего тут говорить, без установленного Excel и речи ни о чём быть не может. Excel.Application - это и есть установленный Excel... Как ни крути, ничего не выйдет
Номер ответа: 7
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #7
Добавлено: 17.05.05 15:33
2Comanche:
exe
2mc-black:
выходит через HKEY_CLASSES_ROOT\Excel.Application
Номер ответа: 8
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #8
Добавлено: 17.05.05 18:11
А нафиг тут вообще позднее связывание?
Номер ответа: 9
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #9
Добавлено: 17.05.05 18:52
Потому что иначе можно будет работать только с той версией офиса, под которую писалась прога.
Номер ответа: 10
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #10
Добавлено: 17.05.05 19:16
2Lister:
а ты уверен, что ошибка возникает именно на строчке с "Set"? ты ж вроде на "лысый" комп EXE-шку кидал, а не Visual Studio ставил; т.е. пошагово не отладишь, надо всякие мессаджбоксы в код втыкать (или ещё что из той же серии). М.б. не слишком часто их навтыкал - и в итоге ошибся с диагнозом?
Номер ответа: 11
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #11
Добавлено: 17.05.05 20:40
2Comanche:
На лысом компе есть и зарег-ны все нужные dll и ocx.
Слушай, я сейчас поэкспериментировал и создал новый проект... Так вот, код
Option Explicit
Dim xlApp As Object
On Error GoTo ErrHandler
Set xlApp = CreateObject("Excel.Application"
Exit Sub
ErrHandler:
MsgBox Err.Description, vbCritical, Err.Number
End Sub
мне нормально дает 429 ошибку, т.е. обработчик в нем работает.
Сейчас буду разбираться...
Номер ответа: 12
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #12
Добавлено: 18.05.05 07:39
Я подключаю к моей программе плагины на CreateObject, а 429 ошибка
выдает сообщение о том, что файл плагина не зареган в системе. Вот:
Case 429
'Если плагин не зарегистрирован - зарегистрируем и перейдем к тому же действию
If cPlug.RegisterLib(Path & "Plugins\" & sPlugin, True) Then Resume
И код регистрации (автор - sne):
Public Function RegisterLib(ByRef sLibName As String, ByVal bRegister As Boolean) As Boolean
Dim hLib As Long, hProc As Long
hLib = LoadLibrary(sLibName)
If hLib = 0& Then
RegisterLib = False
Exit Function
End If
hProc = GetProcAddress(hLib, IIf(bRegister, "llRegisterServer", "llUnregisterServer")
If hProc Then
Call CallVoid(hProc)
Else
RegisterLib = False
Exit Function
End If
Call FreeLibrary(hLib)
RegisterLib = True
End Function
Еще:
438 - процедуры в вызываемом классе нету
449 - пропушен один из главных аргументов, передаваемых в плагин
450 - передаваемое число аргументов не равно принимаемому
Пока все...