2012-10-22 40 views
0

我試圖模擬excel「查找和替換」功能,我對此有些懷疑/疑慮。以下是我正在使用的代碼,並使用Excel中的'記錄宏'功能進行記錄。在Excel中的宏搜索/替換中爲現有單元格內容添加額外的雙引號VBA

Selection.Replace What:=":Y", Replacement:="helloWorld", LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
    ReplaceFormat:=False 

在上面的代碼,如果我有東西來取代的helloWorld像這是一個「雞」的代碼會慘遭失敗,因爲「這是一個‘雞’」的局面。要糾正它,我們應該有像「這是一個」「雞」「」

但是,要替換的文本來自同一Excel表單中的單元格。如何爲已避免任何錯誤的文字添加額外的引號。

也是一樣的特殊字符,比如$%^ * &!@#

請幫幫忙!

回答

1

如果替換文本來自另一個單元格的值,我根本不用擔心做字符串轉換。我傾向於將包含替換文本的單元格的.Value屬性傳遞給替換方法的Replacement:=參數。這樣,Excel將在內部處理所有報價和其他字符;你不必擔心它。

事情是這樣的:

Sub ReplaceText() 

On Error Resume Next 
    Err.Clear 

    'Let's say that the replacement text is in A1 
    Selection.Replace What:=":Y", Replacement:=ActiveSheet.Cells(1, 1).Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
    ReplaceFormat:=False 

    'In case it's something like an error in the replacement text cell. 
    'Using quotes or special characters WON'T cause an error. 
    If Err.Number <> 0 Then 
     MsgBox "Replacement failed; error " & Err.Number & vbCrLf & Err.Description 
    End If 

On Error GoTo 0 


End Sub 
+0

感謝您的快速答覆艾倫,一個問題 - 說我要取代的2線款(由空行之間分隔)文字。如果替換單元格具有段落方式的文本,是否會在查找和替換中複製同樣的內容? –

+0

對不起,在你問這是在這裏睡覺的時候。是的,如果您的意思是替換單元格包含您通過在單元格中鍵入line1 [Alt] + [Enter] line2獲得的換行符,它也會處理它。就像我所說的,所有格式化代碼都嵌入在.Value屬性中,並在Excel中處理;您不需要將它們翻譯爲文本以傳入替換參數。唯一一次你會遇到問題是替換單元格包含的東西無法評估爲字符串(例如= 6/0),這就是爲什麼錯誤處理程序會纏繞它。 –

+0

我應該添加...雖然它會爲多行單元格執行正確的查找和替換,但它不會執行的一件事是自動調整替換完成後顯示的單元格的大小額外的「線」。但是,無論如何,這一直是Excel查找和替換的一個問題。如果您認爲這將是一個問題,您可以添加一個Selection.Rows.AutoFit行。 (在If Err.Number塊之後執行,以防止它掩蓋Replace方法中的任何錯誤。) –

相關問題