我有一个宏,可以根据单词模板创建实验报告,然后将其保存到远程服务器。在我的Excel工作表中选择一个单元格,运行宏,使用空白模板打开Word实例,并根据所选单元格和其他数据保存文件。我想要做的是编辑空白模板中的标题,并将其更新为实验名称,该实验名称位于所选单元格行的第一列。
以下代码在我从本地文件打开文件时起作用,但在文件位于服务器上时不起作用。
Dim oWord As Object
Set oWord = CreateObject("Word.Application")
oWord.Visible = True
oWord.Activate
' Open a new instance of the ExperimentTemplate and save it
oWord.Documents.Add Template:="ExperimentTemplate", NewTemplate:=False, DocumentType:=0
oWord.ActiveDocument.SaveAs FileName:=fPath & "example.docx", FileFormat:=wdFormatXMLDocument 'fPath is the path to the folder where file will be saved on the server
oWord.ActiveDocument.Close
' Re-open file and change Experiment Name
oWord.Documents.Open FileName:=fPath & "example.docx"
Set oSelection = oWord.Selection
oSelection.Find.Text = "Experiment Name"
oSelection.Find.Replacement.Text = name 'defined as the text in the first cell of the selected column
oSelection.Find.Execute Replace:=wdReplaceAll
oWord.ActiveDocument.Save
oWord.Quit
Set oWord = Nothing
我知道我的代码不是最优雅的,但除非它影响我试图实现的功能,否则我不会担心。任何帮助将不胜感激。这已经破坏了我的头两个星期了!
答案 0 :(得分:4)
你能为我试试这个代码吗?
Dim oWord As Object
Dim oSelection As Object
Dim sel As Object
Set oWord = CreateObject("Word.Application")
oWord.Visible = True
oWord.Activate
oWord.Documents.Add Template:="ExperimentTemplate", NewTemplate:=False, DocumentType:=0
oWord.ActiveDocument.SaveAs FileName:=fPath & "example.docx", FileFormat:=wdFormatXMLDocument 'fPath is the path to the folder where file will be saved on the server
oWord.ActiveDocument.Close
' Re-open file and change Experiment Name
oWord.Documents.Open FileName:=fPath & "example.docx"
Set oSelection = oWord.Documents(1).Content
oSelection.Select
Set sel = oWord.Selection
With sel
.Find.ClearFormatting
.Find.Replacement.ClearFormatting
With .Find
.Text = "Experiment Name"
.Replacement.Text = Name 'Hope you have declared it somewhere?
.Forward = True
.Wrap = 1 'wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
sel.Find.Execute Replace:=2 'wdReplaceAll
End With
End With