1

我尝试在 word 文档中阅读嵌入的 excel 文档。我遵循了这篇博客文章中指定的代码:

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?

4

1 回答 1

4

这很棘手!最简洁的答案是不。不使用嵌入式 Excel。

我做了一些实验和一些研究。因为我找不到任何专门解释这种行为的来源。这是我的猜测。看来,当您将 Excel 电子表格嵌入到 Word 文档中时,Word 本质上存储了电子表格的链接,该链接仅显示外观,因为它需要使用 Excel 程序进行解释。在您真正激活该形状之前,您无法与它进行交互,因为这不能直接使用 Word 完成。这篇文章暗示了这种行为,但没有解释它。这是一个报价:

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 电子表格,您可以添加一个控件。在我使用 Office 2003 的机器上,可比较的是: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 解释的嵌入对象,或使用不需要激活的不同控件。

于 2012-07-14T06:20:38.993 回答