2011-03-24 16 views
1

J'écris un script qui parcourt les feuilles Excel intégrées dans mon document avec VBA. Je les active, fais quelques modifications et passe à la suivante. Ensuite, je veux que la dernière feuille soit à nouveau désactivée et je veux que le curseur revienne au début du document.La désactivation de OLEObject avec VBA rompt le ruban dans Word 2007

J'ai le code suivant à ce jour:

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 

J'empruntèrent le code de désactivation de Gary McGill. Cependant, cette méthode de désactivation casse le ruban dans Word 2007.

Je peux imaginer qu'il serait plus agréable de réactiver le document principal au lieu de désactiver le OLEObject, mais ajouter wrdActDoc.Activate ne semble pas le faire.

Est-il possible de désactiver la feuille de calcul Excel sans casser le ruban?

Répondre

2

Je ne suis pas d'accord avec "tromper" Word comme ça avec le code de Gary que vous référencez. Voir mon autre poste sur Update embedded excel file programmatically pour savoir comment désactiver en toute sécurité (mais sachez qu'il est SendKeys, de sorte qu'il ne sera jamais parfait à 100%).

Questions connexes