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

doq*_*an0 6 ms-word word-vba

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

Hello........world (dot)
Hello------------World (dash)
Hello____World (line)
Hello          world (none)
Run Code Online (Sandbox Code Playgroud)

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

Hello,world
Hello,World
Hello,World
Hello          world
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

参考: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
Run Code Online (Sandbox Code Playgroud)

如果您需要宏仅用于选择中的段落,请将ActiveDocument替换为Selection.

Sla*_*lai 3

查找和替换格式似乎仅在制表位位置已知时才有效:

With ThisDocument.Range.Find
    For L = wdTabLeaderDots To wdTabLeaderLines
        .ParagraphFormat.TabStops.Add Position:=36, Leader:=L
        .Execute "^t", , , , , , , , , ",", wdReplaceAll
    Next
End With
Run Code Online (Sandbox Code Playgroud)

另一种方法是检查每个段落的制表位(顺便说一句,WdTabLeader有 6 个值):

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
Run Code Online (Sandbox Code Playgroud)