PowerPoint中使用VBA的表格格式

时间:2019-11-19 14:06:35

标签: powerpoint powerpoint-vba

我在Excel宏方面有不错的技能,但是在使用新的PowerPoint(> 2013)时,我必须手动完成所有操作,而且很多我找不到的对象。我必须重新格式化PowerPoint幻灯片(> 150)和各种表格。我需要将表重置为Medium Style 2 Accent 1,然后更改列和行的尺寸。我正在使用PowerPoint 2016。

在各种论坛和Google的帮助下,我有以下代码

Sub Reformat_slide ()

Dim s As Slide
Dim oSh As Shape
Dim oTbl As Table
Dim lRow As Long
Dim lCol As Long

  Set s = ActivePresentation.Slides(ActiveWindow.View.Slide.SlideIndex)
  s.Select
  s.CustomLayout = ActivePresentation.Designs(1).SlideMaster.CustomLayouts(15)
'  Required to reset the slide format
  DoEvents
  Application.CommandBars.ExecuteMso ("SlideReset")
  DoEvents

  For Each oSh In s.Shapes
'  Force Title to a particular font,  setting the custom slide layout does not always  change it
    If Left(oSh.Name, 5) = "Title" Then
      With oSh.TextFrame.TextRange
        .Font.Name = "Tahoma(Header)"
        .Font.Size = 24
        .Font.Bold = False
      End With
    End If

'  Force Table for a specific format - Medium Style 2 Accent 1.
    If oSh.HasTable Then
      Set oTbl = oSh.Table
      oTbl.ApplyStyle ("{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}"), True

      oSh.Height = 0
'
'       oSh.Left = InchesToPoints(.25)  is not working
      oSh.Left = 72 * 0.25
      oSh.Top = 72 * 1.3

      oTbl.Columns(1).Width = 72 * 1.3
      oTbl.Columns(2).Width = 72 * 3.55
      oTbl.Columns(3).Width = 72 * 1.3
      oTbl.Columns(4).Width = 72 * 1.1
      oTbl.Columns(5).Width = 72 * 2.25

      For lRow = 1 To oTbl.Rows.Count
        For lCol = 1 To oTbl.Columns.Count
          With oTbl.Cell(lRow, lCol).Shape.TextFrame.TextRange
            .Font.Name = "Tahoma(Body)"
            .Font.Size = 12
            .Font.Color = RGB(64, 65, 70)  ' Standard Light Green
            If lRow = 1 Or lCol = 1 Then .Font.Bold = True
            If lRow = 1 Then .ParagraphFormat.Alignment = ppAlignCenter
            .ParagraphFormat.SpaceAfter = 0
            .ParagraphFormat.SpaceBefore = 0
          End With
          With oTbl.Cell(lRow, lCol).Shape.TextFrame
            .VerticalAnchor = msoAnchorMiddle
            .MarginLeft = 72 * 0.05
            .MarginRight = 72 * 0.05
            .MarginTop = 72 * 0.04
            .MarginBottom = 72 * 0.04
          End With
       Next
      Next
    End If
  Next   ' Shape
End Sub

我有几个问题。

1)幻灯片:重置幻灯片并不总是有效。我无法确定何时或何时不起作用的任何模式。尽管可以手动执行,但始终可以使用。

2)表格样式:重置表格样式并不总是有效。我必须有一个新的幻灯片,一个新的表格并复制并粘贴数据。同样,如果我手动重置样式(选择表,“表工具设计”选项卡,然后选择“表样式”),它将正确重置。通常边界会保持黑色,但在重置后边界应为白色。

3)表格边距:我需要重置表格边距,可以手动对整个表格进行设置(选择表格->格式形状->大小和属性->文本框)。我无法确定VBA中的等效对象,因此无法遍历表。 (我正在做类似于将高度重置为oSh.Height = 0的最小高度的操作。)

4)表段落对齐:表边距存在相同问题。需要设置中心的垂直对齐方式和中心的水平对齐方式(通过选择表格->格式形状->尺寸和属性->文本框手动完成)。

希望这个小组能为您提供帮助和预先感谢。

Michael Virostko

1 个答案:

答案 0 :(得分:0)

对于幻灯片重置,您使用的命令在某些情况下可以使用。这是另一种重置,可以在其他重置中使用,实际上,您可能需要使用其中一种:

s.CustomLayout = s.CustomLayout

以下是设置单元格边距和对齐方式的方法:

Sub FormatTable()
  Dim oTable As Table
  Dim oCell As Cell
  Dim ThisRow As Integer
  Set oTable = ActivePresentation.Slides(1).Shapes(1).Table
  For ThisRow = 1 To oTable.Rows.Count
    For Each oCell In oTable.Rows(ThisRow).Cells
      With oCell.Shape.TextFrame
        .MarginTop = 1
        .MarginRight = 1
        .MarginBottom = 1
        .MarginLeft = 1
        .HorizontalAnchor = msoAnchorCenter
        .VerticalAnchor = msoAnchorMiddle
      End With
    Next oCell
  Next ThisRow
End Sub