繁体   English   中英

VBA使用Excel版本在Word对象上查找?

[英]VBA using Excel version of Find on a Word Object?

我试图在Word文档中查找前两个日期,并将它们另存为Excel宏中的变量。 我项目的其他部分要求将其编写为Excel宏。

Dim wordObj As New Word.Application
Dim wordDoc As New Word.Document
Dim Rng As Range
Dim myDate As String
Dim Fnd As Boolean
Dim i As Long
i=0
Set wordDoc = wordObj.Documents.Open(path)
Set Rng = wordDoc.Range
Do While i < 2
    With Rng.Find
        .Execute FindText:="??/??/????", MatchWildcards:=True
        Fnd = .Found                                                             
    End With
    If Fnd = True Then
        mydate = Rng
        If i = 0 Then 
            firstdate = mydate
        ElseIf i = 1 Then
            seconddate = mydate
        End If
    End If
    i = i+1
Loop
End Function

我收到编译错误:参数不是可选的。 问题是,VBA将其解释为具有参数(目标,StartLine,StartColumn等)的Excel的.Find,而不是Word Find对象。 我是VBA的新手,管理不同类型的应用程序有点令人困惑。

问题是,VBA将其解释为具有参数(目标,StartLine,StartColumn等)的Excel的.Find,而不是Word Find对象

 Dim Rng As Range 

但这一个具有Find方法的Excel Range ;-)

此行在运行时将引发类型不匹配错误:

 Set Rng = wordDoc.Range 

使用您要从中提取类型的库来限定它:

Dim Rng As Word.Range

这将有助于VBA了解Range接口的来源。


如果查看VBA项目的参考,您将看到原因:

VBE引用对话框显示Word库优先级5和Excel优先级2

当VBA在编译时遇到此指令时:

Dim Rng As Range

它需要将此Range类型绑定到特定类型。 VBA项目中可能有一个Range用户定义类型(UDT)? 还是那个名字的班级? 假设没有任何问题,则VBA尝试按优先级顺序在引用的库中定位类型。 VBA标准库无法移动或删除。 主机应用程序的对象模型库都没有。

如果在VBE的对象浏览器F2 )中搜索“范围”,则会看到该名称有两个类:

对象浏览器列出了Excel.Range和Word.Range类

因此,由于VBA解析名称RangeExcel库按优先级顺序排在第一位,因此它在编译时绑定到Excel.Range

通过使用要从中提取它们的库显式限定类型,我们修复了模棱两可的类型引用,并且VBA按预期绑定到Word.Range

Word.Find对象的成员列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM