[英]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项目的参考,您将看到原因:
当VBA在编译时遇到此指令时:
Dim Rng As Range
它需要将此Range
类型绑定到特定类型。 VBA项目中可能有一个Range
用户定义类型(UDT)? 还是那个名字的班级? 假设没有任何问题,则VBA尝试按优先级顺序在引用的库中定位类型。 VBA标准库无法移动或删除。 主机应用程序的对象模型库都没有。
如果在VBE的对象浏览器 ( F2 )中搜索“范围”,则会看到该名称有两个类:
因此,由于VBA解析名称Range
, Excel
库按优先级顺序排在第一位,因此它在编译时绑定到Excel.Range
。
通过使用要从中提取它们的库显式限定类型,我们修复了模棱两可的类型引用,并且VBA按预期绑定到Word.Range
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.