方法'作者'对象'修订版'失败

时间:2018-01-30 08:07:31

标签: ms-word word-vba

我需要收集所有作者修改或向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.xmlword\comments.xml中提取作者姓名?

感谢。

1 个答案:

答案 0 :(得分:1)

最后,我直接从XML中读取作者姓名。有几个障碍并不难:

  • 需要从.docx文件中提取相关的XML。我用了 7-Zip因为它免费且易于自动化,并且在它可以正常工作时使用 将XML写回文档。

  • 生成的文件为UTF-8。 UTF-8不直接受支持 VBA。

  • 需要从XML中提取作者姓名。很简单 足以通过XML进行简单的线性搜索。我做到了 不做任何XML解析或词法分析。

我无法控制输入文档,因此无法将其分解为更易于管理的部分。但是,直接阅读XML会完全避免错误。最后,这比尝试处理RTF要好得多。