VBA Word-在包含修订标记的文本中获取范围对象的属性

VBA Word-在包含修订标记的文本中获取范围对象的属性,vba,ms-word,Vba,Ms Word,正文 包含一个隐藏文本字符串 包含修订标记,而已删除的修订被格式化为隐藏 i、 e.删除隐藏文本可见文本 在不知道前面有隐藏文本的情况下选择了可见文本,并将所选内容复制到某个范围 Dim R_Visible as range set R_Visible = selection.range 如果我想确定某些属性,即字符样式,VBA将获取整个字符串的样式属性,即删除的隐藏文本可见文本,而不仅仅是可见文本。因此,如果删除零件的字符样式与可见零件的字符样式不同,VBA将返回selection.Para

正文

包含一个隐藏文本字符串

包含修订标记,而已删除的修订被格式化为隐藏

i、 e.删除隐藏文本可见文本

在不知道前面有隐藏文本的情况下选择了可见文本,并将所选内容复制到某个范围

Dim R_Visible as range
set R_Visible = selection.range
如果我想确定某些属性,即字符样式,VBA将获取整个字符串的样式属性,即删除的隐藏文本可见文本,而不仅仅是可见文本。因此,如果删除零件的字符样式与可见零件的字符样式不同,VBA将返回selection.ParagraphFormat.style的值

为了使事情更复杂,我只想引出所选文本的第一个字符的字符样式。以下是一些可能的方法及其结果:

a 打印R_Visible.characters1.CharacterStyle=>运行时错误91

b 打印R_Visible.characters1.Style==>段落样式

作为解决方法,我编写了以下函数:

Function ExactRange(Optional R_Range) As Range

Dim R_Selected As Range 

If IsMissing(R_Range) Then
    Set ExactRange = Selection.Range
Else
    'set ExactRange = R_Range.duplicate '(I haven't tested thoroughly whether that works under all circumstances)
    Set R_Selected = Selection.Range
    R_Range.Select
    Set ExactRange = Selection.Range
    R_Selected.Select 're-establishing the original selection-object 
End If

    ExactRange.SetRange Start:=ExactRange.Characters(1).End - 1, _ 
                          End:=ExactRange.Characters(Len(ExactRange)).End
End Function
这将产生更多的结果:

c 打印Mtf_ExactRangeR_可见。样式==>字符样式

d 打印MTF_ExactRangeR_Visible.Characters1.Style==>段落样式

e 打印MTF\u ExactRangeR\u可见。字符1.Style==字符样式


在我看来,这种行为相当不稳定。是否有人能向我解释一下这里发生了什么,并指出一种预期的VBA方法,以便在给定的情况下,在不需要变通功能的情况下引出字符样式?

Selection.style将仅返回一种样式,即使应用了多个样式。一个选择最多可以有4种样式

要查找选定文本的字符样式,请使用:

Selection.Range.CharacterStyle
要获取段落样式,请执行以下操作:

Selection.Range.ParagraphStyle
要获取表格样式,请执行以下操作:

Selection.Range.TableStyle
要获取列表项目符号或编号样式,请执行以下操作:

Selection.Range.ListStyle

感谢您提供有用的概述。不幸的是,这并不能解决上述问题,因为如果选择或范围对象前面有隐藏文本,则该隐藏文本似乎包含在该对象中,虽然很多函数在对象上运行,好像前面的文本不包括在内。但鉴于您最初的问题不够清晰,我只能这样做。例如,您将隐藏文本和删除文本混为一谈,尽管这是两件不同的事情。从您的新编辑中,我可以看出您对隐藏文本感兴趣。隐藏文本必须保留其样式特征,但如果不保留的话,听起来你会发现它更方便。我知道隐藏文本和删除文本是两种不同的东西,但在上述情况下,它们的行为方式相同。大多数时候,我必须处理格式为wdDeletedTextMarkHidden的已删除文本。如果删除的隐藏文本位于所选内容或范围对象之前,则该文本似乎已包含在内,因此selection.style将产生意外结果。另一方面,lengthselection和许多其他函数将返回预期结果。感谢您的澄清。在我发布了假设的解决方案后,关于整个问题出现了更多的问题,我重新制定了帖子。好的。。。在这里,你还需要小心,一旦一个答案被发布到一个问题上,就要改变它的内容。我敢打赌,如果立场颠倒了,你肯定不会高兴的,那就否定一个善意的答案是不好的。仅提一提以备将来参考:-