微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 VBA 宏控制 Word 2003 文件中的“位置”?

如何解决如何使用 VBA 宏控制 Word 2003 文件中的“位置”?

我在 Word 2003 中的一些 Visual Basic 宏 (6.3) 中遇到了一个随机问题,即在宏执行后,我不在“我应该在的地方”。我不知道相关的技术术语,因此很难查找相关信息:我在问适用的技术概念是什么。当我打开多个 Word 文件并运行某些搜索和替换宏时,在执行结束时顶部的窗口看起来是正确的,但我无法输入或单击该文件,因为 Word 认为我在一个不同的文件,所以我必须切换到该不同的文件,单击,然后切换回所需的文件。此外,在“切换到”文件中,我经常被发送到文件顶部,因此我不得不手动恢复我原来的位置。由于这是一个随机问题,因此很难调试并消除根本原因。似乎(非系统调查)Word 将我发送到打开的 Word 文件环中的第一个文件

大概在 Word 中有一些可寻址的内容对应于“这是我当前所在的文件(在打开的文件环中)”和“这是我在该文件中的位置”,可以保存和恢复.我只能找到有关获取文件路径的信息。从我对“环”这个词的古老用法可以看出,我什至不知道哪个术语描述了在 Word 中打开的一组文件间的关系。我应该寻找哪些技术术语?如果您能建议如何“保存”和“恢复”文件代码,也会很有帮助。

以下是出现该问题的宏的一个示例:

Sub Lengthen()
'
' Lengthen Macro
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([aeIoU" & ChrW(618) & ChrW(650) & "]):"
        .Replacement.Text = "\1\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

解决方法

您可以使用 Activedocument 获取当前文档的名称。

Sub FindDoc()
    Dim myDoc As Document
    Set myDoc = ActiveDocument
    MsgBox myDoc.Name
End Sub
,

您可以使用 Word.Range 的重复属性将活动与选择分离。对您的代码稍作调整将允许在不影响您当前选择的情况下进行查找和替换(尽管选择中的文本可能会因查找/替换而发生变化)

Sub Lengthen()
'
' Lengthen Macro
'
    Dim myRange As Word.Range
    Set myRange = Selection.Range.Duplicate
    
    With myRange.Find
    
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "([aeiou" & ChrW(618) & ChrW(650) & "]):"
        .Replacement.Text = "\1\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
        
    End With
    
End Sub

如果您需要使用选择在文档中执行其他操作,则可以使用

从选择范围中限定文档
Dim myDoc As Word.Document
Set myDoc = Selection.Document

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。