我有一个大型宏,它根据excel值生成并填充powerpoint中的表。我根据特定参数手动调整行的大小,但是我遇到了一个非常烦人的问题,如果文本从特定单元格溢出,我似乎无法阻止行自动调整大小。我已尝试使用textframe
和textframe2
" autosize"属性,但这会在第一次调用时给出错误,指出指定的值超出范围。错误号是-2147024809(80070057),虽然我怀疑它会有什么用。有没有办法防止这种自动调整,除了编写代码以便在文本溢出时手动缩短文本?
答案 0 :(得分:1)
RGA,
你的问题的答案是肯定的;你可以这样做。以下主题讨论了该主题:Understanding format of tables in PowerPoint (VBA 2010) (resize text to cell)
但是,我不知道这种技术是否仍然适用于2016年ppt。我实施了这样的代码,然后我'升级'到办公室2016;现在它不起作用。
话虽如此,这个是我的代码(调整文本大小直到它'适合'):
...
Do Until (table.rows(1).height + table.rows(2).height < TABLE_HEIGHT) or (table.Cell(2, 2).Shape.TextFrame.TextRange.Font.size = 1)
If table.Cell(1, 1).Shape.TextFrame.TextRange.Font.size = 1 Then
table.Cell(1, 1).Shape.TextFrame.TextRange.Font.size = 27
table.Cell(2, 2).Shape.TextFrame.TextRange.Font.size = table.Cell(2, 2).Shape.TextFrame.TextRange.Font.size - 1
table.Cell(2, 3).Shape.TextFrame.TextRange.Font.size = table.Cell(2, 2).Shape.TextFrame.TextRange.Font.size
Else
table.Cell(1, 1).Shape.TextFrame.TextRange.Font.size = table.Cell(1, 1).Shape.TextFrame.TextRange.Font.size - 1
End If
Loop
为了在ppt 2016中恢复某些功能,我决定重写我的代码以限制显示的行数以防止'resize'表调用:
...
table.Cell(1, 1).Shape.TextFrame.TextRange = table.Cell(1, 1).Shape.TextFrame.TextRange.lines(1,2)
table.Cell(2, 2).Shape.TextFrame.TextRange = table.Cell(2,2).Shape.TextFrame.TextRange.lines(1,1)
table.Cell(2, 3).Shape.TextFrame.TextRange = table.Cell(2, 3).Shape.TextFrame.TextRange.lines(1,1)
理论上,你可以使用.height; .Textrange;和字体的高度,以计算您需要的字体大小,以“缩小”文本以适应。
答案 1 :(得分:0)
当文本太多而无法放入单元格时,您希望发生什么? PowerPoint中没有UI概念来防止基于单元格溢出的行自动调整大小,因为通过在PowerPoint中键入单元格来证明其他文本无处可去。因此,没有API可以做同样的事情。我会在插入文本之前和之后记录行,并按照你的说法逐字截断,直到行高返回到原始值。