我正在处理几个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替换为选择。
答案 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)
TypeText
是Selection
对象的一种方法。由于您未指定对象,因此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
可能有效,因此也无法对其任何属性做出有根据的猜测。如果没有准确了解标签在文档中的位置,那么可以做出的唯一决定就是执行它还是无条件地替换它。