我正在尝试根据Excel中的数据打开特定的Word模板(该部分正在运行)。然后,一旦模板打开,我试图根据Excel文档中的标签进行查找,并替换相同列中的相应数据。当我运行宏时,它打开模板,只是旋转和旋转而不给我输出。这是代码:
` Sub New_Purification_SOP()
'
' New_Purification_SOP Macro
''Open an existing Word Document from Excel
Dim objWord As Object
Dim myValue As Variant
Dim PurCol As Variant
'open input box requesting line of the material to be made
myValue = InputBox("Select Row to create SOP")
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
'Change the directory path and file name to the location
'of the document you want to open from Excel
If ActiveSheet.Cells(myValue, 10) = "Supe" And _
ActiveSheet.Cells(myValue, 12) = "IgG1" Then
objWord.Documents.Open "S:\generic filename"
With objWord
For PurCol = 3 To 13 'move through columns left to right
TagName = .Cells(10, PurCol).Value 'get tag name from row
TagValue = .Cells(myValue, PurCol).Value 'get tag name from row
With objWord.Content.Find
.Text = TagName
.Replacement.Text = TagValue
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll 'Forward = True, Wrap = _
wdFindContinue
End With
Next PurCol
End With`
...
我对VBA很新,所以请尽可能多地批评。
答案 0 :(得分:0)
您可能希望在打开/创建单词对象时包含错误处理。我发现,如果我已经有一个单词的实例,它实际上可能会崩溃应用程序。这可能会导致您的程序出现问题。
source: https://stackoverflow.com/questions/17177412/close-release-word-object-in-vba
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
'We've tried to get Word but if it's nothing then it isn't open
If objWord Is Nothing Then
Set objWord = CreateObject("Word.Application")
End If
'It's good practice to reset error warnings
On Error GoTo 0
之后,查找/替换故障排除可能是一项痛苦的任务。请参阅此文章了解原因:https://gregmaxey.com/word_tip_pages/words_fickle_vba_find_property.html。您可能想要做的是使用宏录制器检查查找/替换代码,然后将其提升到循环中。它可以节省大量的调试时间。
答案 1 :(得分:0)
问题来自于在代码中使用Find.Wrap = wdFindContinue
。
此属性指示Word继续执行查找 - 类似于用户持续按下"查找下一个"在对话框中。它应该很少(更像是从不)在编码时使用,因为它可能导致非结束循环,如本例所示。
在这种情况下,由于正在使用wdReplaceAll
- 意味着代码在一个步骤中完成 - Wrap
并不一定需要指定。但通常的好习惯是使用Find.Wrap = wdFindStop
。