在不使用VBA的Word文档上使用Shape.Activate()访问Excel对象

时间:2012-07-14 03:43:31

标签: vba excel-vba word-vba excel

我尝试在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'(类不支持自动化或不支持期望)。

问题是在没有调用Activate方法的情况下有没有其他方法可以访问嵌入式Excel?

1 个答案:

答案 0 :(得分:4)

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

我做了一些实验和一些研究。因为我找不到任何具体解释行为的来源。这对我来说有点猜测。看来,当您将Excel电子表格嵌入到Word文档中时,Word实际上存储了电子表格的链接,该链接仅显示外观,因为它需要使用Excel程序进行解释。在您实际激活形状之前,您无法与它进行交互,因为无法直接使用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的计算机上,可比较的是: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解释的嵌入式对象,或者使用不需要激活的不同控件。