1

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 ワークシートを無効にすることはできますか?

4

1 に答える 1

2

私はあなたが参照しているゲイリーのコードでそのような「だまし」の言葉に同意しません。安全に非アクティブ化する方法については、プログラムで埋め込まれたExcelファイルの更新に関する他の投稿を参照してください(ただしSendKeys、100%完全になることはありません)。

于 2011-03-25T07:10:43.373 に答える