【问题标题】:Word VBA: Store a reference to a specific selection (without using range)Word VBA:存储对特定选择的引用(不使用范围)
【发布时间】:2014-07-10 03:29:39
【问题描述】:

我正在寻找一种方法来存储对选择的引用。看来我创建了一个变量,例如:

dim tSelect as Selection
Set tSelect = Selection

我创建了一个对活动选择对象的引用。如果我在不运行任何代码的情况下更改选择(例如,在 DoEvents 类型循环期间),则选择变量会在不调用的情况下更新:

Set tSelect = Selection

我需要创建一个变量来保存对所选内容的静态引用,然后我需要能够更改选择而不丢失对先前选择的文本的引用。

Range 对象不起作用。我需要能够使用 ctrl 键选择不一定彼此靠近的段落列表。

当使用此方法选择段落时,选择对象只显示最后“组”的段落(例如,如果我选择了 1 个段落,则跳过下一个并使用 ctrl+click 再选择 2 个,范围/选择对象仅指向最后 2)。

以下也不起作用(出于公认的明显原因):

set tSelect = new selection

任何想法都将不胜感激。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    按照微软的说法,这个问题会有很大的困难。
    http://support.microsoft.com/kb/288424

    我能想到的最佳解决方案是将文本样式更改为文件中的唯一内容,然后搜索文件并为唯一文本创建子范围集合。获得子范围集合后,您可以将样式改回正常。

    在上面的链接中,它说您不能使用 vba 来选择多个范围。这意味着您必须使用 vba 代码来循环遍历子范围的集合,无论何时要执行操作。

    回顾一下,存储:

    1. 使用适用于不连续选择的属性之一使文本独一无二
    2. 遍历文件,找到独特的文本块并将它们作为单独的范围存储在集合中
    3. 循环遍历集合并使文本再次正常

    执行一个动作:

    1. 循环遍历子范围的集合
    2. 对每个子范围执行操作

    【讨论】:

    • 这回答了我的问题,但很可能我不会使用你的方法。这仅仅是因为我无法将字体更改为我可以“gaurentee”独特的任何东西。不过,我可能会找到另一种识别文本的方法。为您的研究加油。
    • 您可以遍历文件一次以确定未使用的字体大小/字体样式,然后执行上述操作。字体大小会更容易使用。这不是学术上的完美(字体大小有限制),但我从未见过无法完成工作的 doc 文件。真的,使用 1 号字体或任何晦涩的字体应该可以正常工作。
    • 你不能存储(在集合或字典对象中)每个范围的开始/结束字符吗?我没有对此进行测试,但我认为它应该避免需要操纵字体大小。
    • “Selection.Range”与不连续的选择不兼容。这意味着如果您选择了多个范围,VBA 只会跟踪有关最后一个范围的信息。只有少数属性与不连续的选择兼容,例如字体大小和样式。
    • Selection.font 和 selection.paragraph 格式对象适用于“不连续的选择”。大卫,没有办法单独遍历段落,因为选择对象只将最后几段视为有效选项。 selection.paragraphs(#) 只引用这些段落, selection.range.paragraphs 也一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2019-05-10
    相关资源
    最近更新 更多