Деактивация OLEObject с помощью ленты разрывов VBA в Word 2007 - PullRequest
1 голос
/ 24 марта 2011

Я пишу скрипт, который просматривает встроенные таблицы Excel в моем документе с VBA.Я активирую их, делаю некоторые модификации и перехожу к следующей.После этого я хочу, чтобы последний лист снова деактивировался, и я хочу, чтобы курсор вернулся к началу документа.

Пока у меня есть следующий код:

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

Я позаимствовалкод деактивации от Гэри МакГилл .Однако этот метод деактивации разрывает ленту в Word 2007.

Я могу себе представить, что было бы лучше повторно активировать основной документ вместо деактивации OLEObject, но добавление wrdActDoc.Activate, похоже, не делает этого.

Можно ли деактивировать лист Excel без разрыва ленты?

1 Ответ

2 голосов
/ 25 марта 2011

Я не согласен с таким "обманом" слова с помощью кода Гэри, на который вы ссылаетесь.См. Мой другой пост по Обновление встроенного файла Excel программным способом , чтобы узнать, как безопасно деактивировать (но знайте, что это SendKeys, поэтому он никогда не будет на 100% идеальным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...