我需要收集所有作者修改或向Word文档添加注释的名称。我做这样的事情:
Public Function collectAuthors() As String
Dim cmt As Word.Comment
Dim r As String: r = vbCr
Dim t As String
Dim i As Long: i = 0
Dim rev As Word.Revision
For Each cmt In ActiveDocument.Comments
t = cmt.Author
If InStr(r, vbCr & t & vbCr) = 0 Then r = r & t & vbCr
Next cmt
For Each rev In ActiveDocument.Revisions
t = rev.Author
If InStr(r, vbCr & t & vbCr) = 0 Then r = r & t & vbCr
Next rev
...
最近t = rev.Author
开始以
Run-time error '-2147467259 (80004005)':
Method 'Author' of object 'Revision' failed
这可能与文档的大小有关。我在Windows 7上使用Word 2016,64位版本。
我还尝试了一个循环,其中集合的成员被明确索引,如
t = ActiveDocument.Revisions(i).Author
并且在几次(可能是10次)迭代后停止。
这个错误的原因是什么,可以通过不同的编码方法消除吗?
或者我应该忘记这一点并从word\document.xml
和word\comments.xml
中提取作者姓名?
感谢。
答案 0 :(得分:1)
最后,我直接从XML中读取作者姓名。有几个障碍并不难:
需要从.docx文件中提取相关的XML。我用了 7-Zip因为它免费且易于自动化,并且在它可以正常工作时使用 将XML写回文档。
生成的文件为UTF-8。 UTF-8不直接受支持 VBA。
需要从XML中提取作者姓名。很简单 足以通过XML进行简单的线性搜索。我做到了 不做任何XML解析或词法分析。
我无法控制输入文档,因此无法将其分解为更易于管理的部分。但是,直接阅读XML会完全避免错误。最后,这比尝试处理RTF要好得多。