- 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/
我写了几个命令来转换数据框,但我想将我写的代码简化为四个部分。第 1,2 和 3 部分用于计算第 1、2 和 3 列(计算每列重复值的次数,并完成 0 和三列最大值之间的缺失数)。第四部分是加入前面的
我试图理解应用于函数的类型参数。 我想在下面的方法中使用通用类型,但为了我的理解使用 String 和 Int。 当我如下定义一个函数时 def myfunc[Int](f:String => I
我有一个像下面这样的 DIV: // link to some js .js 在 div 中呈现最新的文章摘要。然而,它在 Calibri
我在 GridView 中有以下列,一列是日期,另一列是美元金额。我应用了格式并将 HtmlEncode 属性设置为 false,但值仍然未格式化: 这就是这些值在 GridView 中的显示方式
假设我已经定义了这些类型: data Km = Km Float deriving (Show, Eq) data Mile = Mile Float deriving (Show, Eq
我有一个关于 value in context 的小问题。 取 Just 'a',所以在这种情况下 Maybe 类型上下文中的值是 'a' 采用[3],因此在这种情况下,[a] 类型上下文中的值为3
require(quantmod) require(PerformanceAnalytics) getSymbols('INTC') x<- monthlyReturn(INTC) rollapply
我正在使用 VBA 对“已应用字轨更改”文档进行更改。 红色段落结束标记是插入段落结束标记。(打开“跟踪更改”> 将光标放在第一段末尾 > 按 Enter > 插入新段落内容 > 格式风格不同) 我需
考虑以下代码: class A{ my_method(const B& b){ import_something_from_c(this, b.getC()); // does some
我正在为自定义 Material 分配图像。分配的图像看起来有点像素化,类似于此图像 我已经将抗锯齿设置为 4 倍。我该如何解决这个问题? 最佳答案 尝试将 Material 的 mipFilter
我将样式应用于 元素和 元素。是否可以在 上使用样式元素应用于 似乎不遵循 CSS 特异性的通常规则。这是真的吗? 示例:http://jsfiddle.net/59dpy/ 尝试将所有背景色设为红
有没有办法将垂直虚线边框应用于 没有他们(边界)合并?我说的是附图上的东西——有 3 个 这里的元素,每个元素包含 2 的。如果我申请 border-right: 1px dashed black到
当我在 CSS 中对主体应用线性渐变时,如下所示 body { background: linear-gradient(#10416b, black); } 它不会将它应用到整个网页,而是将它应用到页
当我将边框和边框半径应用于 td 时,内半径是一个直 Angular ,根本不是圆的。 最佳答案 问题很可能是背景不透明的子元素会剪掉边框的内半径。 要解决此问题,您可以在 td 上应用 overfl
基本上,我有一个小的 SVG,它使用一个组来定义一个可重用的符号。该组包括我想在 CSS 中设置动画的路径。我面临的问题是只有“原始”元素应用了 CSS,“使用过”的元素没有。 .player_arr
宽度属性在这里不起作用: td { height: 50px; width: 25px; border: 1px
我想要一个函数(例如)在两种情况下输出 Map 的所有值: Map map1 = new HashMap(); Map map2 = new HashMap(); output(map1, "1234
我被要求将我们应用中的警报对话框的外观与应用主题使用的外观相匹配。 我设法将样式应用于应用程序中的所有警报对话框,并将其用作应用程序主题的一部分,但有些情况下样式应用不正确。 例如,当警报对话框包含“
我有一个 CGPath(由 UIBezierPath 创建),我想通过应用 CGAffineTransformScale 将其缩放到我想要的任何大小。 这会影响我的绘图质量(在转换为图像时)吗?如果不
您好,我已经在 vector 上使用了一些 STL 算法,例如 find_if、count_if、sort、push_back 等。现在我想为所有容器对象( vector 、列表、映射、集合)制作一个
我是一名优秀的程序员,十分优秀!