5

我正在尝试为 Outlook 编写一个宏(从未编写过宏或 VBA),它将删除我选择的文本前后的空格。

这是我从我发现的例子中拼凑出来的:

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

在我运行代码之前,这是我在行和段落间距下看到的:

删除间距

这是我运行宏后看到的内容:

添加间距

不幸的是,除此之外,电子邮件正文没有明显变化。


每个请求的文本屏幕截图:

在此处输入图像描述

4

3 回答 3

2

在设置段落格式之前尝试使用“Selection.WholeStory”。它对我有用。

于 2014-08-27T18:32:52.303 回答
2

我也面临同样的问题。运行宏时,它似乎确实更新了值(之前/之后的空格为 0),但不会将设置应用于所选文本。

但随后添加 SpaceBeforeAuto = False 工作......

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    
于 2015-06-19T04:36:02.740 回答
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

如果这不起作用,请告诉我,我们可以对其进行迭代。

于 2013-03-20T20:26:11.817 回答