【问题标题】:Word DocumentBeforeClose event not working sometimesWord DocumentBeforeClose 事件有时不起作用
【发布时间】:2018-10-24 12:03:33
【问题描述】:

我正在维护一个 Word 相关的 vb6 项目。当我们从我们的服务器下载一个word文档并对其进行更改时。然后单击关闭。

然后 objWord_DocumentBeforeClose 事件将发生。 如果下载的文件还没有上传回服务器,则提示是/否消息框Do you want to check-in the document?

如果在签入过程完成之前单击“是”并再次单击ctrl+w,文档将在未到达mobjWord_DocumentBeforeClose事件的情况下关闭。

我在 DocumentBeforeClose 事件中添加了一些代码,以防止在签入过程使用文档变量运行时关闭文档。

谁能解释一下为什么mobjWord_DocumentBeforeClose 在第二次关闭时没有到达?

下面是我的代码。

Private Sub mobjWord_DocumentBeforeClose(ByVal Doc As Document, Cancel As Boolean)

Dim objDoc As Project.Document
Dim objApp As Project.Application
Dim strProcess As String

Set objApp = New Project.Application
If objApp.Settings.RespondToWordEvents Then
    Set objDoc = objApp.GetDocument(Doc)
    'Check the document variable to seen if any process is running with the document
   If objDoc.IsBusy = False Then
        if objDoc.NotCheckedIn
             If objDoc.DownloadProperties.WasCheckedOut Then
                Select Case MsgBox("Do you want to check-in the document?", vbYesNoCancel + vbQuestion)
                    Case vbYes
                        If objApp.CheckInDocument(WordDocument:=Doc) Is Nothing Then
                            Cancel = True
                        End If
                        fDisebleCheckIn = True
                    Case vbNo
                        fDisebleCheckIn = True
                    Case vbCancel
                        Cancel = True
                End Select
            End If
        Else
            //some code
        End If
    Else
        Cancel = True
        strProcess = ProcessInProgress(objDoc, objApp)
        MsgBox objApp.GetUIString("Unable to close the document " + strProcess + "process is running"), vbOKOnly + vbInformation
    End If
End If

ErrorHandler:
    objApp.Quit
    Set objDoc = Nothing
    Set objApp = Nothing

End Sub

【问题讨论】:

  • 您的附加代码是否在 VB6 中?还是文档 VBA?
  • @Nathan_Sav,我的项目包括一个 vb6 代码(ActiveX dll)和一个 .dotm 文件(我们的功能区栏)。
  • 我不知道这段代码是如何设置的,所以代码是在与mobjWord对象相关的VB6项目中,也是在VB6中创建的?我认为你需要创建一个基于word.application 的自动化事件类
  • 您需要提供minimal reproducible example 表示可以运行的代码,让我们重现您正在做的事情。我们甚至无法判断您向我们展示的代码是在 VB6 项目中还是在 VBA 项目中!另外,Project 是什么对象?我们不知道Project.DocumentProject-Applciation 是什么。等等……

标签: vba ms-word vb6


【解决方案1】:

我不确定我是否完全理解你,但是在 VBA 中,所以你可以适应你的 VB6,我会在一个普通的模块中拥有以下内容

Public wdCustomWordApplication As clsCustomWordApplication

Sub Setup()

Dim w As Word.Application

Set w = New Word.Application
w.Visible = True

Set wdCustomWordApplication = New clsCustomWordApplication
wdCustomWordApplication.InitialiseCustomWordApplication w

End Sub

然后是一个名为 clsCustomWordApplication 的类模块,像这样

Private WithEvents wdWordApplication As Word.Application

Public Sub InitialiseCustomWordApplication(objWord As Word.Application)
    Set wdWordApplication = objWord
End Sub

Private Sub wdWordApplication_DocumentBeforeClose( _
    ByVal Doc As Word.Document, Cancel As Boolean)
    MsgBox "Some question"
End Sub

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多