2013-03-20 258 views
4

我正在嘗試爲Outlook編寫一個宏(從未寫入過宏或VBA),這將刪除我選擇的文本之前和之後的空格。在Outlook中刪除前後空格

這是我從例子拼湊起來的,我已經發現:

Sub FixParagraphSpacing() 
    Dim objOL As Application 
    Dim objDoc As Object 
    Dim objSel As Object 

    Set objOL = Application 
    Set objDoc = objOL.ActiveInspector.WordEditor 
    Set objSel = objDoc.Windows(1).Selection 

    objSel.ParagraphFormat.SpaceBefore = 0 
    objSel.ParagraphFormat.SpaceAfter = 0 

    Set objOL = Nothing 
    Set objDoc = Nothing 
    Set objSel = Nothing 
End Sub 

的問題是,代碼執行和幾乎沒有任何反應。電子郵件的正文不受影響,但我無法手動刪除手動之前和之後的空格,因爲Outlook認爲它已完成。

我在這裏錯過了什麼?

更新

這裏是基於@ KevinPope的回答我更新的代碼,:

Sub FixParagraphSpacing() 
    Dim objOL As Application 
    Dim sel As Object 

    Set objOL = Application 
    Set sel = objOL.ActiveInspector().WordEditor.Application.Selection 

    For Each para In sel.Paragraphs 
     para.SpaceBefore = 0 
     para.SpaceAfter = 0 
    Next para 
End Sub 

在我運行的代碼,這就是我在線條和段落間距看到:

Remove Spacing

這就是我在運行宏後看到的內容:

Add Spacing

不幸的是,除此之外,沒有明顯的變化,在電子郵件正文中提出。


每請求文本的截圖:

enter image description here

+0

這是間距在空間(或標籤)字符?或者如同文本行間的距離(行高)? – 2013-03-20 19:46:02

+0

@KevinPope,行高。 – 2013-03-20 20:01:57

+0

謝謝你補充一點,詹姆斯。要確認,文本之間沒有空行(即,只能輸入已輸入的行)。看起來就像雙倍間距,但是從線和段落間距選項卡顯示單個間距。你有任何其他加載項或宏會強制執行此行爲嗎? – 2013-03-25 20:02:02

回答

1

像這樣的事情選定段落前後應理清行距:

Sub Test() 
    Dim objOL As Application 
    Dim sel As Object 

    Set objOL = Application 
    Set sel = objOL.ActiveInspector().WordEditor.Application.Selection 

    sel.Paragraphs(1).SpaceBefore = 0 
    sel.Paragraphs(1).SpaceAfter = 0 
End Sub 

讓我知道如果這不起作用,我們可以迭代它。

+0

我收到一個錯誤 - 「編譯錯誤:用戶定義類型未定義」。它在第一行。 – 2013-03-21 10:54:05

+0

更新 - 我正在使用早期綁定(我有Word對象模型引用明確地添加到我的代碼中的其他地方),所以我已經更改爲後期綁定。或者,您應該能夠將代碼從「ParagraphFormat」更新爲「Paragraphs(1)」以使其工作。此解決方案不處理選擇多個段落的情況。 – 2013-03-21 16:27:57

+0

如果選擇多個段落,是否很難遍歷段落?如果這是不可能的,那麼簡單地使用內建功能比單獨選擇每個段落的點擊次數要少,然後單擊宏按鈕。 – 2013-03-21 20:12:35

1

在設置段落格式之前,請使用「Selection.WholeStory」。它爲我工作。

2

我也面臨同樣的問題。 運行宏時,它似乎更新值(前/後的空格爲0),但不會將設置應用於所選文本。

但後來加入SpaceBeforeAuto =假工作...

Sub FixParagraphSpacing() 
    Dim objOL As Application 
    Dim objDoc As Object 
    Dim objSel As Object 

    Set objOL = Application 
    Set objDoc = objOL.ActiveInspector.WordEditor 
    Set objSel = objDoc.Windows(1).Selection 

    objSel.ParagraphFormat.SpaceBefore = 0 
    objSel.ParagraphFormat.SpaceBeforeAuto = False 
    objSel.ParagraphFormat.SpaceAfter = 0 
    objSel.ParagraphFormat.SpaceAfterAuto = False 

    Set objOL = Nothing 
    Set objDoc = Nothing 
    Set objSel = Nothing 
End Sub