2017-04-22 68 views
5

我正在處理幾個Word文檔,這些文檔需要我將製表符轉換或替換爲逗號。文字可能如下所示:MS-Word VBA宏:轉換/替換製表位爲逗號

Hello........world (dot) 
Hello------------World (dash) 
Hello____World (line) 
Hello   world (none) 

Word爲製表位提供了4種選擇:點,短劃線,行和無。不過,我想用逗號代替前三種領導類型。最後一個不會像這樣更改:

Hello,world 
Hello,World 
Hello,World 
Hello   world 

在Word中查找和替換選項卡功能不起作用。所以很多谷歌搜索後,我試圖「複製和粘貼」從各種來源成一個簡單的宏來完成這個任務(我完全陌生的Word宏和VBA):

Sub Macro1() 
    For Each para In ActiveDocument.Content.Paragraphs 
     For Each aTab In para.TabStops 
      If aTab.Leader = wdTabLeaderDots _ 
      Or aTab.Leader = wdTabLeaderDashes _ 
      Or aTab.Leader = wdTabLeaderLines Then 
       TypeText = "," 
       aTab.Clear 
      End If 
     Next aTab 
    Next para 
End Sub 

參考:https://msdn.microsoft.com/en-us/library/office/ff192806.aspx

單詞表示行中有錯誤:TypeText =「,」,我不知道如何更正它。

你能幫我解決這個問題嗎?

在此先感謝。

P/S:Slai爲此問題提供瞭解決方案。我剛纔複製的第2代碼成爲一個宏,修改一點點,使其工作:

Sub Macro1() 
    Dim p As Paragraph, t As TabStop 

    For Each p In ActiveDocument.Paragraphs 
     For Each t In p.TabStops 
      If t.Leader Then p.Range.Find.Execute "^t", , , , , , , , , ",", wdReplaceAll 
     Next 
    Next 
End Sub 

如果你需要宏只在您的選擇段工作,請更換進的ActiveDocument來選擇。

+0

也許查找和替換格式http://www.officearticles.com/word/find_and_replace_styles_in_microsoft_word.htm – Slai

+0

@Slai我已經嘗試在Word中查找和替換功能,但它在這種情況下不起作用。 – doquan0

回答

3

查找和替換格式,似乎只有在製表位位置是已知的工作:

With ThisDocument.Range.Find 
    For L = wdTabLeaderDots To wdTabLeaderLines 
     .ParagraphFormat.TabStops.Add Position:=36, Leader:=L 
     .Execute "^t", , , , , , , , , ",", wdReplaceAll 
    Next 
End With 

替代可以檢查每個段落(BTW WdTabLeader has 6 values)的製表位:

Dim p As Paragraph, t As TabStop 

For Each p In ThisDocument.Paragraphs 
    For Each t In p.TabStops 
     If t.Leader Then p.Range.Find.Execute "^t", , , , , , , , , ",", wdReplaceAll 
    Next 
Next 
+0

我已將您的代碼複製到一個新的宏,運行它,但它沒有工作。我不明白代碼中「^ t」,,,,,,,,「,」部分的含義。 你能幫我一個更詳細的宏嗎?我對Word宏或VBA完全陌生。我剛剛學了幾天VBA或編程幾天(僅基於Google搜索)來解決我的文檔中的一些問題。提前致謝。 – doquan0

+0

@ doquan0對不起,忘了回覆。你的意思是什麼沒有工作..什麼都沒有發生?您可以嘗試用'ActiveDocument'替換'ThisDocument'。 '「^ t」是Tab和「」的特殊字符,''是第10個參數'ReplaceWith' https://msdn.microsoft.com/en-us/library/office/ff193977.aspx – Slai

+0

第二個代碼Dim p As Paragraph ... Next Next完美地工作。萬分感謝。正如你所說,我需要將代碼中的ThisDocument替換爲ActiveDocument以使其工作。我的賞金已經過期,所以我不能給你50分的聲​​望。不過,我已將此標記爲接受的答案,以向我表示感謝。 – doquan0

1

TypeTextSelection對象的一種方法。由於您未指定對象,因此代碼中的TypeText失敗。由於您也不使用Selection對象,所以根本不能使用TypeText。我建議像這樣的結構。

With Para.Range 
    .Collapse wdCollapseEnd 
    .Move wdCharacter, -1 
    .Text = "," 
End With 

該代碼會在段落末尾添加一個逗號,這會給您帶來您想要逗號的問題。你想要它在與TabStop完全不同的動物標籤的地方。一個選項卡是一個Chr(9),您可以輕鬆替換它。但是,如何解釋Chr(9)將取決於爲其設置的TabStop的類型,這取決於Chr(9)在頁面上的哪個位置生效。你不能通過檢查文字來判斷。因此,您無法通過查看文檔的文本來區分TabStops的類型。

需要明確的是:這是不可能用逗號替換TabStop因爲TabStop不存在。可以用逗號替換標籤。

不可能確定某個特定標籤的標籤而不知道其在文本中的確切位置。例如:如果TabStop存在於100pts從左邊距標籤變爲有效的從左邊距結束100pts的空間,讓我們說50pts,沒有其他TabStop集從50pts和100pts之間的區域左邊距然後該文檔中的選項卡可以與設置爲100pts的其TabStop相關聯,其領導者確定,並替換選項卡(而不是TabStop !!!)制定或省略。

瞭解了文檔中選項卡的準確位置,無法在該文檔與該段落中的任何製表符之間創建關聯。由於不可能確定哪個TabStop可能變得有效,所以也不可能對其任何屬性進行有根據的猜測。如果沒有對標籤在文檔中的位置的精確瞭解,唯一可以做出的決定是無論是執行還是替換。

+0

我在aTab.Clear行後添加了你的代碼。它在段落的最後一個字符之前添加一個逗號,如Hello(tab)Worl,d。我注意到我的代碼中的aTab.Clear行創建了一個正常的選項卡。你能調整代碼,以便它在新創建的常規選項卡之前或之後添加逗號,如Hello(tab),World? – doquan0

+0

選項卡是與任何其他字符相同的字符。您可以搜索它並將其替換爲其他任何文件。爲此目的,不會使用像我上面發佈的代碼。這只是查找和替換。請在製表符和製表位之間清楚區分。您可以根據需要在段落中設置多個製表位,但除非文本中有製表符,否則它們都不會生效。文本中的選項卡激活哪個製表位取決於選項卡放置在一行中的哪個位置。 – Variatus

+0

感謝您的評論。我瞭解製表符和製表符之間的區別。正如你所說,在我設置了製表符後,我需要按下鍵盤上的「Tab」按鈕來激活它。我之前評論中的「正常」標籤是aTab.Clear刪除所有制表位並重置所有制表符的格式。沒有點,沒有短劃線,甚至所有選項卡的空間都重置爲Word的默認值(0.5英寸或36點)。 – doquan0