簡體   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