2017-04-22 223 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