在Word 2016中,无法通过VBA缩放嵌入式Excel表格

时间:2018-11-27 22:26:08

标签: vba ms-word

上下文

我有一个带有多个嵌入式Excel表的Word。这些Excel表的宽度不同。我尝试使用VBA代码调整Excel电子表格的宽度,以便针对我的Word文档的页面宽度进行优化。

Excel已通过“插入”>“对象”>“ Microsoft Excel工作表”进行嵌入

问题

  1. 在代码示例中,属性.ScaleWidth.ScaleHeight对Word中表的大小没有影响。
  2. 如果我使用.Width.Height更改高度和宽度,表格将恢复为原始大小

代码示例1

For Each oShape In ActiveDocument.InlineShapes
    If oShape.Type = wdInlineShapeEmbeddedOLEObject Then
        If Left(oShape.OLEFormat.ProgID, 5) = "Excel" Then
            oShape.OLEFormat.Activate
            oShape.OLEFormat.Object.Application.Worksheets(1).Activate
            oShape.ScaleWidth = x ' something calculated
            oShape.ScaleHeight = y ' something calculated 
        End If
   End If
Next oShape

1 个答案:

答案 0 :(得分:1)

从您的帖子中还不清楚工作表是嵌入式的(也许带有外部引用,您可能会使用代码对其进行更新)还是作为链接的对象。您的“我使用内联形状而不是链接的Excel”并不能使这一点变得更加清晰。要调整大小,请尝试:

Sub Demo()
Application.ScreenUpdating = False
Dim Sctn As Section, iShp As InlineShape, sWdth As Single, sHght As Single
For Each Sctn In ActiveDocument.Sections
  With Sctn
    With .PageSetup
      sWdth = .PageWidth - .LeftMargin - .RightMargin - .Gutter
      sHght = .PageHeight - .TopMargin - .BottomMargin
    End With
    For Each iShp In .Range.InlineShapes
      With iShp
        .LockAspectRatio = True
        If .Width > sWdth Then .Width = sWdth
        If .Height > sHght Then .Height = sHght
      End With
    Next
  End With
Next
Application.ScreenUpdating = True
End Sub

上面的宏将缩小和放大行内形状以适合打印区域。

对于您的“在某些表中,Excel的最后一列在Word中不可见”的问题,解决方案实际上取决于工作表是嵌入式的还是链接的。