我有一个在Win 2003上运行的Word 2003中运行的宏,宏在normal.dot模板中,相关部分在下面。它从合并的.rtf运行,复制当前文档,打开新文档,粘贴复制的内容以及来自userform组合的一些数据,将其保存在自定义命名文件中,然后将其关闭,将用户放回原位开始。然后继续FTP保存的文件。它按预期工作。
ActiveDocument.Content.Copy
Documents.Add
ActiveDocument.Content.Paste
'Add the data from the Userform
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.ClearFormatting
.Text = "\<refDestination\>*\<End Synapse data\>"
.Replacement.ClearFormatting
.Forward = True
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.Replacement.Text = "<refDestination>" & ComboBox1 & "</refDestination>" & _
"<refType>" & ComboBox2 & "</refType>" & _
"<End Synapse data>"
.Execute Replace:=wdReplaceAll, _
Wrap:=wdFindContinue
End With
ActiveDocument.SaveAs savedName, wdFormatDocument
ActiveDocument.Close ' Now go on to FTP savedName
MsgBox "wait here"
我正在尝试在Win 7和Word 2007上的不同站点上运行相同的宏而且它失败了,我无法删除savedName,因为它已经打开,在某种程度上activedocument.close不会释放文件,并且进程挂起。如果我使用任务管理器强制关闭单词,那么我可以转到savedName的文件并打开它并且它包含正确的数据,它似乎在关闭时停止。
答案 0 :(得分:0)
我无法解释为什么你的宏在Windows XP / Office 2003平台上工作以及为什么它在新平台上遇到错误。但是我看到你正在将ActiveDocument对象用于两个不同的文档,即源和目标。在复制过程中,Word会创建临时文件(请参阅MSDN中的this article,请参阅“文件之间粘贴的文本”)。 我不确定是否存在连接,但我宁愿使用两个不同的对象,例如
Dim docSource as Word.Document
Dim docDest as Word.Document
Set docSource = ActiveDocument
docSource.Content.Copy
Set docDest = Documents.Add
docDest.Content.Paste
docSource.Close SaveChanges:=wdDoNotSaveChanges
<continue with docDest>