2012-07-14 87 views
1

我有一個嘗試讀取Word文檔中嵌入的Excel文檔Word文檔使用Shape.Activate()。我跟着這個博客文章中指定的代碼:訪問Excel對象,而不使用VBA

http://vbadud.blogspot.com/2010/08/how-to-read-excel-sheet-embedded-in.html

Dim oWB As Excel.Workbook 
Dim oIShape As InlineShape 

For Each oIShape In ActiveDocument.InlineShapes 
    If InStr(1, oIShape.OLEFormat.ProgID, "Excel") Then 
     oIShape.OLEFormat.Activate 
     Set oWB = oIShape.OLEFormat.Object 
     oWB.Sheets(1).Range("A1").Value = "ProdID" 
    End If 
Next oIShape 

它工作正常,但啓動訂單使得文檔閃爍每個excel文件我讀了。我試圖刪除oIShape.OLEFormat.Activate代碼,但它導致下一行拋出「運行時錯誤」430(類不支持自動化或不支持期望)。

問題是否有任何其他方式訪問內置excel,而不調用Activate方法?

回答

4

這是棘手!簡短的答案是,沒有。不是以嵌入的Excel。

我做了一些實驗和一些研究。因爲我找不到任何來源那具體解釋的行爲。這在某種程度上對我的猜測而已。看來,當你嵌入Excel電子表格到Word文檔的Word基本存儲電子表格的鏈接,這disp已僅僅是外觀,因爲它需要用Excel程序來解釋。在實際上激活形狀之前,無法直接與Word進行交互,因爲這不能直接與Word進行交互。 This article暗指的行爲,但沒有解釋它。這裏有一個報價:

If you edit the object in Word, click anywhere outside the object to return 
to the destination file. 
If you edit the object in the source program in a separate window, 
click Exit on the File menu of the source program to return to the 
destination file. 

您可能已經注意到,即使你使用。 Application.ScreenUpdating = false它仍然會閃爍你提到。這是因爲您在訪問形狀時正在使用不同的應用程序!每次你激活形狀,對象特定的菜單等加載。

可能的解決方法: 如果不是通過插入菜單嵌入Excel Spreadsheets,則可以添加一個控件。在使用Office 2003我的機器comparible之一是:Microsoft Office Spreadsheet 11.0這在技術上是一個Web控件,但是這些方法和行爲到Excel工作簿非常具有可比性。

使用控制,而不是方便插入的對象,與您的代碼的一個微小的變化我能註釋掉您激活指令和代碼運行符合預期。具體來說,我不得不改變這些行:中

  • Dim oWB As Spreadsheet代替Excel.Workbook.
  • If InStr(1, oIShape.OLEFormat.ProgID, "OWC11.Spreadsheet.11") Then,而不是"Excel"

基本上你可以決定...激活需要Excel來解釋你的嵌入對象,或者使用不需要激活的不同控件。