我需要遍历excel表中的一行并使用单元格值在Word文档中进行替换。我使用记录宏来获取代码,它实际上替换了文本。但是当我从Excel宏中使用它时,它不起作用。
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}”),但没有其他事情发生。
我该如何解决这个问题?
答案 0 :(得分:3)
除非在Excel VBA项目中添加对Word对象库的引用,否则Excel不会知道Word常量的值,例如wdReplaceAll。
您可以添加引用,在Excel VBA中声明常量,也可以使用常量'相反的值(可以在Word VBA对象浏览器中找到)