在Word中跟踪更改时更改作者姓名

问题描述 投票:0回答:6

我正在尝试根据MS Word中所选内容的跟踪更改来更改作者姓名。

这里是我到目前为止的代码:

Sub ChangeTracksBySingleAuthor()

    Dim J As Integer
    Dim sAuthorname As String
    Dim sOrigAuthorname As String

    If Selection.Range.Revisions.Count = 0 Then
        MsgBox "No changes in your selection!", vbCritical + vbOKOnly, "Cannot perform action"
        Exit Sub
    End If

    sOrigAuthorname = InputBox("Author name to change", "Changes Author Name")        
    If sOrigAuthorname = "" Then End

    sAuthorname = InputBox("New author name", "Changes Author Name")        
    If sAuthorname = "" Then End

    With ActiveDocument
        For J = 1 To .Revisions.Count
            If .Revisions(J).Author = sOrigAuthorname Then                
                .Revisions(J).Author = sAuthorname
            End If
        Next J
    End With

End Sub
vba ms-word word-vba
6个回答
2
投票

之后没有使用VBA更改修订作者的直接方法。您可能可以事先更改作者,或者可以使用以下方式之一:

编辑打开的XML

  1. 将文档另存为.docx文件。
  2. 然后使用7-zip之类的zip工具打开文件。
  3. 导航至word\document.xml(或修订版本所在的文档的任何部分,例如页眉,页脚,脚注,尾注,...),右键单击并选择Edit
  4. 搜索并替换作者姓名并将更改的文件保存到zip包中

使用单词比较

以下方法使用Word比较将所有修订的作者设置为特定作者(但是,请注意,此方法生成的全新修订可能(与您的原始修订略有不同):]

  1. 保存原始文档的副本,将其命名为V1,并拒绝其中的所有更改。

  2. 保存原始文档的另一个副本,将其命名为V2,并接受其中的所有更改。

  3. 在Word中打开V1>复查选项卡>比较>比较。

  4. 在“比较文档”对话框中,导航并选择原始文档V1,然后选择V2作为修订文档;在“标签更改为”之后键入所需的作者姓名;在“显示更改”之后,选择“新文档”,然后单击“确定”。


2
投票

注意:这是一个非常老的问题,但这似乎是通过谷歌搜索得出的,并且没有人在这里或其他任何地方提供解决方案,所以我要添加我的。

我是一名几乎完全不熟悉编码的新手,但是研究非常快速/直观,作为我的第一个项目,我一直在解决这个问题。

我认为我有一个解决方案,该解决方案从概念上讲是与特定作者一起进行所有修订,将其存储在集合中,在选择的正文中拒绝它们,更改用户名,然后将更改重新实现为对文档的新修订。 (因此与新作者创建新修订)。这是我的代码,很遗憾,由于我的工作PC已将作者锁定为安全策略,因此我无法对其进行测试。如果您看到此消息,它会起作用,请告诉我。

Sub ChangeRevisionAuthor()

Dim sCurrentAuthor As String
Dim sOldAuthor As String
Dim sNewAuthor As String
Dim sRevision As String

Dim TCStatus As Boolean

Dim myRange As Range
Dim revRange As Range

Dim myRev As Revision

Dim cIns As New Collection
Dim cDel As New Collection

If Selection.Range.Revisions.Count = 0 Then
    MsgBox "No track-changes in your selection!", _
      vbCritical + vbOKOnly, "Cannot perform action"
    Exit Sub
End If

sOldAuthor = InputBox("Old author name?", _
  "Comments Old Author Name")
If sOldAuthor = "" Then End

sNewAuthor = InputBox("New author name?", _
  "Comments New Author Name")
If sNewAuthor = "" Then End


BCStatus = ActiveDocument.TrackRevisions
sCurrentAuthor = Application.UserName

ActiveDocument.TrackRevisions = True

Set myRange = Selection.Range


For Each myRev In myRange.Revisions

    If myRev.Author = sOldAuthor Then
        If myRev.Type = wdRevisionInsert Then
        cIns.Add myRev
        End If
        If myRev.Type = wdRevisionDelete Then
        cDel.Add myRev
        End If
    End If

Next

Application.UserName = sNewAuthor

For Each myRev In cIns
    Set revRange = myRev.Range
    myText = revRange.Text
    myRev.Reject
    revRange.InsertAfter myText
Next

For Each myRev In cDel
    Set revRange = myRev.Range
    myRev.Reject
    revRange.Delete
Next

Application.UserName = sCurrentAuthor
ActiveDocument.TrackRevisions = BCStatus

End Sub

0
投票
@DirkVollmar的帖子中描述的

Edit Open XML]]过程可以在VBA中可靠地自动化。与仅更改使用Word对象模型进行修订的作者的姓名相比,这是[[大量工作,这自然是行不通的。最后,一旦您可以使用它,您肯定会达到编码器的状态。

  • 如@DirkVollmar所建议,7-Zip是我首选与VBA一起使用的压缩工具。它是免费的,易于自动化,不需要重命名.dotx文件,您可以有选择地提取各种XML文件而无需解压缩整个内容。有关自动执行7-Zip的更多信息,请参见https://www.rondebruin.nl/win/s7/win004.htm。确保将文件解压缩到标准Microsoft位置。

  • XML文件在

    UTF-8

  • 中。 VBA不直接支持UTF-8,但是当使用ADO读取时,它可以正常工作。一旦您具有重音符号,西里尔字母名称或汉字作为作者,这将变得很清楚。有关读取UTF-8字符串的更多信息,请参见https://www.mrexcel.com/forum/excel-questions/863606-import-text-file-utf-8-a.html
  • 一旦读入,就可以使用库存的VBA字符串函数(如InStr(),Replace(),Mid()等)来操纵XML字符串。请注意,VBA IDE不支持扩展字符串的

    display

  • ,但这并不意味着它们不存在。只是不要期望在即时窗口中看到汉字。
  • 在XML字符串中,查找author =并在之后立即替换带引号的字符串,例如author =“ Autor”变为author =“ Fritz”。
  • 最后,也使用ADO将文件写回到临时目录,然后使用7-Zip自动化将它们放回到原始.dotx文件中。一旦在.dotx文件中替换了临时文件,请确保将其删除(Kill功能)。
  • 请确保在开发过程中备份您的.dotx文件,因为您将最有把握地创建Word无法读取并声称已“损坏”的文件。话虽这么说,但是一旦我开始工作,我就再也无法处理.dotx,以至于Word无法读取它。


    0
    投票
    这里是一个宏,用于在Word文档(docx,docm,dotx或dotm)中跟踪的更改和注释中更改作者姓名。该宏适用于

    most


    0
    投票
    找到替换审阅者最初的唯一宏!!

    0
    投票
    最简单的方法
    © www.soinside.com 2019 - 2024. All rights reserved.