- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
红色段落结束标记是插入段落结束标记。(打开“跟踪更改”> 将光标放在第一段末尾 > 按 Enter > 插入新段落内容 > 格式风格不同)
我需要为带有文本“插入”+插入文本的插入添加一个字段。(这个过程中的输出文档经过一些其他过程(不是在 VBA 中),所以为了让其他进程“这是一个插入”,我们正在添加该字段)
Public Sub main()
Dim objRange As Word.Range
Set objRange = Word.ActiveDocument.Range
TrackInsertions objRange
End Sub
Public Sub TrackInsertions(WordRange As Word.Range)
Dim objRevision As Word.Revision
Dim objContentControl As Word.ContentControl
Dim objRange As Word.Range
With WordRange
For Each objRevision In .Revisions
If AllowTrackChangesForInsertion(objRevision) = True Then
On Error Resume Next
With objRevision
Set objRange = .Range
.Range.Font.Underline = wdUnderlineSingle
.Range.Font.ColorIndex = wdRed
Set objField = objRange.Fields.Add(Range:=objRange, Type:=wdFieldComments, Text:="Insertion " + objRange.Text, PreserveFormatting:=False)
.Accept
End With
Err.Clear
End If
Next objRevision
End With
End Sub
Private Function AllowTrackChangesForInsertion(ByRef Revision As Word.Revision) As Boolean
With Revision
Select Case .Type
Case wdRevisionInsert, wdRevisionMovedFrom, wdRevisionMovedTo, wdRevisionParagraphNumber, wdRevisionStyle
AllowTrackChangesForInsertion = IsTextChangeExist(.Range)
Case Else
AllowTrackChangesForInsertion = False
End Select
End With
End Function
Private Function IsTextChangeExist(ByRef Range As Word.Range) As Boolean
'False if the range contain inlineshapes, word fields and tables
Select Case True
Case Range.InlineShapes.Count > 0
IsTextChangeExist = False
Case Range.Fields.Count > 0
IsTextChangeExist = False
Case Range.Tables.Count > 0
IsTextChangeExist = False
Case Else
IsTextChangeExist = True
End Select
End Function
问题是,当进行上述更改时,插入文本的第二段(我不把段落结束标记算作段落)第一段变成了一段。在此代码部分中,实际段落数减少了,最终输出(通过其他应用程序运行后)也包含减少的段落数,这就是问题所在。
当我们通读修订版时,红色段落结束标记 + 第二段作为一个修订版。即使该修订有多个段落,它也作为一个修订。如果我们对插入的段落应用了单独的段落样式,在运行完这段代码后,修订版得到了一种样式,即刻段落的风格。这一切的发生都是因为那个插入的段落结束标记。
我尝试通过单词 paragraphs 移动,因为我想要的是避免更改文档中的段落计数。(尝试从下到上,从上到下)但这并没有解决我的问题。
我也曾尝试将修订分成两个修订,当
If objParagraph.End < objRevision.Range.End Then
.....
End If
但我无法将范围应用于新修订版。
现在,如果我们在内容中识别出段落结束标记,我想将修订拆分成多个部分,并单独应用如果可能的话,给他们一些字段。所以添加字段后段落数和段落样式都不会改变。
或者,有没有办法接受所有标记为插入到 word 文档中的段落结束标记(仅)?
谁能帮我继续编写代码,如果您有其他想法,请告诉我。
提前谢谢你。
最佳答案
在跟踪更改关闭 的情况下,以下代码示例循环Revisions
并检查第一个字符是否为段落标记。如果是……
实例化了两个 Range
对象,一个用于跟踪更改期间插入的段落之前的段落,另一个用于跟踪更改的段落。这是必要的,因为当代码进行更改时,Revision.Range
将变得无效。两个段落的样式都已注明。
然后在第一个段落之后插入一个附加段落,将两个段落都从修订版中删除。将正确的样式应用于第一段和跟踪更改段落,然后删除额外插入的段落。
Option Explicit
Sub RemoveParasFromRevisions()
Dim doc As word.Document
Dim rev As word.Revision, rng As word.Range, rngRev As word.Range
Dim sPara As String, sStyleOrig As String, sStyleRev As String
sPara = vbCr
Set doc = ActiveDocument
doc.TrackRevisions = False
For Each rev In doc.Revisions
'If the start of the Revision is a paragraph mark
If InStr(rev.Range.text, sPara) = 1 Then
'Get ranges for the revision as the original revision
'will no longer be available after the changes made
Set rngRev = rev.Range.Duplicate
Set rng = rngRev.Duplicate
'Get the styles of the first paragraph and last paragraph
sStyleRev = rngRev.Paragraphs.Last.style
sStyleOrig = rng.Paragraphs(1).style
'Make sure the revision range is beyond the previous paragraph
rngRev.Collapse wdCollapseEnd
'Make sure the range for the previous paragraph is outside the revision
rng.Collapse wdCollapseStart
'Insert another paragraph as "buffer"
rng.InsertAfter sPara
'Ensure the first paragraph has its original style
rng.Paragraphs(1).Range.style = sStyleOrig
'And the revision the style applied to the text while track changes was on
rngRev.style = sStyleRev
'Delete the "buffer" paragraph
rng.MoveStart wdCharacter, 1
rng.Characters.Last.Delete
End If
Next
'Test it
' Dim counter As Long
' For Each rev In doc.Revisions
' counter = counter + 1
' Debug.Print rev.Range.text, counter
' Next
' Debug.Print doc.Revisions.Count
End Sub
关于vba - 应用于 Word 修订版的更改使两个段落合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401961/
官方镜像下载实在是慢,于是开通了阿里云开发者帐号, 阿里的文档是错误的, 复制代码 代码如下: sudo sed -i "s|ExecStart=/usr/
我有一个gradle buildscript。在此脚本中,我设置了一些出版物。 在脚本的后面,我有一个任务,该任务从文件读取Buildnumber并增加它。比项目的版本将被更改。 现在我的问题是:可以
下面的代码是我用来添加到数据库中已创建的表的代码。我仍然收到查询错误,错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 'Location, Horse
三角形应该是这样的 1 11 111 1111 11111 111111 行数由用户输入,然后转化为函数注意:没有数组,必须有一个循环(while或for),不能嵌套循环 我得到的最接近的是一个有 2
我的代码 idxcell{:,1} 对于 1:10 迭代给出了以下结果: ans = 9 10 14 15 19 20 24 25
当您这样做时hg log在文件上,仅列出发生更改的修订。我想看看目录中所有文件的最新修订版是什么。 (在文件级别而不是行级别考虑 hg blame。) 我还以为hg log -l 1 *可能有用,但它
我知道,这个话题已经有据可查 here .但我找不到正确的答案。 几年前,我们的老板对一个同事说,他必须把ALL放到SVN里。他做了几次,总而言之,大约是 7.2 演出 .这现在已经完全过时了,必须从
我正在制作一个 twitter 客户端,并且正在评估保护用户登录信息的各种方法。 重要提示:我需要保护用户的数据免受其他应用程序的影响。例如,想象一下如果机器人开始从用户桌面上运行的应用程序中窃取 T
我想知道这些词是否彼此同义? 最佳答案 是的,它们是大多数用途的等效术语。 当您获得“变更集” 5100或“修订” 5100时,您正在讨论的是同一件事。从技术上讲,变更集是其中包含的更改(与大多数源代
我们的项目中有几个远程子存储库,它们的地址最近从 http://host/path 移到了至 http://other_host/path .怎么能回到上个月的修订版,Mercurial 认为可以在
我想 checkout Subversion 中文件夹的特定修订版使用命令行。 我在 TortoiseProc.exe 中没有看到用于指定修订版本号的选项, TortoiseProc.exe /com
如何更改 r0 ,使其看起来像我在创建存储库时添加了 .hgignore 或在当前的 r0 之前插入提交? 我刚刚使用 hgsvn 将一个巨大的 SVN 存储库转换为 Mercurial。花了几个小时
据我所知,CouchDB 修订版不应被视为文档版本控制意义上的修订版。从其他帖子来看,它们似乎被视为临时数据,直到调用粗粒度的紧凑操作为止。 我的问题是,如果我有兴趣使用 CouchDB 来维护文档以
我想从存储库中删除最后一个修订版(或最后 n 个修订版)。 怎么做? 是否可以从 project/db/revs/ 和 project/db/revprops/ 中删除 svn 修订文件? 最佳答案
如何(如果可能的话)在文件中搜索字符串(包括其所有修订版本)? 这样做的原因是我知道某些字符串过去曾在我的文件 foo.bar 中的某个地方,但后来被删除了。该文件有很多修订,因此手动搜索非常耗时。我
我的 PC (Windows Server 2012) 上安装了 TortoiseSVN 1.8.7 + VisualSVN Server 2.7.7。最近我的同事告诉我,当他尝试更新时,在对话框列出
我用一个简单的水平“nowrap”css 编写了一个站点,其中 img 并排 float 。我也隐藏了滚动条。 侧滚可以通过正常的垂直鼠标滚轮滚动来完成(见我的元素网址 因为图像都是 1400x850
我想弄清楚为什么有人删除了 bzr 存储库中的文件。我知道它以前在那里,但现在它不见了。从那时起已经有数百次提交。没有人愿意逐一阅读。我只是想找到文件被删除时的修订号,以找出它被删除的原因。 bzr
我喜欢做的一件常见事情是将我的工作副本恢复到特定的修订版,进行一些测试,然后将其带回我当前的主人的头上。过去我天真地做了一个“git checkout hash”只是为了失去理智。从那以后,我了解到我
我刚刚开始研究 Alembic,来自 Django,我们有 South迁移我们的数据库模式(包括 soon),它使用友好的旧固定宽度数字,如 0037_fix_my_schema.py谈到应用迁移的顺
我是一名优秀的程序员,十分优秀!