Board logo

標題: [發問] 用Excel開啟word後的搜尋問題 [打印本頁]

作者: PKKO    時間: 2014-12-19 10:35     標題: 用Excel開啟word後的搜尋問題

  1.             objSelection.WholeStory
  2.             objSelection.Find.ClearFormatting
  3.             objSelection.Find.Text = tt
  4.             objSelection.Find.Replacement.Text = ""
  5.             objSelection.Find.Forward = True
  6.             objSelection.Find.Wrap = wdFindContinue
  7.             objSelection.Find.Format = False
  8.             objSelection.Find.MatchCase = False
  9.             objSelection.Find.MatchWholeWord = False
  10.             objSelection.Find.MatchByte = True
  11.             objSelection.Find.CorrectHangulEndings = False
  12.             objSelection.Find.MatchAllWordForms = False
  13.             objSelection.Find.MatchSoundsLike = False
  14.             objSelection.Find.MatchWildcards = False
  15.             objSelection.Find.MatchFuzzy = False
  16.             objSelection.Find.Execute
  17.             objSelection.TypeText Text:=CStr(rr)
  18.             objSelection.Find.Execute , , , , , , , , , , wdReplaceAll
複製代碼
以上之程式碼可以完成我搜尋的工作,並且取代成功
但要如何得知有"幾個"搜尋結果,將搜尋結果的數量變成一個變數名稱ex:findN
而我就可以執行其他動作
if findN =0 then XXXXX

麻煩各位大大了
作者: luhpro    時間: 2014-12-21 23:12

本帖最後由 luhpro 於 2014-12-21 23:15 編輯
以上之程式碼可以完成我搜尋的工作,並且取代成功
但要如何得知有"幾個"搜尋結果,將搜尋結果的數量變成一個 ...
PKKO 發表於 2014-12-19 10:35

一般有同一物件多次引用時可以用 With ... End With 包起來,
其中再以 . 取代此物件:
你的程式可以改為 :
  1. With objSelection
  2.   .WholeStory
  3.   With .Find
  4.     .ClearFormatting
  5.     .Text = tt
  6.     .Replacement.Text = ""
  7.     .Forward = True
  8.     .Wrap = wdFindContinue
  9.     .Format = False
  10.     .MatchCase = False
  11.     .MatchWholeWord = False
  12.     .MatchByte = True
  13.     .CorrectHangulEndings = False
  14.     .MatchAllWordForms = False
  15.     .MatchSoundsLike = False
  16.     .MatchWildcards = False
  17.     .MatchFuzzy = False
  18.     .Execute
  19.   End With
  20.   .TypeText Text:=CStr(rr)
  21.   .Find.Execute , , , , , , , , , , wdReplaceAll
  22. End With
複製代碼
另取得被取代文字數量的方式我沒找到,
但你的需求可以用下式來實現:
if Not objSelection.Find then XXXXX
作者: PKKO    時間: 2014-12-22 00:01

回復 2# luhpro
太感謝了,我要的就是最後面的功能,我明天來試試看!,感恩!
作者: PKKO    時間: 2014-12-27 17:45

回復 2# luhpro

感謝 luhpro 大大,
小弟測試後,完全可以使用
以下為小弟的程式碼(我的寫法比較偷懶,不曉得我的寫法與您的寫法,在程式運作上速度會有差異嗎?)
  1. With objSelection
  2.             .WholeStory
  3.             .Find.ClearFormatting
  4.             .Find.Text = ttt
  5.             .Find.Replacement.Text = ""
  6.             .Find.Forward = True
  7.             .Find.Wrap = wdFindContinue
  8.             .Find.Format = False
  9.             .Find.MatchCase = False
  10.             .Find.MatchWholeWord = False
  11.             .Find.MatchByte = True
  12.             .Find.CorrectHangulEndings = False
  13.             .Find.MatchAllWordForms = False
  14.             .Find.MatchSoundsLike = False
  15.             .Find.MatchWildcards = False
  16.             .Find.MatchFuzzy = False
  17.             If Not .Find.Execute Then
  18.                 Range("k" & num) = "搜尋不到 " & ttt
  19.                 num = num + 1
  20.             Else
  21.                 .TypeText Text:=CStr(rr)
  22.                 .Find.Execute , , , , , , , , , , wdReplaceAll '如果找到
  23.             End If
  24.         End With
複製代碼

作者: GBKEE    時間: 2014-12-28 11:13

回復 4# PKKO
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim s As String, n As Integer
  4.     s = "TEST"
  5.     With Selection.Find
  6.         .Text = s
  7.         .Replacement.Text = ""
  8.         .Forward = True
  9.         .Wrap = wdFindContinue
  10.         .Format = False
  11.         .MatchCase = False
  12.         .MatchWholeWord = False
  13.         .MatchByte = True
  14.         .MatchWildcards = False
  15.         .MatchSoundsLike = False
  16.         .MatchAllWordForms = False
  17.     End With
  18.     Do While Selection.Find.Execute = True
  19.         n = n + 1
  20.         Selection.Find.Execute
  21.     Loop
  22.     If n > 0 Then
  23.         MsgBox "搜尋 " & s & " 共有 " & n & " 次"
  24.     Else
  25.         MsgBox "搜尋不到 " & s
  26.     End If
  27. End Sub
複製代碼

作者: PKKO    時間: 2014-12-28 23:49

回復 5# GBKEE


    感謝!有空再來試試看
作者: PKKO    時間: 2014-12-29 05:57

本帖最後由 PKKO 於 2014-12-29 05:58 編輯

感謝超版大大,我將程式碼改成如下,不然N會少一半的次數,因為兩次Execute
目前已可正常使用,感動ㄋㄟ!
  1.             With objSelection
  2.                 .WholeStory
  3.                 With .Find
  4.                     .ClearFormatting
  5.                     .Text = "t03"
  6.                     .Replacement.Text = ""
  7.                     .Forward = True
  8.                     .Wrap = wdFindContinue
  9.                     .Format = False
  10.                     .MatchCase = False
  11.                     .MatchWholeWord = False
  12.                     .MatchByte = True
  13.                     .CorrectHangulEndings = False
  14.                     .MatchAllWordForms = False
  15.                     .MatchSoundsLike = False
  16.                     .MatchWildcards = False
  17.                     .MatchFuzzy = False
  18.                     Do While .Execute = True
  19.                         n = n + 1
  20.                         '找到的話
  21.                         'msgbox "找到了"
  22.                     Loop
  23.                 End With
  24.                 If n = 0 Then '如果找不到
  25.                    'msgbox "找不到"
  26.                 End If
  27.             End With
複製代碼
回復 5# GBKEE




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)