0

我正在维护一个用 Visual Basic 6.0 编写的应用程序,它利用Excel.Sheet.8类对象的几个 OLE 控件。一些用户在尝试操作 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 进程的实例正在运行时,它似乎会遇到。

4

2 回答 2

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
于 2008-12-19T20:18:58.427 回答
0

Microsoft 建议我们可以通过创建新的注册表项来修复错误 91 。要创建新密钥,请按照以下步骤操作。

  • 单击 Windows 开始菜单
  • Regedit在搜索框中输入
  • 按回车
  • 在注册表中找到以下条目。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server
  • 现在选择事务服务器并右键单击它
  • 选择新建,然后选择密钥
  • 将密钥命名为Debug
  • 右键单击调试键并选择新建
  • 现在选择密钥并将密钥命名为RunWithoutContext

参考:http ://backspacetab.com/error-91/

于 2011-07-15T11:32:14.177 回答