2014-03-27 66 views
0

我需要通過excel表中的一行並使用單元格值在Word文檔中進行替換。我使用記錄宏來獲取代碼,它實際上替換了文本。但是,當我從Excel宏使用它時,它不起作用。從Excel中替換Word文檔中的文本

Dim WordApp As Object 
Set WordApp = CreateObject("Word.Application") 
WordApp.Visible = True 

Dim WordDoc As Object 
Set WordDoc = WordApp.Documents.Open(doc_path_str) 

Dim find_what, find_repl As String 

For col_idx = params_hdr_range.Column To params_hdr_range.Column + params_hdr_range.Columns.Count - 1 
    find_what = CStr(scnd_sheet.Cells(params_hdr_range.Row - 1, col_idx).Value) 
    find_repl = CStr(scnd_sheet.Cells(model_found_range.Row, col_idx).Value) 
    WordApp.Selection.Find.ClearHitHighlight 
    WordApp.Selection.Find.ClearFormatting 
    WordApp.Selection.Find.Replacement.ClearFormatting 
    With WordApp.Selection.Find 
     .Text = find_what 
     .Replacement.Text = find_repl 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
    End With 
    WordApp.Selection.Find.Execute Replace:=wdReplaceAll 
Next col_idx 

find_what和find_repl具有適當的值(「{} MODEL」和「F22-2」),我用錄製宏當相同的,但沒有更換製成。此代碼執行的唯一操作是在文檔中選擇文本「{MODEL}」。但它並沒有取代它,雖然它經歷了很多列和其他值(例如「{PRICE}」),但沒有發生任何其他事情。
我該如何解決這個問題?

+1

你在引用添加到Word中Excel VBA項目?如果你不知道,Excel不會知道Word常量的值,比如'wdReplaceAll' –

+0

將其作爲回答發佈,我會接受它:) – Sergi0

回答

3

除非在Excel VBA項目中添加對Word對象庫的引用,否則Excel不會知道Word常量(如wdReplaceAll)的值。

您可以添加引用,聲明的常量在Excel VBA或使用常量的價值觀,而不是(可在Word中VBA對象瀏覽器中找到)

+0

我想知道爲什麼每次按回車都會有那些荒謬的消息,但無法在此處添加警告。 – Sergi0

+0

@ Sergi0 - 你的意思是什麼?如果你指的是VBEditor中的信息,你可以通過* Tools >> Options >> Editor >>取消選中「自動語法檢查」* –

+0

是的,我知道。但自動語法檢查不是問題,該消息框是:)我的意思是,來吧,這不是Windows 3.11了,當人們很高興看到任何GUI – Sergi0

相關問題