OLE Excel манипулирование объектом вызывает ошибку во время выполнения '91' - PullRequest
0 голосов
/ 03 декабря 2008

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

Ошибка времени выполнения '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.

Ответы [ 2 ]

0 голосов
/ 15 июля 2011

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

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

Ссылка: http://backspacetab.com/error-91/

0 голосов
/ 19 декабря 2008

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

В ваших примерах oleXl, oleXlFx и oleExcel - это, вероятно, Nothing. Поэтому, когда вы ссылаетесь на их свойство .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
...