【发布时间】: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.Document和Project-Applciation是什么。等等……