我使用VBA调用word,编辑文档,但是当推出word的时候总是提示“所作修改会影响共用模板normal.dot”对话框,设置app.normaltemplate.saved=true 也不行,怎么回事?还有其他几个问题,请看代码如下:
-------------------------
加载
Private Sub Form_Load()
    Dim MyMenu As Long    
    Set tWord = New Word.Application   '下边有说明
    Set wdApp = New Word.Application   '下边有说明
    Call DefineWord                    '自定义word菜单界面
    wdApp.Visible = True
    If FilePath <> "" Then             'FilePath为要打开的文件路径
        Dim FileName As String
        FileName = Mid(FilePath, InStrRev(FilePath, "\") + 1)
        Set oDoc = wdApp.Documents.Open(FilePath)
        docUserControl = oDoc.UserControl
        h = FindWindow("OpusApp", Replace(FileName, ".doc", "") & " - Microsoft Word")
        If h = 0 Then
            h = FindWindow("OpusApp", FileName & " - Microsoft Word")
        End If
        SetWindowText h, "表格编辑-YTPM"                        '设置标题栏
        wdApp.WindowState = wdWindowStateMaximize
    End If
    wdApp.Options.SaveInterval = 0
End Sub
-----------------------------
结束的时候Private Sub ExitEdit()
    On Error Resume Next
    If  wdApp.Documents.Count <> 0 Then    '这里的文档数总是1,因为只允许用户打开一个文档
        wdApp.NormalTemplate.Saved = True
        oDoc.Close
    End If
    wdApp.Caption = ""
    Call ResetWord                          '恢复被自定义过的wrod
    tWord.Quit
    Set tWord = Nothing
    
    wdApp.Quit
    Set wdApp = Nothing    Kill myproject.DocEditing               '删除临时文档
    myproject.BdEditing = ""
    myproject.EditingFileRecNum = 0
    myproject.DocEditing = ""
    Set FrmEdit = Nothing
End Sub有三个问题第一个问题50分,第二个问题100分,第三个问题100分。真心征解,给分相酬。1. 在以上程序中刚开始之所以设置了两个word.appplication 因为我发现如果在vba程序打开word后,如果再从桌面运行word,两者会有关联,关闭其中一个,另外一个就关闭了,不知道怎么回事,而且vba中自定义了菜单,这种自定义会影响正常的word运行,设置两个word.application就没有这个问题了,我也不知道怎么回事,知道的高手能否告知?2. 另外,退出的时候有时候出现“normal.dot”的提示,有时候不出现,而有的机器上运行又总是出现(XP系统),真的晕了,不知道到底是什么原因。请知道的兄弟帮忙,100分不够再给100,只要解决问题多给分。3. 如上在加载的时候设置所调用的word的标题栏为自定义字符,但是当最小化的时候word标题栏就恢复了,最小化状态也无法设置,为什么,怎么避免最小化的时候标题栏恢复?

解决方案 »

  1.   

    1、没见过;
    2、因为是随机的问题,估计和OFFICE的安装有关系。建议:完全卸载OFFICE,重装后再试。
    3、没试过。
      

  2.   

    问题1:用new来做的,应该不会有问题吧?
    问题2:在document_close事件里加入代码
    document.templates("normal.dot").save
    或者
    document.normaltemplate.save
      

  3.   

    1. 参见http://support.microsoft.com/?id=188546中Workaround部分的解决办法2. 可能出现这个现象的情况很多。
       a) 把wdApp.Options.SaveNormalPrompt设为False试试。
       b) 另外如果系统安装了Remove Hidden Data Add-in 1.0版本的话(Word的文件菜单下会有删除隐藏数据一项),这是一个已知bug,请到http://www.microsoft.com/downloads/details.aspx?FamilyID=144e54ed-d43e-42ca-bc7b-5446d34e5360&displaylang=en下载安装1.1版本。
       c) 在退出时指定不保存修改。wdApp.Quit wdDontSaveChanges
       d) 如果你的程序运行过程中添加了工具栏或做了其他自定义的话,把wdApp.CustomizationContext设为wdApp.ActiveDocument。或者在添加工具栏时一律指定temporary参数。3. 如果最小化会触发wdApp的WindowActive, WindowDeActive, WindowSize中之一事件的话,你可以捕捉该事件然后在里面SetWindowText。这个要试了才知道。另外一个办法是subClass Word,这个比较危险,容易导致Word Crash。还有一个笨办法是用一个Timer来检查wdApp的窗口是否最小化,如是则SetWindowText。其实如果你不介意标题栏中出现Microsoft Word的话,可以直接
    oDoc.ActiveWindow.Caption = "表格编辑-YTPM"
    这样就不用FindWindow,SetWindowText了。
      

  4.   

    感谢 techgopher(米粒之珠也放光华) ,让我又懂了不少
    大家继续
      

  5.   

    1、
    2、dim withevents wdApp as Word.Application   
      在documentbeforeclose里,wdapp.NormalTemplate.Saved = True
    3、在wdApp相应事件里设置,是在不行就把wdapp子类化
      

  6.   

    我不知道你的模板问题解决没有,我也碰到了,并且很急。
        我做的是一个Addin,用VB6+wordxp,发现若不存盘,在关闭Word时,会报一系列模板保存问题,首先,该模板被另一应用程序或用户使用,其次,为影响共享模板,是否保存修改,有时还会问:Normal.dot在正由另一会话编辑...是否仍用原名保存文档?
        我发现是在系统提示:是否保存都XX文档的修改?选择否才发生的。时机在document_close事件以后,并且在word_quit事件里已经报出相关模板信息了。
        我尝试用wdApp.Options.SaveNormalPrompt和app.normaltemplate.saved=true 都不行。若打开word文档时open后再关联其他模板,发现也报是否保存其他模板的提示。我对WORD进行了工具栏按钮的改造,文档变量的传递,但退出时全部在documentbeforeclose中删除并恢复了,觉得没有改变模板,可为什么老提示呢?您解决了吗?望不吝赐教。
      

  7.   

    Set oDoc = wdApp.Documents.Open(FilePath)中,filepath是一个模板文件(.dot的)还是一个普通文件(.doc的)?
      

  8.   

    'Debug.Print Word.Application.Caption
        Word.Application.Caption = "Microsoft Word"
        'Debug.Print Word.Application.Documents(1).ActiveWindow.Caption
        Word.Application.Documents(1).ActiveWindow.Caption = "11111"只两句就可以直接修改标题栏了。
      

  9.   

    要禁止 Word 的提示 可以使用ThisDocument.Application.DisplayAlerts=wdAlertsNone 恢复提示ThisDocument.Application.DisplayAlerts=wdAlertsAll 
      

  10.   

    我想是不是:你的程序修改了word的环境设置,推出前应该改回阿。你的那条语句(app.normaltemplate.saved=true )只是保存当前的文档,不出现是否保存修改的提示框,不只我说清楚没有啊
      

  11.   

    Private Sub ExitEdit()
        ...
        If  wdApp.Documents.Count <> 0 Then    '这里的文档数总是1,因为只允许用户打开一个文档
            ThisDocument.Application.DisplayAlerts=wdAlertsNone 
              oDoc.Close
            ThisDocument.Application.DisplayAlerts=wdAlertsAll 
        End If
        ...
    End Sub