我有一个 excel 项目,它检查 word 文档是否有更改的修改日期,如果更改,它会打开该文档并将文本从 word 表单字段导入到 excel 中。
excel中打开并导入word文档的例程如下:
Sub CopyFromWord(pFile as String,aFile as string)
Dim wdApp As Object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set wdApp = CreateObject("Word.Application")
Else 'word is already running
End If
On Error Goto 0
Set wdDoc = wdApp.Documents.Open(Filename:="" & pFile & "", ReadOnly:=True)
wdApp.Visible = False
For Each c In wdDoc.bookmarks
'removed code that copies values from word doc fields to excel sheet
Next c
wdApp.Activedocument.Close SaveChanges:=False
End Sub
Word 文档最初都是同一个文件的副本。该文件有几千个副本,但每个副本都位于自己的文件夹中,并具有唯一的名称。
用户找到他们需要的文件夹并在其中打开 word 文档。它打开一个用户表单,然后使用用户表单的输入填充文档中的表单域。然后命令按钮保存并退出表单。
因为欢迎消息/用户表单会在文档打开时自动加载,所以我将以下代码添加到文档的打开事件中:
Sub Document_Open()
If ThisDocument.ReadOnly = True then Exit Sub
msgbox "Welcome " & Environ$("Username") & ". Click OK to begin."
Userform1.show
End sub
这确保了当 excel 项目循环遍历所有文件时,如果它发现一个文件已更改,它需要打开文件(只读),以便它可以导入数据而不会被用户表单/欢迎消息中断,关闭它并携带在搜索循环所有文件检查更改的修改日期。
它应该持续运行,但是,大约 20% 的时间,一个文档将仅通过 excel 代码打开,但会显示 word 文档中的欢迎消息框,表明 thisdocument.readonly 错误地返回了 false。如果我在这种情况下调试 word 文档,然后执行
? thisdocument.readonly
我得到一个“错误”的结果。但是,即使是 word 文档的标题栏也以“(只读)”结尾,所以它显然已经以只读方式打开,因此 readonly 应该返回 True。
它不是特定于任何文档,如果我尝试重复打开它们,它似乎在下一轮工作(因为它正确注册了一个只读并在消息框代码之前退出子)。我找不到任何类型的图案,也无法在网上找到任何信息,我已经搜索了好几个星期了!