2011-05-25 141 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 
相關問題