Vbscript 查找和替换Word文档中文本的VB脚本

Vbscript 查找和替换Word文档中文本的VB脚本,vbscript,ms-word,Vbscript,Ms Word,我没有太多的VB脚本编写经验,但我正在尝试编写一些东西,搜索word文档中的特定字符串,用我指定的内容替换它,然后在标签打印机上打印出来 它可以很好地进行第一次更换,但不能进行第二次更换。有人能看看我做错了什么吗 Option Explicit Dim WordApp Dim WordDoc Dim strReadCompName Dim strReadCompSN Set WordApp = CreateObject("Word.Application") WordApp.Visible

我没有太多的VB脚本编写经验,但我正在尝试编写一些东西,搜索word文档中的特定字符串,用我指定的内容替换它,然后在标签打印机上打印出来

它可以很好地进行第一次更换,但不能进行第二次更换。有人能看看我做错了什么吗

Option Explicit

Dim WordApp
Dim WordDoc
Dim strReadCompName
Dim strReadCompSN

Set WordApp = CreateObject("Word.Application")
WordApp.Visible = TRUE

WordApp.Documents.Open("C:\LabelTemplate.doc")
WordApp.Documents("LabelTemplate.doc").Activate

Set WordDoc = WordApp.ActiveDocument

strReadCompName = InputBox("Enter Computer Name", "Name")
strReadCompSN = InputBox("Enter Serial Number", "Serial")

With WordApp.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .MatchWholeWord = TRUE
    .Text = "nametext"
    .Execute ,,,,,,,,,strReadCompName
End With

With WordApp.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .MatchWholeWord = TRUE
    .Text = "serialtext"
    .Execute ,,,,,,,,,strReadCompSN
End With

WordDoc.PrintOut()
WordDoc.Saved = TRUE
WordApp.Quit

解决了我自己的问题哈哈

甲骨文认证专家是对的。我所要做的就是添加另一条语句,将光标移回开头。我刚在开头添加了WordApp.Selection.GoTo 1

Option Explicit
'Procedure to edit word document add name and serial number. 
Sub SearchAndRep(searchTerm, replaceTerm, WordApp)
    WordApp.Selection.GoTo 1
    With WordApp.Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .MatchWholeWord = True
        .Text = searchTerm
        .Execute ,,,,,,,,,replaceTerm
    End With
End Sub

Dim WordApp
Dim WordDoc
Dim strReadCompName
Dim strReadCompSN
Dim objNetwork, WSHPrinters, counter

'Enumerate through printers to find local Zebra printer.
Set objNetwork = CreateObject("WScript.Network")
Set WSHPrinters = objNetwork.EnumPrinterConnections

For counter = 0 To WSHPrinters.Count - 1 Step 2
    If Left(WSHPrinters.Item(counter +1), 5) = "Zebra" Then
        WScript.Echo(WSHPrinters.Item(counter +1))
        objNetwork.SetDefaultPrinter(WSHPrinters.Item(counter +1))
    End If
Next

'Create a Microsoft Word Object and make it invisible. 
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = FALSE

'Open LabelTemplate.doc for editing. 
Set WordDoc = WordApp.Documents.Open("C:\LabelTemplate.doc")

'Read in name and serial number to print on label. 
strReadCompName = InputBox("Enter Computer Name", "Name")
strReadCompSN = InputBox("Enter Serial Number", "Serial")

'Procedures to edit the Word Document to add name and serial number. 
SearchAndRep "nametext", strReadCompName, WordApp
SearchAndRep "serialtext", strReadCompSN, WordApp

'Print out the label. 
'WordApp.PrintOut()

'Set the default printer back to what it was before. 
'Still have to do this. 
objPrinter.SetDefaultPrinter "\\******\**********"
WordDoc.Saved = TRUE
WordDoc.Close
WordApp.Quit

解决了我自己的问题哈哈

甲骨文认证专家是对的。我所要做的就是添加另一条语句,将光标移回开头。我刚在开头添加了WordApp.Selection.GoTo 1

Option Explicit
'Procedure to edit word document add name and serial number. 
Sub SearchAndRep(searchTerm, replaceTerm, WordApp)
    WordApp.Selection.GoTo 1
    With WordApp.Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .MatchWholeWord = True
        .Text = searchTerm
        .Execute ,,,,,,,,,replaceTerm
    End With
End Sub

Dim WordApp
Dim WordDoc
Dim strReadCompName
Dim strReadCompSN
Dim objNetwork, WSHPrinters, counter

'Enumerate through printers to find local Zebra printer.
Set objNetwork = CreateObject("WScript.Network")
Set WSHPrinters = objNetwork.EnumPrinterConnections

For counter = 0 To WSHPrinters.Count - 1 Step 2
    If Left(WSHPrinters.Item(counter +1), 5) = "Zebra" Then
        WScript.Echo(WSHPrinters.Item(counter +1))
        objNetwork.SetDefaultPrinter(WSHPrinters.Item(counter +1))
    End If
Next

'Create a Microsoft Word Object and make it invisible. 
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = FALSE

'Open LabelTemplate.doc for editing. 
Set WordDoc = WordApp.Documents.Open("C:\LabelTemplate.doc")

'Read in name and serial number to print on label. 
strReadCompName = InputBox("Enter Computer Name", "Name")
strReadCompSN = InputBox("Enter Serial Number", "Serial")

'Procedures to edit the Word Document to add name and serial number. 
SearchAndRep "nametext", strReadCompName, WordApp
SearchAndRep "serialtext", strReadCompSN, WordApp

'Print out the label. 
'WordApp.PrintOut()

'Set the default printer back to what it was before. 
'Still have to do this. 
objPrinter.SetDefaultPrinter "\\******\**********"
WordDoc.Saved = TRUE
WordDoc.Close
WordApp.Quit

不熟悉脚本,但在VB中,您可以将替换命令组合在一起。我也有同样的问题,当分组时它解决了这个问题。可能将它们都添加到同一个With,End With block文档中的
“serialtext”
是否在
“nametext”
之后?搜索可能是从上次匹配开始的。此外,如果查找成功,Word是否会选择查找到的文本?如果是这样,第二次搜索可能只在选定的文本中搜索,而不是整个文档。是的,它确实在“nametext”之后。如果是这样,我如何“取消突出显示”文本并将光标设置回文件的开头,以便我可以从那里再次搜索?@harper89,我尝试将它们分组到同一With语句中,但这也不起作用。它仍然没有找到/替换“serialtext”解决了我自己的问题。甲骨文认证专家是对的。我刚刚将WordApp.Selection.GoTo 1添加到子语句的开头。感谢您的建议:)不要熟悉脚本,但在VB中,您可以将替换命令分组在一起。我也有同样的问题,当分组时它解决了这个问题。可能将它们都添加到同一个With,End With block文档中的
“serialtext”
是否在
“nametext”
之后?搜索可能是从上次匹配开始的。此外,如果查找成功,Word是否会选择查找到的文本?如果是这样,第二次搜索可能只在选定的文本中搜索,而不是整个文档。是的,它确实在“nametext”之后。如果是这样,我如何“取消突出显示”文本并将光标设置回文件的开头,以便我可以从那里再次搜索?@harper89,我尝试将它们分组到同一With语句中,但这也不起作用。它仍然没有找到/替换“serialtext”解决了我自己的问题。甲骨文认证专家是对的。我刚刚将WordApp.Selection.GoTo 1添加到子语句的开头。谢谢你的建议:)