MS-Word VBA宏:转换/替换制表位到逗号

时间:2017-04-22 16:26:29

标签: ms-word word-vba

我正在处理几个Word文档,这些文档要求我将制表符转换或替换为逗号。文字可能如下所示:

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

Word为制表位提供了4种选择:点,短划线,直线和无。但是,我想只将前3个领导者类型替换为逗号。最后一个不会像这样改变:

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

Word说行中有错误:TypeText =","而且我不知道如何纠正它。

你能帮我解决一下这个宏吗?

提前致谢。

P / S:Slai有一个解决这个问题的方法。我只是将第二个代码复制到一个宏中,稍微修改一下以使其工作:

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替换为选择。

2 个答案:

答案 0 :(得分:3)

查找和替换格式似乎仅在Tab停止位置已知时才起作用:

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

答案 1 :(得分: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,在距左边距50pts到100pts之间的区域内没有设置其他TabStop然后文档中的标签可以与TabStop集关联在100分,其领导确定,并取代制定或省略的标签(不是TabStop !!!)。

了解文档中选项卡的精确位置后,无法在其与段落中的任何制表位之间创建关联。由于无法确定哪个TabStop可能有效,因此也无法对其任何属性做出有根据的猜测。如果没有准确了解标签在文档中的位置,那么可以做出的唯一决定就是执行它还是无条件地替换它。