p标签的下划线怎么去掉_Word之VBA丨敲空格总对不齐下划线?这段代码帮你搞定信息栏...

不称深度指南,只愿浅度指北 在编辑一些文档中,你肯定会遇到下面的这种情况:

63040bb52203bd90504c9f5a0b99c902.png

需要填写一些姓名专业等信息,尤其是一些档案的封面页。而你也看到了,大部分的文档,都会使用空格+下划线的方式实现。

而使用这种方式的文档,当你在上面填写文字时,上下两行的下划线无法完全对齐,用两个空格太多,一个又太窄,怎样都调整不好:

874e686ff2c93874cea0eeb70448ce99.gif

逼死强迫症!

而正确的做法就是使用表格,然后隐藏边框线:

19d4f2fdec72fa055d408ba8c31608a8.png

这样,无论你如何调整,都不会破坏之前的结构:

7b6f438d45e86aa2c65a858f6d90a893.gif

当然,如果你经常遇到这种问题,就可以录制+修改宏来完成:

12d9866c532ec49f38a48f45e20e762c.gif

但这里有几个小问题:

 获取行列数  文本转表格

首先,我们可以「插入 -表格」中的「文本转表格」功能,通过特定的符号,将文本转化为表格:

92afb5b6f668063d22f360f6588b4874.png

但这里,需要我们录入行列数以及分隔符:

c34b56768926883bbe8832c0481c0c61.png

但可能每次的表格行列数都不同,我们需要根据具体的内容获取。另外,我们可能会多选择了一个空段,这就需要我们在代码中排除啦。

其中的代码逻辑,主要是根据整个选区的制表符个数和段落数,同时用int函数进行取整。

该部分完整代码如下:


'判断几行几列
Dim rng
Dim iCols, iRows

'统计有多少制表符
For Each ichar In Selection.Characters
If ichar.Text = vbTab Then
iCols = iCols + 1
End If
Next

'统计段落标记数目
For Each rng In Selection.Paragraphs
If Len(rng) <> 1 Then '兼容多选部分段落
iRows = iRows + 1
End If
Next

If iRows = 0 Or iCols = 0 Then Exit Sub
iCols = Int(iCols / iRows) '去掉多余选择的空段
 框线及列宽调整  表格格式设置

转换为表格后,我们就需要设置下边框线和各列宽度。

而这里的一个重点是,我们首先需要获取表格,才可以访问其中的单元格。

这在录制的宏中,是用 Selection.Tables(1) 来实现的,而我们其实有更方便的方法,定义一个表格,让其与之前添加的表格等同,也就是:

Dim t
Set t = Selection.ConvertToTable(Separator:=wdSeparateByTabs, NumColumns:=iCols, _
NumRows:=iRows, AutoFitBehavior:=wdAutoFitFixed)

这样,我们就可以定义各列的宽度啦:

'录制中可能会有多条语句,以最后的数值为准    t.Columns(1).SetWidth ColumnWidth:=106.85, RulerStyle:= _wdAdjustNone

另外,在设置最后一列单元格的下划线时,需要每个单元格都设置一次,不能直接选择一列,否则会出现仅应用于整表的最后一行:

ce7ef9b7b19a99b480517eb457424989.png

因此,我们需要在代码部分,使用循环来实现:

t.Cell(1, iCols + 1).Select '1行最后一列
Word.Selection.SelectColumn '选择word的列
For Each oCell In Word.Selection.Cells
With oCell.Borders(wdBorderBottom)
.LineStyle = Options.DefaultBorderLineStyle
.LineWidth = Options.DefaultBorderLineWidth
.Color = Options.DefaultBorderColor
End With
Next
 框线及对齐方式  表格单元格字体段落格式 接下来,我们需要设置每个单元格的段落对齐和清除原有下划线。 通常,我们的第一列单元格是分散对齐的,这样,无论是几个字,都可以整齐排列:

fa87ab406928bcfa0ffc5e142de71fe2.png

PS:为实现仅对文字(不包括冒号)分散对齐,可以将冒号放在单独一列中。 而最后一列,则会使用居中对齐方式。 当然,我们还需要清除原有的下划线,这个是属于字体格式,使用一句代码就可以搞定:
.Range.Font.Underline = wdUnderlineNone '清除原有下划线
另外,表格整体的位置,一般会是居中对齐:
t.Rows.Alignment = wdAlignRowCenter '整体居中
 细节决定产品  一(亿)点点细节 最后,可以增加一点点细节,但这部分就需要你自己来完成了。 1. 去掉选区中的空格,不用再次删除了; 2. 获取第一列中每个单元格的字符数,取最大值,然后据此和字体大小设置列宽; 3. 提示用户警告操作,如在未选取文字时、选取的文字不包含制表符的时候,进行错误提示; …… 参考完整代码:
Sub 自动转换为信息表() '公众号「未央暮城」作者「莫浅北」原创
Dim msg

If MsgBox("请确认已用制表符分隔", vbOKCancel) = vbOK Then

Application.ScreenUpdating = False
'判断几行几列
Dim rng
Dim iCols, iRows

'统计有多少制表符
For Each ichar In Selection.Characters
If ichar.Text = vbTab Then
iCols = iCols + 1
End If
Next

'统计段落标记数目
For Each rng In Selection.Paragraphs
If Len(rng) <> 1 Then '兼容多选部分段落
iRows = iRows + 1
End If
Next

If iRows = 0 Or iCols = 0 Then Exit Sub
iCols = Int(iCols / iRows)

Dim iTable
Set iTable = Selection.ConvertToTable(Separator:=wdSeparateByTabs, NumColumns:=iCols + 1, _
NumRows:=iRows, AutoFitBehavior:=wdAutoFitContent) '根据内容调整表格,但好像不怎么好用

iTable.AutoFitBehavior (wdAutoFitContent) '根据内容自动调整表格

With iTable

'清除全部边框线
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone
.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
.Rows.Alignment = wdAlignRowCenter '整体居中
.Range.Font.Underline = wdUnderlineNone '清除原有下划线

.Cell(1, iCols + 1).Select '1行最后一列
Word.Selection.SelectColumn '选择word的列
For Each oCell In Word.Selection.Cells
With oCell.Borders(wdBorderBottom)
.LineStyle = Options.DefaultBorderLineStyle
.LineWidth = Options.DefaultBorderLineWidth
.Color = Options.DefaultBorderColor
End With
oCell.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
Next

.Cell(1, 1).Select '1行1列
Word.Selection.SelectColumn '选择word的列
Selection.ParagraphFormat.Alignment = wdAlignParagraphDistribute '分散对齐

End With
Application.ScreenUpdating = True
End If

End Sub
最后的叨逼叨 如果对于有一点点帮助,可以评论区踩个jio印再走呀,这样,也更能促进我更文不是? —— THE END ——

9fb8824e9f54505fb51e54b07bcec63d.gif

在看点的早,工作没烦恼 2beeb592a8af72ef3e800abeb6f53cff.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值