Word VBA,是否有理由在Word 2003 Win XP下运行,而不是Word 2007 Win 7

时间:2011-03-04 23:10:01

标签: vba ms-word

我有一个在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的文件并打开它并且它包含正确的数据,它似乎在关闭时停止。

1 个答案:

答案 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>