2008-12-03 3 views
0

Я поддерживаю приложение, написанное на Visual Basic 6.0, и использует несколько элементов управления OLE с объектами класса Excel.Sheet.8. Некоторые пользователи получают следующую ошибку, когда они достигают точки в коде, которая пытается манипулировать объектами excel.Обработка объектов OLE Excel вызывает ошибку времени выполнения '91'

Ошибка выполнения «91»: переменная объекта или переменная блока не установлен

Ниже приведены примеры кода, которые вызывают эту ошибку. Я считаю, что проблема происходит на:

Set oExcel = oleXl.object 

Вот точки в коде, где это происходит:

Private Sub Form_Load() 
    Dim i As Integer 
    Dim j As Integer 
    Dim sTempStringA As String 
    Dim sTempStringB As String 

    'Set up excel sheet 
    centerform Me 

    Set oOutGrid = oleXlOutput.object 
... 


Private Sub Form_Load() 

centerform Me 
Set oOtherFx = oleXlFx.object 
... 

Private Sub Form_Load() 
Dim iRet As Integer 
Dim i As Integer 

On Error GoTo Err_Handler 

centerform Me 

Call InitArray 

Me.Caption = "TJUJ | Version " & version & " | Enter Custom Fx" 
Set oBook = oleExcel.object 
... 

Есть ли конкретная ситуация или среда, в которой эта ошибка будет генерироваться из этой линии кода ИЛИ способ, которым я могу обеспечить, чтобы объект всегда был доступен в этой точке кода?

Ошибка возникает только иногда, и я не могу воспроизвести ее на моей машине для разработчиков вообще. У меня также нет доступа к машинам, на которых это происходит, но похоже, что они встречаются, когда есть экземпляр процесса EXCEL.EXE.

+0

как вы создаете объекты Excel OLE? – Ant 2008-12-12 11:54:03

ответ

0

Когда вы получаете ошибку времени выполнения 91, вы можете поспорить, что в заявлении есть неинициализированный объект. Другими словами, вы пытаетесь использовать свойства или методы переменной/объекта со значением Nothing.

В ваших примерах oleXl, oleXlFx и oleExcel, вероятно, ничего. Поэтому, когда вы ссылаетесь на их свойство .object, вы запускаете RTE.

Где-то в вашем коде эти переменные должны быть инициализированы чем-то. Ищите заявления, подобные Set oleXl = CreateObject("Excel.Application") или Set oleXl = New Excel.Application

Одно предложение; когда вы найдете инструкции, которые фактически инициализируют эти OLE-объекты, проверьте, как кодируется обработка ошибок. Если вы видите что-то вроде этого:

On Error Resume Next 
Set oleXl = CreateObject(... 

добавить тест, чтобы убедиться, что объект был экземпляр

On Error Resume Next 
Set oleXl = CreateObject(... 
If oleXl Is Nothing Then 
    MsgBox "Hey, my object is Nothing!" 
End If 
0

Microsoft предполагает, что мы можем исправить ошибку путем создания нового раздела реестра. Чтобы создать новый ключ, выполните следующие действия.

  • Нажмите на меню Пуск Windows
  • Тип Regedit в поле поиска
  • Нажмите Enter
  • Найдите следующую запись в реестре.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server
  • Теперь выберите сервер транзакций и щелкните правой кнопкой мыши на нем
  • Выберите Создать, а затем выберите Key
  • Name ключ в Debug
  • правой кнопкой мыши по кнопке Debug и выберите New
  • Теперь выберите ключ и имя ключа как RunWithoutContext

Ref: http://backspacetab.com/error-91/

Смежные вопросы