1 2 3 4 5 6

廣告

網友您好,若是您覺得我寫的工具或文章對您有幫助,
而您或者您的朋友有在博客來購物,可以透過底下連結

如何在博客來購物贊助網站或是點選計數器下方的博客來圖示來讓網站可以永續經營。

2008年7月29日 星期二

如何一次取代多個Word檔案中的多個字串

如果有一百份word的檔中的"身份證"要改成"身分證" ,就要開啟一百個檔案,把每一個檔案取代完再開另一個檔案,另一個我會寫這個主要原因是合併列印時,如果有unicode的字,合併完的word檔都會用?取代,每次都要取代這些很麻煩,所以就寫了這一支word巨集.
檔案下載:http://download.bestdaylong.com/f11.htm
練習檔案:
http://f272586.googlepages.com/A.doc
http://f272586.googlepages.com/B.doc

註冊版本下載:http://download.bestdaylong.com/f470.htm
(可以取代格式及加入頁首頁尾取代)
PS:未註冊每次只可以執行3個檔案
1.replacepro.doc跟您要處理的word檔案放在一起 2.打開replacepro.dlc會出現巨集,請按啟用巨集 3.把要取代的字及檔案寫上去,格子不夠可以自己往下加,但中間不要有空白,然後按下多檔案取代 4.出現取代完成,就表示處理完了.

48 則留言:

Liang 提到...

太...太.....感謝大大的大力幫助,有個小問題,因為我一次要取代100個檔案,欄位要自己加,我一直新增欄位都不知道加到100個了嗎?
如果能在檔案名稱前面多加一欄"編號",這樣我就可以一次加100欄了,(我自己加了一欄,結果巨集就出現錯誤),謝謝!

一整天 提到...

liang您好:
您可以在最後一欄,再加上編號就可以,不要加在前面,因為我程式己經寫好,抓預設的前三欄,或是您可以在Excel先把資料打好,再copy到word貼上,也是可以的.

Liang 提到...

謝謝大大的指教,讓我快速的完成工作,同事都很驚訝,大家都覺得大大真是上班族的救世主呢!

Liang 提到...

大大您好:
我同事在使用replacepro.doc使會出現錯誤訊息,他的WORD版本是2002,有關係嗎?

XMLTRANSFROM:=""

編譯錯誤
找不到指名引數
我的WORD版本是2003,都沒問題,但是只要COPY到他的電腦裡使用都會出現錯誤訊息,
麻煩您了!

Liang 提到...

大大您好:
後來我請同事重新安裝WORD 2003後,問題就解決了,所以這巨集是在2003才能用的,謝謝!

一整天 提到...

liang您好:
我把程式修正過了.現在在WORD2002一樣可以用了.麻煩您再下載一次.

Liang 提到...

謝謝大大的幫忙

Mitchell 提到...

大大 我想請教一下 我有張舊品號跟新品號的XLS對照表,因為文字藏在很多個欄位
甚至連Visio都有.....

我比較想先解決EXCEL大批文字更換的 因為有上萬筆.....

一整天 提到...

Mitchell您好:
您可以參考
http://272586.blogspot.com/2008/07/excel_16.html
如何在Excel一次取代多個字串

Root 提到...

你好,我想套用在PPT檔上可以嗎,要如何做呢?感謝大大

一整天 提到...

Root您好:
我在PowerPointer試了巨集取代功能,發現沒辦法錄製到取代的指令,所以目前這個功能無法在ppt上使用。

恩寧 提到...

您好!
我下載replacepro.doc之後
打開並沒有出現啟動巨集的視窗
請問該怎麼處理?
謝謝!

一整天 提到...

恩寧您好:
請問您用的word版本是多少,如果是word2003可以參考底下的說明開啟巨集.

http://272586.blogspot.com/2008/01/excel_21.html
如何讓Excel執行巨集時會出現安全性警告視窗

kerick 提到...

超方便~ 謝謝!
我可以放在我的部落格介紹嗎?

一整天 提到...

kerick您好:
您只要註明出處就可以將我的文章放在您的部落格中。

m5878032 提到...

你好~
我需要用到這個可是那個網址無法複製了http://f272586.googlepages.com/a.doc & http://f272586.googlepages.com/b.doc 可以請你幫忙修復嗎?

一整天 提到...

m5878032您好:
您只要將a.doc改成A.doc,b.doc改成B.doc
就可以了,連結的部分我己修正.

篆來撰去 提到...

您好:

範例檔測試下都正常,但使用自己的檔案來處理卻沒取代成功。不知是不是尋找的內容不包含特殊表格內的文字呢?

阿良人 提到...

您好:

又測試了一下,發現問題應該是我所要取代的doc檔裡面的文字都是在「文字方塊」中,不是一般打字打在內文。(同一個檔案內,在內文的文字能正常辨識取代,但於「文字方塊」內的,就原封不動了)

因為有大量的doc需要修改(由OCR辨識軟體轉出來的rtf,再手動轉成doc,因為專有名詞錯誤多,所以一定得逐筆尋找取代)

所以因此可能這個程式就無法辨識出來了?

一整天 提到...

阿良人您好:
我這邊測試文字方塊內的字也可以取代,您是否可以寄無法取代的檔案範例給我.我查看是那的問題.

阿良人 提到...

您好:

我把檔案放在:http://fyels.com/26U00p

還請麻煩測試。

一整天 提到...

阿良人您好:
程式我己修正過了.麻煩您到
http://sites.google.com/site/272586/fan-li-cheng-shi
下載replacepro.doc

阿良人 提到...

您好:

似乎還沒能正確的把「義之」取代成「羲之」。

還請再度查看。

謝謝

阿良人 提到...

您好:第三版的使用後,果然能正常取代了。把真正要修改的檔案執行後。發現整個WORD當掉約十多分鐘,可見相當耗效能。
雖然正確把幾筆取代成功。若日後想要一次執行二十多個檔案,還有超過一百個位置。可能得利用晚上睡覺時,讓電腦執行了?

A 王義之 王羲之
B 義之 羲之
中國書法史 蘇試 蘇軾
米菌 米芾
米荊 米芾
米董 米芾
米帯 米芾
米希 米芾
米帝 米芾
米薙 米芾
米帑 米芾
米吊 米芾

一整天 提到...

阿良人您好:
我把文字塊取代的部分改良,您再下載看看速度是否有比較快.

阿良人 提到...

跑的效率的確有變快了,但資料都沒有改過去。可能在某個環節還是有問題?

一整天 提到...

阿良人您好:
我把版本換回前一版,目前找不到比較快的解法。

阿良人 提到...

瞭解!感謝辛苦的更新~

PH55 提到...

Dear 彰化一整天兄,

可否滿足多一個要求, 能更使變換後的字串格式有所改變, 如字體大小, 顏色變更。

曾試自己在this document & Module1 試刀...但失敗. 現在求教.

萬分感謝!!

PH55 提到...

希望一整天兄能多給一點提示. 謝謝!!

一整天 提到...

PH55您好:
我己將這個功能加上,麻煩您到
http://sites.google.com/site/272586/fan-li-cheng-shi
找到replacepro.doc重新下載就可以.

如果您要語法如下
With Selection.Find
.Text = "A"
.Replacement.Text = "B"
.Replacement.Font.Color = wdColorBlue
.Replacement.Font.Size = 15
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With

PH55 提到...

超強勁!! 比所想的概念更上一層!!

可以由目的格內的不同格式而決定顏色及字形大小!! 爽!!

以你為榜樣!!謝謝!!

這樣的技術,可以用在學習英文的自然發音法上,以便更快的找出有關母音及子音。

就是用這方法!!

配合萬用字元應該可以成功吧!!

埃及藍 提到...

一整天您好:

您的巨集真是超好用的
但是是否無法取代「頁首頁尾」的文字呢
因我怎麼試都無法更新

謝..

一整天 提到...

埃及藍您好:
我試了.好像變成巨集就無法取代頁首頁尾,但是直接用取代是可以,目前我還找不到是什麼問題.

埃及藍 提到...

是喔...
謝謝您了...雖然少了頁首頁尾但是還是超強的巨集

埃及藍 提到...

是喔...
謝謝您了...雖然少了頁首頁尾但是還是超強的巨集

孫守真 提到...

看到程式碼前端,第一個感觸是:
效能會慢應讓是用word表格有關,若能配用用DAO或ADO取自Access資料庫(當然也可以是別種資料庫,目前我只Access較熟)中的表格資料,則相信會快許多!

孫守真 提到...

大致看來,應是很初階的巨集程式了.當然我也不過只有這種程度.但我想應還有更精進的方法.我想開發一個不用word裡find物件的取代功能來執行.我懷疑word此功能也不夠快故.
我想樓主與我也一樣,先是錄製一段巨集,抓到它的巨集指令,然後改寫到程式碼中囉.
阿良兄引薦來此一觀的.很感謝樓主的付出.目前還在自學之中,相信樓主這幾年功能也必然遠在我之上了.不知樓主對此舊式,可有改良的良策.希冀日後能多與您交流請益.謹祝
道安
              任真敬啟

孫守真 提到...

剛才測試發現用find物件,execute方法的replaceall引數(即word全部取代功能)果然很慢,若改為下式則快多了:


只是我目前還抓不穩range的start 和 end的數值.還須多加測試.

關鍵是不要用range去比對,而是先將range的text值賦予一字串變數.

我也想過用open for input as 的敘述試試.再說.

Sub replacetest0() '2012/6/5
Dim a As Range, x As Long, q As String
Dim s As Date, e As Date, g, i
'Set a = ActiveDocument.Range
'Debug.Print Len(a)
s = VBA.Timer
q = ActiveDocument.Range
x = InStr(q, "翁方綱")
'x = InStr(a.Text, "翁方綱")
For Each g In ActiveDocument.Comments
g.Delete
Next
With ActiveDocument
Do Until x = 0
' .Range(x - 1, x + 3 - 1).Select
.Range(x - 1, x + Len("翁方綱") - 1).Text = "孫守真"
i = i + 1
' If i = 68 Then Stop
x = InStr(x + 1, q, "翁方綱")
If .Range(x - 1, x + 3 - 1) <> "翁方綱" Then
e = VBA.Timer
Debug.Print e - s
Debug.Print i
Stop
End If
'a.Text = Replace(a.Text, "翁方綱", "孫守真")
'a.Find.Execute "翁方綱", , , , , , , , , "孫守真", wdReplaceAll '果然太慢!!
Loop
End With
e = VBA.Timer
Debug.Print e - s

End Sub

一整天 提到...

孫守真您好:
謝謝您提供寶貴的意見.讓我多學到一種解法.

reading longly 提到...
作者已經移除這則留言。
Ch Li 提到...

您好
我利用您的巨集進行了一些修改如下
Sub 文件表格內容查找並取代_Click()
Dim i, j
i = 1
j = 1
f = Archive Documents.Tables(1).Cell(i, 1)
f = Left(f, Len(f) - 2)
While f <> "" And i <= Archive Documents.Tables(1).Rows.Count
j = 1
a = Archive Documents.Tables(1).Cell(j, 1)
a = Left(a, Len(a) - 2)
b = Archive Documents.Tables(1).Cell(j, 2)
b = Left(b, Len(b) - 2)
While a <> "" And j <= Archive Documents.Tables(1).Rows.Count
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = a
.Replacement.Text = b
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.CorrectHangulEndings = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
j = j + 1
i = i + 1
a = Archive Documents.Tables(1).Cell(j, 1)
a = Left(a, Len(a) - 2)
b = Archive Documents.Tables(1).Cell(j, 2)
b = Left(b, Len(b) - 2)
Wend f = Archive Documents.Tables(1).Cell(i, 1)
f = Left(f, Len(f) - 2)
Wend
MsgBox "取代完成", , "系統"
End Sub

我的問題是
我希望取代的範圍由
文件中的【標】至【文】中
文件的其他部分則不進行取代

不知您能否幫我解決這個問題


一整天 提到...

Ch Li您好,
麻煩您到
http://discuz.bestdaylong.com/(彰化一整天的論壇)
張貼問題(可貼圖及上傳檔案)
並上傳您要處理的檔案及用圖說明您的處理過程的前後結果及畫面.您只有張貼程式碼我不瞭解您的問題,沒辦法幫您想辦法.

Yang Sheng 提到...

很好用,速度很快(10個檔案、10個詞大概1-3秒),謝謝。

vicky 提到...

太感謝您的付出。使用過之後,發現原被取代字串字元尺寸為28,取代後改成12。不知道是否有方法是套用原被取代字串的格式?

蔡明和 提到...

您將【取代格式】的勾拿掉再試看看.

tnjcb 提到...

版主您好:
replacepro.doc在有表格的文件中使用,表格中的文字會出現重覆的現象。
例:國-->國語 取代後會變成國語語
不知道有沒有方法可以解決?感恩您提供軟體供大家使用。。

蔡明和 提到...

tnjcb您好,
已修正這個問題,麻煩您重新下載試看看.

贊助

彰化一整天粉絲團

About Me

我的相片

很多人問我為什麼叫"一整天",其實這是有原故的.有一天看一本書.就是說如何介紹自己.裡面說到如何讓別人對你的名字有印象.就要讓別人跟你的名字或是身體的一些特徵有關.比如很胖.就會被別人取小胖或是胖子.或是跟名字有關的諧音,那天看布袋戲中有一個叫”一頁書”的角色.所以我就想我的名字.可以想出什麼字出來.結果我把我的名字"明和",拆成日月和,日月和在一起,就代表白天晚上都在一起.就取名為"一整天",而這個"一整天"跟我的名字有關也方便別人記憶,後來發現"一整天"這個名詞太常被用,所以就在"一整天"前面加上"彰化"變成"彰化一整天",為什麼要加彰化.因為我老家在彰化,所以以後別人要找我的部落格的話.我都會跟他們說,請到yahoo或是google打"彰化一整天"第一筆出現的就是我的Blog. PS:現在只要輸入"一整天"可以找到.

Google+ Followers