[英]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.