HelloWorld_Peng666 2024-04-18 21:58 采纳率: 69.2%
浏览 5
已结题

VBA处理文件,发现打开的word文档分布在出现多个实例下,无法全部遍历

现在电脑打开了11个word文档,打开任务管理器看到“应用”里有两个“Microsoft Word”实例,
有一个word实例下有10个文件,另外一个word实例下有1个word文档。
用VBA处理文件,想把打开着的这些word文档里如果名字里有特定关键词“ABC”的word文档关闭,可是我用GetObject(,"word.application")只能取得其中一个word实例,也就是说不能把所有的word文档都遍历到,不知道怎样才能遍历到所有打开着的word文档,并判断其名字里是否包含“ABC”关键词,如果包含“ABC”,则关闭这个文档,否则不关闭。
另外,为什么这11个打开了的word文档会分在两个word实例里呢?按照什么分配的?请教!谢谢

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-18 21:58
    关注

    引自免费微信小程序:皆我百晓生

    为了遍历并操作所有打开的Word文档,你需要使用GetActiveObject函数而不是GetObjectGetObject只返回一个指定类的单个对象,而GetActiveObject可以获取当前活动的应用程序实例。这里是一个详细的步骤和VBA代码示例:

    首先,确保你已经引用了Microsoft Word Object Library。可以通过以下步骤添加引用:

    1. 在VBA编辑器中,点击“工具”菜单。
    2. 选择“引用”选项。
    3. 在弹出的窗口中找到 "Microsoft Word XX.0 Object Library" (XX是版本号,例如16.0),勾选它,然后点击确定。

    接下来,使用以下VBA代码来遍历所有打开的Word文档并检查文档名是否包含关键词"ABC",如果是,则关闭文档:

    Sub CloseDocumentsWithKeyword()
        ' 引用 Microsoft Word Object Library
        ' 添加引用: 工具 -> 引用 -> Microsoft Word XX.0 Object Library
        
        Dim wordApp As Object ' 创建 Word 应用程序对象
        Dim wordDoc As Object ' 创建 Word 文档对象
        Dim docName As String ' 存储文档名称
        
        ' 获取所有活动的 Word 实例
        Set wordApp = GetActiveObject("Word.Application")
        
        ' 检查是否有多个 Word 实例
        If wordApp.Windows.Count < 2 Then
            MsgBox "只有一个 Word 实例正在运行。"
            Exit Sub
        End If
        
        ' 遍历每个文档
        For Each wordDoc In wordApp.Documents
            docName = wordDoc.Name ' 获取文档名称
            
            ' 检查文档名称是否包含 "ABC"
            If InStr(1, docName, "ABC", vbTextCompare) > 0 Then
                ' 关闭文档
                wordDoc.Close SaveChanges:=wdDoNotSaveChanges ' 不保存更改
                MsgBox "已关闭文档:" & docName
            Else
                ' 如果没有找到关键词,跳过此文档
                Debug.Print "忽略文档:" & docName
            End If
        Next wordDoc
        
        ' 清理变量
        Set wordDoc = Nothing
        Set wordApp = Nothing
    End Sub
    

    关于为何这些Word文档会被分到不同的实例中,这是因为当用户打开新的Word文档时,Windows操作系统可能会决定将新文档放在现有Word实例中,或者创建一个新的实例。具体分配逻辑可能与用户的系统设置、Word的配置以及是否存在资源限制等因素有关。在大多数情况下,如果你在一个Word实例中打开了多个文档,它们通常会被安排在同一实例下,除非你手动或通过某些方式启动了第二个Word实例。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 修改了问题 4月18日
  • 创建了问题 4月18日

悬赏问题

  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误