如何区分MS方程对象与Word文档中的其他InlineShapes

时间:2016-07-27 05:25:04

标签: vba word-vba

我有一些包含 Microsoft Equation 3.0 方程的MS-Word 2013文档。不幸的是,方程式会不时地改变大小,无论是偶然还是由于Word中的错误。

为了解决这个问题,我编写了一个VBA宏来将文档中所有方程的大小修复为原始大小,如下所示:

Sub FixEquationSize()
    Dim shp As InlineShape
    For Each shp In ActiveDocument.InlineShapes
         shp.ScaleHeight = 100    'The value of ScaleHeight is a percentage
         shp.ScaleWidth = 100
         shp.LockAspectRatio = msoFalse
         shp.Reset
    Next
End Sub

...但是这会修复所有InlineShape个对象的高度和宽度,而不仅仅是方程式的高度和宽度。

previous question and answer通过迭代ActiveDocument.OMaths在Word中找到方程,但该解决方案找到了由Insert|Symbols|Equation创建的方程式,而不是由Insert|Text|Object|Microsoft Equation 3.0插入的方程式(有趣的是它们是不同的!)。

如果我必须遍历InlineShapes,我怎样才能区分出方程式的InlineShape个对象和非方程式的对象?

1 个答案:

答案 0 :(得分:2)

公式3.0方程是嵌入的OLE对象(不同于使用不同机制的较新类型的方程。所以类似

If shp.Type = wdInlineShapeEmbeddedOLEObject Then
  If shp.OLEFormat.ClassType = "Equation.3" Then
    ' it's an equation object
  End If
End If

这假设您尚未将形状转换为其他形状,例如复制/粘贴为某种图形。