【发布时间】:2020-11-30 18:55:51
【问题描述】:
如何在 PowerPoint 表格中自动调整列宽或行高?
编辑:我正在使用 PowerPoint 2010,我想要类似的东西:
Sub table_fix()
Dim icol As Integer, irow As Integer, minW As Single, minH As Single
With ActiveWindow.Selection.ShapeRange(1).table
For icol = 1 To .Columns.Count
For irow = 1 To .Rows.Count
With .Cell(irow, icol).Shape.TextFrame
If minW = 0 Then minW = .TextRange.BoundWidth + .MarginLeft + .MarginRight
If minW < .TextRange.BoundWidth + .MarginLeft + .MarginRight Then minW = .TextRange.BoundWidth + .MarginLeft + .MarginRight
End With
Next
.Columns(icol).Width = minW
Next
End With
With ActiveWindow.Selection.ShapeRange(1).table
For irow = 1 To .Rows.Count
For icol = 1 To .Columns.Count
With .Cell(irow, icol).Shape.TextFrame
If minH = 0 Then minH = .TextRange.BoundHeight + .MarginTop + .MarginBottom
If minH < .TextRange.BoundHeight + .MarginTop + .MarginBottom Then minH = .TextRange.BoundHeight + .MarginTop + .MarginBottom
End With
Next
.Rows(irow).Height = minH
Next
End With
End Sub
此代码不会修复所有列宽和所有行高。当列又窄又高时,它会在调整哪些列的大小时出现一些混乱,并且有时会在某些数字上添加随机空格。
我希望我可以模拟“通过双击边框来调整单元格的大小”。我相信我需要对 BoundWidth 和 BoundHeight 进行某种迭代计算,或者 2010 年是否有我最初搜索的功能?
编辑 2:我已拆分代码进行测试:
Sub IT()
Dim icol As Integer, irow As Integer, minW As Single, minH As Single
Call max_it
Call size_it
End Sub
Function max_it()
With ActiveWindow.Selection.ShapeRange(1).table
For icol = 1 To .Columns.Count
.Columns(icol).Width = 1000
Next
End With
End Function
Function size_it()
With ActiveWindow.Selection.ShapeRange(1).table
For icol = 1 To .Columns.Count
For irow = 1 To .Rows.Count
With .Cell(irow, icol).Shape.TextFrame
If minW = 0 Then minW = .TextRange.BoundWidth + .MarginLeft + .MarginRight
If minW < .TextRange.BoundWidth + .MarginLeft + .MarginRight Then minW = .TextRange.BoundWidth + .MarginLeft + .MarginRight
End With
Next
.Columns(icol).Width = minW
minW = 0
If icol < .Columns.Count Then .Columns(icol + 1).Width = 1000
Next
For irow = 1 To .Rows.Count
For icol = 1 To .Columns.Count
With .Cell(irow, icol).Shape.TextFrame
If minH = 0 Then minH = .TextRange.BoundHeight + .MarginTop + .MarginBottom
If minH < .TextRange.BoundHeight + .MarginTop + .MarginBottom Then minH = .TextRange.BoundHeight + .MarginTop + .MarginBottom
End With
Next
.Rows(irow).Height = minH
Next
End With
End Function
当我分别运行 max_it 和 size_it 时,它会执行我想要的操作,但如果我调用 IT 依次运行这两个函数,它会忽略 max_it 部分,因此 size_it 将不会返回如果单元格“又窄又高”,则为正确的BoundWidth。
我可能有一些初学者的错误,例如:VBA 很聪明,并意识到第一个 max_it 更改将由 size_it 重做,因此忽略了代码 (?)
【问题讨论】:
-
“自动调整大小”到底是什么意思?您的意思是要通过代码(即自动化流程)或其他方式调整表格的大小?此外,最好总是提及您正在使用的 PPT 版本以及您的代码需要支持的版本。
-
我通过设置 minW/minH = 0 来修复“随机”螺丝起落,在它们被分配到宽度/高度之后。在窄高单元格上,我试图在检查边界宽度之前为单元格宽度分配巨大的值,但这在一次运行中不起作用。如果我首先运行一个扩大列的宏,然后我的它很好,但是在一个宏中(即使有两个单独的函数)它不起作用,有什么帮助吗?
-
您是否启用了任何错误捕获? 2007 年和 2010 年的表格对象模型从未正确完成,尤其是当您进入 Shape 级别时。 Intellisense/文档中出现的许多属性/方法在涉及表格单元格形状时根本不起作用。代码将编译,但在遇到某些语句时会出错。如果您的代码在 On Error Resume Next 上下文中运行,您将不会看到任何错误。
-
完全没有错误,它似乎忽略了我在尝试找到最小宽度之前先增加宽度(这对我来说似乎是获得“自动宽度”的最佳方式,因为BoundWWidth 将返回单元格需要的宽度,而不是它当前拥有的空间,如果我不先加宽单元格,它会这样做)
-
我终于有时间再次研究这个问题,但仍然无处可解决。我在寻找最小宽度之前添加了一条线来增加列的宽度,但是 VBA 似乎无法读出正确的边界宽度,我可以以某种方式重新加载边界宽度数据(我假设它在调整大小之前使用了边界宽度...
标签: vba powerpoint