我想,这可能和 Word 有关。要知道,Word 忽然 Calc 不同,它不是一个一般的EXE文件,它的实质是一个 ActiveEXE 。

解决方案 »

  1.   

    我试了一下你的代码,的确有你说的问题。
    可是你为什么不用对象来控制WORD呢?应该比API好用得多。Dim WithEvents mWord As Word.ApplicationPrivate Sub Command1_Click()
        Set mWord = CreateObject("Word.Application")
        mWord.Visible = True
    End SubPrivate Sub mWord_Quit()
        MsgBox "OK!"
    End Sub多谢你对我的帖子的关注。你的MSN是多少?
    我也申请MSN去。多交流了。
      

  2.   

    就算这种做法不行也罢了,我也有另外一种想法:调用Word的进程在打开Word后退到后台运行,在后台运行时利用Hooks监视Word的消息,当Word关闭时再执行后续操作。
    我对windows编程不是很懂,只是这几天狂啃书本才对这东东有点了解,不知道哪位同志有关于这方面的VB例子? 
    请与我联系: [email protected]
      

  3.   

    to guaguagua(呱呱):
    用OLE的方法我也试过,可以效果不是很好。我用的是Office XP,用OLE Automation打开Word会产生一些莫名的问题,word会提示刚才打开的文件产生严重错误。打开Word其实不是问题,用shell也可以打开,关键是Word关闭后我想由程序自动执行一个文件上传操作。
      

  4.   

    TO:esky2000(流水) 下面代码可以实现你的要求(在win2k下调试通过)
    Option Explicit
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
    Private Const PROCESS_QUERY_INFORMATION = (&H400)
    Private Const STATUS_PENDING = (&H103)
    Private Const STILL_ACTIVE = STATUS_PENDINGPrivate Sub Command1_Click()
    Dim pad&, code&, hProcess&
    pad = Shell("d:\microsoft office\office\winword.exe", vbNormalFocus)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, pad)
    Do
        GetExitCodeProcess hProcess, code
        DoEvents
    Loop While code = STILL_ACTIVE
    MsgBox "OK!"
    End Sub
      

  5.   

    问题解决了,DeityFox和我的上面列出的方法都没有问题,导致错误的原因是我在CreateProcess之前曾经实例化过一个word.application对象,所以返回的句柄为空,WaitForSingleObject出错。谢谢各位。另请关注http://www.csdn.net/expert/topic/418/418865.shtm