2011-05-25 185 views
1

我对VB脚本没有太多的经验,但我正在尝试写一些将在word文档中搜索特定字符串的内容,将其替换为我指定的任何内容然后在标签打印机上打印出来。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 
+0

不熟悉脚本,但在VB中,您可以将替换命令组合在一起。我遇到了同样的问题,分组时解决了问题。也许把它们加到相同的地方,End With Block – sealz 2011-05-25 18:33:33

+0

''serialtext“'在文档中的''nametext''之后?这可能是搜索从最后一场比赛开始。另外,当找到成功不Word选择找到的文本?如果是这样,则第二次搜索可能仅在所选文本内搜索而不是整个文档。 – 2011-05-25 19:39:38

+0

是的,它确实出现在“nametext”之后。如果是这样的话,我将如何“解除”文本并将光标放回到文件的开头,以便我可以再次从那里搜索? – Cuthbert 2011-05-25 19:47:55

回答

4

解决我自己的问题,哈哈

Oracle认证专家是正确的。我只需添加另一个语句即可将光标移回开头。我刚刚添加了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