我正在尝试根据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更改修订作者的直接方法。您可能可以事先更改作者,或者可以使用以下方式之一:
word\document.xml
(或修订版本所在的文档的任何部分,例如页眉,页脚,脚注,尾注,...),右键单击并选择Edit以下方法使用Word比较将所有修订的作者设置为特定作者(但是,请注意,此方法生成的全新修订可能(与您的原始修订略有不同):]
保存原始文档的副本,将其命名为V1,并拒绝其中的所有更改。
保存原始文档的另一个副本,将其命名为V2,并接受其中的所有更改。
在Word中打开V1>复查选项卡>比较>比较。
在“比较文档”对话框中,导航并选择原始文档V1,然后选择V2作为修订文档;在“标签更改为”之后键入所需的作者姓名;在“显示更改”之后,选择“新文档”,然后单击“确定”。
注意:这是一个非常老的问题,但这似乎是通过谷歌搜索得出的,并且没有人在这里或其他任何地方提供解决方案,所以我要添加我的。
我是一名几乎完全不熟悉编码的新手,但是研究非常快速/直观,作为我的第一个项目,我一直在解决这个问题。
我认为我有一个解决方案,该解决方案从概念上讲是与特定作者一起进行所有修订,将其存储在集合中,在选择的正文中拒绝它们,更改用户名,然后将更改重新实现为对文档的新修订。 (因此与新作者创建新修订)。这是我的代码,很遗憾,由于我的工作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
Edit Open XML]]过程可以在VBA中可靠地自动化。与仅更改使用Word对象模型进行修订的作者的姓名相比,这是[[大量工作,这自然是行不通的。最后,一旦您可以使用它,您肯定会达到编码器的状态。
UTF-8
display
Kill
功能)。请确保在开发过程中备份您的.dotx文件,因为您将最有把握地创建Word无法读取并声称已“损坏”的文件。话虽这么说,但是一旦我开始工作,我就再也无法处理.dotx,以至于Word无法读取它。
most