Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Word VBA技术:快速调整表格大小以适应页面宽度

Word VBA技术:快速调整表格大小以适应页面宽度

作者头像
fanjy
发布于 2023-02-24 12:45:30
发布于 2023-02-24 12:45:30
2.1K00
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

标签:Word VBA

有时候,文档中的表格有大有小且并不一定与页面同宽,或者页面宽度调整之后,表格仍保持原样。如果我们想将表格的大小调整为与页面宽度相同,并且保持各列单元格中原有的相对列宽,那么可以使用VBA来解决。

代码清单如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub AdjustTableSizeFitPage()
 Dim objTable As Table
 Dim objRange As Range
 Dim objRow As Row
 Dim objCell As Cell
 Dim sglUsableWidth As Single
 Dim sglTableWidth As Single
 Dim lngCellNum As Long

 If Selection.Tables.Count = 0 Then
   MsgBox "请将光标置于表格内并重试.",vbInformation
   Exit Sub
 End If

 Application.ScreenUpdating = False
 System.Cursor = wdCursorWait

 Set objRange = Selection.Range
 Set objTable = Selection.Tables(1)

 objTable.Rows.SetLeftIndent LeftIndent:=0,RulerStyle:=wdAdjustNone

 '计算页面已使用的宽度
 With ActiveDocument.PageSetup
   sglUsableWidth = .PageWidth - .LeftMargin - .RightMargin
 End With

 '计算顶部行宽度
 '假设其与表格宽度相同

 On Error Resume Next

 For lngCellNum = 1 To objTable.Rows(1).Cells.Count
   If Err = 5991 Then
      MsgBox "程序不会处理有垂直合并单元格的表格.",vbInformation
      GoTo CleanUp
   ElseIf Err Then
      MsgBox Err.Description,vbInformation
      GoTo CleanUp
   End If

   sglTableWidth = sglTableWidth + objTable.Rows(1).Cells(lngCellNum).Width
 Next lngCellNum

 On Error GoTo 0

 '计算并分配每行中每个单元格的宽度,
 '使单元格宽度相对于表宽度保持不变.
 '对每一行单独执行,而不是一次对一列执行,
 '否则,如果任何行包含水平合并的单元格,程序将无法工作
 For Each objRow In objTable.Rows
   For Each objCell In objRow.Cells
     objCell.Width = (objCell.Width) * (sglUsableWidth / sglTableWidth)
   Next objCell
 Next objRow

 objRange.Select

CleanUp:
 Set objTable = Nothing
 Set objRange = Nothing
 Set objRow = Nothing
 Set objCell = Nothing
 sglUsableWidth = 0
 sglTableWidth = 0
 lngCellNum = 0

 System.Cursor = wdCursorNormal
 Application.ScreenUpdating = True
End Sub
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Word VBA技术:提取文档中的所有批注并在新文档中放置其详细信息
有时候,文档中可能有各种各样的批注,如果批注很多,要逐一查看,可能会遗漏或者需要上上下下翻动文档。如果我们将所有批注提取出来,放置在一个新文档中,这样就便于查阅了。
fanjy
2023/02/24
1.7K0
Word VBA技术:提取文档中的所有批注并在新文档中放置其详细信息
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2.3K0
Word VBA实战技巧:快速删除表格中所有空行
有时候,表格中有很多空行,如果觉得一行一行操作很麻烦,那么可以使用VBA来帮你完成。代码如下:
fanjy
2023/02/24
1.5K0
Word VBA技术:删除表格中内容相同的重复行
上面的代码区分大小写,即第一列中内容相同但大小写不同不会被删除。下面的代码操作时不区分大小写:
fanjy
2023/02/24
5K0
Excel应用实践10:合并多个工作簿中的数据
我有超过50个具有相同格式的Excel文件,它们的列标题相同,并且都放置在同一文件夹,有什么快速的方法将它们合并到一个单独的Excel文件的一个工作表中?
fanjy
2019/07/19
2.4K0
VBA程序:查找并列出指定工作表中所有合并单元格的地址
运行下面的VBA过程,将列出当前工作表中所有合并单元格的地址。程序会新建一个工作表并重命名,然后在其中输入所有合并单元格的地址。
fanjy
2024/03/11
3610
VBA程序:查找并列出指定工作表中所有合并单元格的地址
VBA二维表转一维表
工作中经常会碰到这种情况,外部收集来的资料,表格制作者为了排版好看,做成转换前的格式,这种格式看起来方便,但是做数据处理是非常不方便的,需要进行转换后进行数据处理。
xyj
2020/07/28
1.8K0
VBA二维表转一维表
Word VBA技术:一组操作文档表格的代码
使用Selection.SetRange语句来选择表格内指定的单元格区域。示例代码:
fanjy
2023/02/24
1.2K0
Word VBA技术:判断表格中的单元格是否为空
可以使用VBA代码来判断文档中表格内的单元格是否为空。下面的代码检查所选文档内容中表格内的单元格,并给出空单元格的信息。
fanjy
2023/02/16
4K0
Word VBA技术:删除表格中内容相同的重复行(加强版)
在《Word VBA技术:删除表格中内容相同的重复行》中,我们演示了如何使用代码删除已排序表中第1列内容相同的行。然而,如果表格中第1列没有排序,那么如何删除这列中内容相同的行呢?
fanjy
2023/02/24
2.8K0
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46.8K0
Excel VBA编程
一小时搞定 简单VBA编程 Excel宏编程快速扫盲
Excel宏编程可以快速完成批量表格操作:复制粘贴、数据过滤等,宏代码基于VB语言实现,有基础的编程经验就能快速阅读。下面是我的学习笔记。
全栈程序员站长
2022/08/10
1.9K0
Word VBA技术:统计文档中每个字母字符的数量
在某些情况下,可能想知道在文档中每个字母有多少个,即字母a-Z中每个有多少,或者可能想找出特定文本中最常用的字母。
fanjy
2023/02/24
2.4K0
VBA用字典批量查找社保数据
【问题】我们知道社保导出的数据是很多合并的单元格,如果要查找一个数据都要找很久,如果数量多了更多费时,基于以上问题,特用VBA设计一个批量查找的程序。
哆哆Excel
2022/10/25
7500
VBA用字典批量查找社保数据
VBA实用小程序71:统计工作簿中的字符数
引言:这是在ozgrid.com论坛中看到的一个VBA程序,特辑录于此,供有兴趣的朋友学习参考。
fanjy
2021/04/21
1.2K0
VBA实用小程序71:统计工作簿中的字符数
VBA程序:在Excel中生成奇数阶魔方
大家都知道魔方,因为经常会遇到它。魔方是正方形网格,它的最小尺寸为3×3。魔方中的整数只出现一次,所有单元格都填充数字。水平行、垂直列以及主对角线和次对角线的数字加起之和都相同。这个数字和就叫做魔法常数。
fanjy
2022/06/04
1.1K0
VBA程序:在Excel中生成奇数阶魔方
【VBA】在excel中检索文本
虽然在excel文件中检索的vba代码不知道写了多少遍了,每次需要的时候,都是从网上找,然后写。实在是低效的做法。从网上找了一段代码,放在此处,以后需要的时候可以随手拿来。
东风压倒西风
2022/09/06
3.3K0
VBA专题06-2:利用Excel中的数据自动化构建Word文档—熟悉Word VBA
VBA是一种通用编程语言,适用于任何内置有VBA的应用程序,因此Word VBA与Excel VBA的语法一样,只是处理的对象模型不同。下面,我们通过一些示例语句及其作用描述来熟悉Word VBA。(注:这些语句来源于作者早期发表的VBA语句集,长期关注作者的朋友可能会有印象)
fanjy
2019/10/09
2.9K0
VBA专题06-2:利用Excel中的数据自动化构建Word文档—熟悉Word VBA
[网友投稿] Excel数据批量写入Word
前言:这是 VBA说 微信公众号借助我的这个平台给大家分享的一篇关于Excel与Word交互的文章,希望对大家有帮助。在这里,欢迎大家投稿,与更多的人分享有用的知识。
fanjy
2019/10/09
3.6K0
[网友投稿] Excel数据批量写入Word
Excel VBA 自动填充空白并合并相同值的解决方案
在Excel中经常会遇到这样的数据处理需求:一列数据中存在多个空白单元格,需要用其上方最近的非空值填充,然后将相同的连续值合并成一个单元格。比如:
洛秋_
2024/12/31
3630
推荐阅读
相关推荐
Word VBA技术:提取文档中的所有批注并在新文档中放置其详细信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验