2011-03-24 3 views
1

VBA를 사용하여 내 문서의 Excel 시트를 반복하는 스크립트를 작성하고 있습니다. 나는 그것들을 활성화시키고, 약간의 수정을하고 다음 것을 계속한다. 그런 다음 마지막 시트를 다시 비활성화하고 커서를 문서의 시작 부분으로 되돌리려합니다.VBA를 사용하여 OLEObject를 비활성화하면 Word 2007에서 리본이 깨집니다.

는 지금까지 다음과 같은 코드가 있습니다 :

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에서 리본이 손상됩니다. wrdActDoc.Activate을 추가하는 것은 OLEObject를 비활성화하는 대신 주 문서를 다시 활성화하는 것이 좋을 것이라고 생각하지만 wrdActDoc.Activate을 추가하는 것으로는 보이지 않습니다.

리본을 깨지 않고 Excel 워크 시트를 비활성화 할 수 있습니까?

답변

2

내가 언급 한 Gary의 코드를 사용하는 것과 같은 "속임수"와 동의하지 않습니다. 안전하게 비활성화하는 방법에 대한 내 다른 게시물 Update embedded excel file programmatically을 참조하십시오 (그러나 그것이 SendKeys이므로 100 % 완벽하지는 않습니다).