用VB生成的可执行文件,退出时提示:
运行时错误‘91’,未设置对象变量或with block变量。代码如下:
Private Sub MnuExit_Click()
If InputBox("请输入退出口令") = "exit" Then
On Error GoTo ShowOPCRemoveItemError
Set mOpcItms = Nothing
GoTo SkipOPCRemoveItemError
ShowOPCRemoveItemError:
MsgBox "删除Items错误", "提示"
SkipOPCRemoveItemError:On Error GoTo ShowOPCGroupRemoveError
mOpcGrps.RemoveAll
Set mOpcGrp = Nothing
Set mOpcGrps = Nothing
GoTo SkipRemoveGroupError
ShowOPCGroupRemoveError:
MsgBox "删除组和组集合错误", "提示"
SkipRemoveGroupError:
    
On Error GoTo ShowOPCDisconnectError
mOpcSvr.Disconnect
Set mOpcSvr = Nothing
GoTo SkipDisconnectError
ShowOPCDisconnectError:
MsgBox "断开OPC服务器时出错", "提示"
SkipDisconnectError:
     MsgBox "通讯链接已经断开,点击按钮退出", , "提示"
     StatusUpdate "关闭监控程序………"
     Unload Me
    End
Else
    MsgBox "请输入正确的退出口令", , "提示"
    StatusUpdate "退出口令错误………"
End If
End Sub
静待高手指点 谢谢

解决方案 »

  1.   

    这些生命全部定义在模块中为public类型,如下:
    Option Explicit
    '>>>>>>> OPC服务器声明 <<<<<<
    Public mOpcSvr As OPCServer     '定义OPC服务器
    Public mOpcGrps As OPCGroups    '定义组集合
    Public mOpcGrp As OPCGroup      '定义组
    Public mOpcItms As OPCItems     '定义项目集合
    Public lItemSvrHdls() As Long
    '>>>>>>> 变量声明 <<<<<<
    Public lNumItem As Long
    Public lCltHdls(1 To 80) As Long
    Public pErrors() As Long
    Public szItemIDs(1 To 80) As String
    Public accPath(1 To 80) As String
    Public reqDataType(1 To 80) As Integer
    Public timer(1 To 4) As Integer
    Public plcVal() As Variant
    Public plcVal1(1 To 80) As Variant
    Public times As Integer
    Public update1(0 To 17) As Boolean
    Public update2(0 To 2) As Boolean
      

  2.   

    在模块的开头加上:option explicit 全编译运行,看看报错否
      

  3.   

    模块和窗体的代码最开始都加了Option Explicit,全编译运行无错误提示,运行正常,
      

  4.   

    MsgBox "删除组和组集合错误", "提示"
    语法怎么看怎么别扭
      

  5.   

    感谢大家的支持,问题已经解决,
    原来是我程序中Timer1(interval=500)下还有一个OPC的同步读,
    mOpcGrp.SyncRead OPCCache, 80, lItemSvrHdls, plcVal, pErrors.
    所以在Private Sub MnuExit_Click()中加入一句frmLoad.Timer1.Enabled = False
    问题就解决了!
    再一次谢谢大家