Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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. У меня Эксель установлен, поэтому я могу лишь попытаться эмулировать ту же ошибку:
Private Sub Form_Load()
    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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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

Private Sub Form_Load()
  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, ";DllRegisterServer", ";DllUnregisterServer";))
    If hProc Then
        Call CallVoid(hProc)
    Else
        RegisterLib = False
        Exit Function
    End If
    Call FreeLibrary(hLib)
    RegisterLib = True
End Function


Еще:
438 - процедуры в вызываемом классе нету
449 - пропушен один из главных аргументов, передаваемых в плагин
450 - передаваемое число аргументов не равно принимаемому

Пока все... ;)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам