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