从宏中编辑文本框中的文本

时间:2017-03-23 14:32:53

标签: ms-word

我原本以为这会很简单,但我无法让它工作(如果可以的话,我可以为自己节省很多工作;我确实不是Word宏向导。)

我有一个带有大量文本模糊的Word文档。我已经定义了一个自定义文本框并将其添加到文本框库中。现在我想在每个模糊处放置一个文本框,然后将模糊移动到文本框中。而且我希望定义一个宏来自动化它(即,我手动选择模糊文本,然后运行一个切割模糊的宏,将光标移动到它正上方的文本框中,并在那里粘贴模糊)。 / p>

似乎是“进入文本框”部分是障碍。我可以通过以下步骤从键盘手动完成:

  • (光标位于文本框的左侧)shift-right-arrow(选择文本框)
  • F2(将光标放在文本框中进行编辑)

但是尝试录制复制它的宏不起作用。录制的宏的代码最终看起来像这样:

Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Shapes.Range(Array("Text Box 2")).Select

当我在调试器中运行此宏时,第一个语句实际上选择了宏开始时光标所在的文本框。

不幸的是,第二个语句不仅没有将编辑光标移动到该文本框内(就像F2键手动一样),它实际上选择了一个不同的文本框(文档中的第一个)。

我注意到如果我查看选择窗格(alt-F10),它会显示我在文档中的文本框,它们都具有相同的名称(“文本框2”)。所以我想这就是问题的一部分。 (Word不会给每个文本框一个唯一的名称吗?)但似乎也是我找不到任何宏代码将编辑光标移动到当前选定的文本框(是否有SetFocus或类似的东西)的情况?)

当然这一定是可能的吗? : - /

感谢。

/约翰

1 个答案:

答案 0 :(得分:0)

我知道这是愚蠢的深奥,但万一有人感兴趣,我想出了自己的答案。这是执行它的宏代码:

Selection.Cut
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.HomeKey Unit:=wdLine
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.ShapeRange.TextFrame.TextRange.Select
Selection.PasteAndFormat (wdFormatOriginalFormatting)

技巧是:

1)关于不在右侧文本框上操作的问题:当我尝试使用宏记录器定义宏时,Word通过插入ActiveDocument.Shapes.Range(Array("Text Box 2")).Select语句(由名称选择)将我甩掉不起作用,因为所有文本框都有相同的名称)。但是文本框已经已经选中(可以通过Selection.ShapeRange对象访问),因此无论如何都不需要再次选择

2)在文本框内移动编辑光标:在TextRange对象上选择(Selection.ShapeRange.TextFrame.TextRange.Select).

我不认为通过宏录制来尝试定义它是可行的;记录只是没有做正确的事情。我不得不手工捣乱。

对于任何想过这个想法的人,谢谢!

/约翰