ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1206|回复: 21

[求助] 统一设置文档上百个表格边框等格式,出现运行时间近十分钟现象,是语句的问题吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-28 09:30 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我的一个word文档内有280多个表格,用vba编写统一设置边框线与行高等格式,运行是成功了,但发现运行时间超过5分钟,不知是什么原因?如果不是代码原因,可能是其他什么原因?。我编写的代码如下:


Private Sub CommandButton9_Click()
'表格线设置
'包括设置表格框线,表格行距固定值0.63厘米
Dim myTable As Table
Application.ScreenUpdating = False
MsgBox "注意事项:" & Chr(13) & Chr(13) & "1、程序运行发现近十分钟,请耐心等待;" _
& Chr(13) & Chr(13) & "2、可以考虑用其他方式解决设置表格线,如表格样式;" & Chr(13) & Chr(13) & "3、或者采用全选中表格,再通过表格属性来设置。"
For Each myTable In ActiveDocument.Tables '循环当前文档中各个表格
       With myTable
       .Borders.InsideLineStyle = wdLineStyleDot 'Border边框。内框线,虚线
       .Borders.InsideLineWidth = wdLineWidth050pt '0.5磅线,
       .Borders.OutsideLineStyle = wdLineStyleSingle '外框线,实线
       .Borders.OutsideLineWidth = wdLineWidth150pt '1.5磅线条
      
       .Borders(wdBorderLeft).LineStyle = wdLineStyleNone '左框线无
       .Borders(wdBorderRight).LineStyle = wdLineStyleNone '右框线无
      
       '单元格的行距,固定值,取0.63厘米
       .Rows.HeightRule = wdRowHeightExactly
       .Rows.Height = CentimetersToPoints(0.63)
     
       '单元格边距设置
       .TopPadding = CentimetersToPoints(0)
       .BottomPadding = CentimetersToPoints(0)
       .LeftPadding = CentimetersToPoints(0) '单元格内的内容边距设置,原默认值为0.19,即左缩进量。
       .RightPadding = CentimetersToPoints(0) '单元格内的内容边距设置,原默认值为0.19,即右缩进量。
       .Spacing = 0 '单元格与单元格之间的边距,相当于表格线为双线,双线的间距。
       End With
Next myTable
Application.ScreenUpdating = True
MsgBox "运行结束"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-1-28 13:43 | 显示全部楼层
* 楼主,请将代码复制到空白文档,全选,剪切,再粘贴到 VBE 中,以防乱码!
* 打开你的文档,执行本宏,因表格太多,请耐心等待,直到出现“处理完毕!”字样。
  1. Sub a_TableSetup()
  2. '表格设置
  3.     Dim t As Table, l!
  4.    
  5.     l = Timer
  6.     ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit '页宽/避免刷新
  7.    
  8.     For Each t In ActiveDocument.Tables '循环当前文档中各个表格
  9.         With t
  10.             With .Rows
  11.                 .WrapAroundText = False '取消环绕
  12.                 .Alignment = wdAlignRowCenter '居中
  13.                 .HeightRule = wdRowHeightExactly '固定值
  14.                 .Height = CentimetersToPoints(0.63) '行高0.63厘米
  15.             End With
  16.             
  17.             With .Borders '边框线
  18.                 .InsideLineStyle = wdLineStyleDot '内框线/虚线
  19.                 .InsideLineWidth = wdLineWidth050pt '0.5磅
  20.                 .OutsideLineStyle = wdLineStyleSingle '外框线/实线
  21.                 .OutsideLineWidth = wdLineWidth150pt '1.5磅
  22.             End With
  23.             .Borders(wdBorderLeft).LineStyle = wdLineStyleNone '左框线/无
  24.             .Borders(wdBorderRight).LineStyle = wdLineStyleNone '右框线/无
  25.             
  26.             '单元格边距
  27.             .TopPadding = CentimetersToPoints(0)
  28.             .BottomPadding = CentimetersToPoints(0)
  29.             .LeftPadding = CentimetersToPoints(0) '单元格内的内容边距设置,原默认值为0.19,即左缩进量。
  30.             .RightPadding = CentimetersToPoints(0) '单元格内的内容边距设置,原默认值为0.19,即右缩进量。
  31.             .Spacing = 0 '单元格与单元格之间的边距,相当于表格线为双线,双线的间距。
  32.         End With
  33.     Next
  34.    
  35.     Selection.HomeKey 6
  36.     MsgBox "处理完毕!用时 " & Timer - l & " 秒!", 0 + 48
  37. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-1-28 13:44 来自手机 | 显示全部楼层
时间不算长,我处理一个文档的格式,长的就需要二十分钟以上,甚至超过半个小时。

TA的精华主题

TA的得分主题

发表于 2024-1-28 14:00 来自手机 | 显示全部楼层
280多个表格

不能用样式吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-28 15:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zpy2 发表于 2024-1-28 14:00
280多个表格

不能用样式吗?

还有行高的设置,于是想用vba方式一次性解决。语句倒是可用,就是时间过长。不是原因是什么?

TA的精华主题

TA的得分主题

发表于 2024-1-28 15:12 来自手机 | 显示全部楼层
点点星火 发表于 2024-1-28 15:11
还有行高的设置,于是想用vba方式一次性解决。语句倒是可用,就是时间过长。不是原因是什么?

感觉是循环语句执行太多,单文档还好,多个文件的确是要考虑时间

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-29 09:21 | 显示全部楼层
413191246se 发表于 2024-1-28 13:43
* 楼主,请将代码复制到空白文档,全选,剪切,再粘贴到 VBE 中,以防乱码!
* 打开你的文档,执行本宏, ...

时间长的问题难解决。用了该代码,反复执行了几次,还是时间长的问题不容易解决。不过仍要感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-29 09:50 | 显示全部楼层
非常想了解该代码时间长的原因是什么?是否是VBA的固有局限吗?另外如用表格样式,样式不包含设置行高。在采用“全选中文档所有表格”的vba代码后,然后手动操作表格属性设置时,则时间非常短,所以很奇怪为什么自已用代码则时间长?

TA的精华主题

TA的得分主题

发表于 2024-1-29 10:06 | 显示全部楼层
我在电脑试了一下:18个表格
image.png


运行后:0.129秒
image.png
image.png


TA的精华主题

TA的得分主题

发表于 2024-1-29 10:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
处理210个表格:3秒
可能是我的表格内容太少,也可能是WPS运行比Word得快

image.png
image.png


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 15:34 , Processed in 0.051212 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表