2011-03-24 72 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中的功能區。

我可以想象,重新激活主文檔而不是停用OLEObject會更好,但添加wrdActDoc.Activate似乎沒有這樣做。

是否可以停用excel工作表而不破壞功能區?

回答

2

我不同意用你引用的加里代碼「欺騙」這樣的詞。看看我的其他帖子Update embedded excel file programmatically關於如何安全停用(但知道它是SendKeys,所以它永遠不會100%完美)。