Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim sureq As Integer
    sureq = MsgBox("真的要退出?", vbYesNo + 32, "请确认...")
    If sureq = 6 Then
        Cancel = 0
'''
end
'''
    Else
        Cancel = -1
    End If
End Sub

解决方案 »

  1.   

    其实问题在你用了
    cancel=0
      

  2.   

    帮你简化一下Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        if MsgBox("真的要退出?", vbYesNo + 32, "请确认...")=vbNo then cancel=1
    End Sub
      

  3.   

    '===============================    
      goto  exit sub
      

  4.   

    对了,fuxc你好。你的简化的代码执行后,在选择了”VBYES“后程序没有完全退出。和我一开始问的情况一样。
      

  5.   

    改改:帮你简化一下Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        if MsgBox("真的要退出?", vbYesNo + 32, "请确认...")=VbYes then End 'cancel=1
    End Sub 
      

  6.   

    导致程序没有完全退出的,肯定不是QueryUnload中的代码,
    end虽然可以强行退出程序,可是还是必须找到根本原因来解决,
    有可能你的其他窗体还驻留在内存,有一个初学者常犯的错误是导致这种情况的最常见原因:
    假如是按command1退出,一般我们这样写:private sub command1_click()
        unload me
    end sub但是,假如unload me后面还有代码会怎样呢?你可以试一下private sub command1_click()
        unload me
        msgbox "test"
    end sub你会发现unload me以后代码还在继续往下执行,直到进程结束(end sub)再看下面的代码:
    private sub command1_click()
        unload me
        command1.visible = true
    end sub你把它放在一个新的工程里试一下,可以发现点了按钮后,窗体并未退出内存,虽然不可见,这是什么原因呢?
    原来,执行unload me时,确实退出了窗体,但接下来的语句又调用了窗体上的控件,引起窗体重新加载.有时候我们编写的程序,有时退出非常的慢,莫名其妙地退不干净,或者退出后还占用一些资源,甚至还会有一些莫名其妙的错误,其实很多都是这些简单的错误,不经意的造成的.所以,正确的方法:
        unload me
        exit sub我们平时编程的时候要养成这样的习惯,随时在unload me后面加exit sub当我们的程序莫名其妙地退不出时,简单的加一个end并不是好的习惯,
    你可以这样调试:
    暂停程序执行,在立即窗口输入
    ?forms(0).name
    就能看到哪个form还在内存里,然后就检查一下这个form的代码,看看是否有问题