我有一个文件,有4个标签。1厘米、5厘米、9厘米和13厘米。
如图所示,有的段落有4个制表符,有的段落有2个制表符(1cm和9cm)或1个制表符(1cm)。有的段落没有任何停顿(如问题1,2,3),有的段落有2个停顿(1cm和9cm)或1个停顿(1cm)。
我想写一个VBA,它可以改变当前所有的制表符停顿,但不会在2停和1停的段落中增加任何额外的停顿。
应该是这样的。
*find all 1cm stops and change into 1.5cm stop
find all 9cm stops and change into 9.5cm stop
and so on.*
我试着录下一个宏来做这个任务,然后把代码写出来 但还是没能让它工作。
你可以使用以下VBA Word代码
Private Sub ReLocateTabStop(nFindPos As Single, nReplacePos As Single)
Dim oParagraph As Word.Paragraph
Dim oTabStop As Word.TabStop
For Each oParagraph In ActiveDocument.Paragraphs
For Each oTabStop In oParagraph.TabStops
If Abs(oTabStop.Position - Application.CentimetersToPoints(nFindPos)) < 0.1 Then
oTabStop.Position = Application.CentimetersToPoints(nReplacePos)
End If
Next
Next
End Sub
此例程(子)在所有段落中搜索一个具有特定位置的标签。
当它被找到时,位置将被改变。
小贴士。
我使用 Application.CentimetersToPoints()
转换 Centimeters
在 Decimal
这样我就可以用 Points
作为单位。
我用 Abs()
和 Round()
职能,因为 Position
在 TabStops
例子:TabStop设置为2厘米,位置包含56.7点。
TabStop被设置为2厘米,位置包含56.7点。但是Application.CentimetersToPoints(2#)返回......。56.69291
我使用以下代码进行测试
Public Sub TestReLocateTabStop()
Call ReLocateTabStop(1#, 1.5)
Call ReLocateTabStop(9#, 9.5)
End Sub
该 #
对于整数,会自动添加字符。
我已经测试了我写的东西,它的工作。