2013-10-23 52 views
0

我有一個spec文檔,其中我寫了一個VBA宏,爲它自己的兩個視圖之間「切換」。有寫出來像邏輯語句:VBA有條件的查找和替換MS Word

如果問題1 = 2,然後跳到問題3

客戶回顧與問題編號的邏輯和程序員通過與變量名邏輯讀取。

如果intro1 = 2,然後跳到HOME1

我創建對應於彼此以執行兩個陣列一個查找替換所以可以來回切換顯示問題編號和變量之間。

當然,一個全面的解決方案是不容易的。當然,如果文檔中有任何說明我希望能夠「免除」被發現和替換。

因此,現在我想我需要而不是做一個查找和全部替換,我需要做「查找下一個」,並評估什麼是發現和基於字體或字體大小,以確定它應該是更換。在執行「查找」時可以訪問的VBA中是否存在返回的對象,以便檢查屬性?基本上我能夠區分字體大小以確定它是否應該被替換。

回答

1

可能有很多方法可以做到這一點。就代碼而言,如果將範圍設置爲ActiveDocument.Range,然後使用該範圍的.Find對象,則Word應該連續返回「覆蓋」找到的文本的Range對象。根據您對文檔內容的多少控制,您可以輕鬆標記要找到的文本的一種方法是創建一種字符樣式並將其應用於所有這些文本。然後你可以這樣做:

Sub multipleFIndsUsingAStyle() 
Dim rng As Range 
Set rng = ActiveDocument.Range 
With rng.Find 
    .Text = "" 
    ' Create a style called findStyle and 
    ' apply it to the texts you want to find 
    .Style = "findStyle" 
    .Forward = True 
    .Execute 
    While .Found 
    Debug.Print rng.Start, rng.End 
    .Execute 
    Wend 
End With 
Set rng = Nothing 
End Sub 

有幾種完全不同的方法可以使用。一種方式是使用字段插入兩個替代文本,如下所示(有幾種方法可以做到這一點):

使用VBA創建名爲q1,v1,q2,v2等文檔變量,其值爲Q.1,intro1,Q.3,和home1等喜歡這張

隨着ActiveDocument.Variables .Item( 「Q1」)。值= 「Q.1」 .Item( 「V1」)。值=「Q3」 .Item(「v2」)。Value =「home1」 '我們將使用這個名稱來切換名稱 .Item(「q2」)。 「qv」)。Value =「q」 End With

對於每個編號/變量,插入一個嵌套場這樣

{ DOCVARIABLE "{ DOCVARIABLE qv }{ SEQ q }" } 

所有的{}需要是可以在Windows Word中使用CTRL-F9插入特殊字段括號字符)。

然後使用

ActiveDocument.Variables("qv").Value = "q" 
ActiveDocument.Fields.Update 

顯示數字和

ActiveDocument.Variables("qv").Value = "v" 
ActiveDocument.Fields.Update 

顯示名稱。在這種情況下,用戶將能夠看到您可能不需要的域代碼。