使用VBA取消激活OLEObject会破坏Word 2007中的功能区

时间:2011-03-24 09:51:11

标签: vba word-vba word-2007

我正在编写一个脚本,通过VBA循环遍历我文档中的嵌入式Excel工作表。我激活它们,进行一些修改并继续下一个。之后,我想再次停用最后一张工作表,我希望光标返回到文档的开头。

到目前为止,我有以下代码:

Private Sub DeactivateOleObject(ByRef oOleFormat As OLEFormat)
    On Error Resume Next
    oOleFormat.ActivateAs "This.Class.Does.Not.Exist"
End Sub

Sub AutoOpen()
    Dim lNumShapes As Long
    Dim lShapeCnt As Long
    Dim xlApp As Object
    Dim wrdActDoc As Document

    Set wrdActDoc = ActiveDocument

    For lShapeCnt = 1 To wrdActDoc.InlineShapes.Count
        If wrdActDoc.InlineShapes(lShapeCnt).Type = wdInlineShapeEmbeddedOLEObject Then
                Dim oOleFormat As OLEFormat
                Set oOleFormat = wrdActDoc.InlineShapes(lShapeCnt).OLEFormat
                oOleFormat.Activate
                DeactivateOleObject oOleFormat
        End If
    Next lShapeCnt
End Sub

我从Gary McGill借用了停用代码。但是,这种停用方法会破坏Word 2007中的功能区。

我可以想象重新激活主文档而不是停用OLEObject会更好,但添加wrdActDoc.Activate似乎不会这样做。

是否可以在不破坏功能区的情况下停用Excel工作表?

1 个答案:

答案 0 :(得分:2)

我不同意你使用Gary的代码“欺骗”这样的词。请参阅Update embedded excel file programmatically上有关如何安全停用的其他帖子(但知道它是SendKeys,因此它永远不会100%完美)。