【问题标题】:How to get ActiveSheet in OLE-embedded Excel object如何在 OLE 嵌入式 Excel 对象中获取 ActiveSheet
【发布时间】:2016-12-27 21:11:19
【问题描述】:

我正在寻找在 Visio 中嵌入 Excel 工作簿并对嵌入数据执行读/写操作。对 Excel 数据进行特殊粘贴似乎嵌入了整个工作簿,而不仅仅是选定/复制的数据。

我能够获得对嵌入在 Visio 页面上的 Excel 工作簿对象的引用,但我无法确定哪个工作表处于活动状态并显示在 Visio 中。似乎我只能在编辑工作表时告诉活动工作表是什么。当它就在页面上时,Workbook 对象为 ActiveSheet 返回 Nothing,并且工作簿没有 Windows。没有窗口是有道理的,但没有活动工作表就没有多大意义了。

有没有办法找出 Excel OLE 对象中的“活动”工作表是什么?或者我写的任何代码都应该假设一切都在表 1 中吗?我可能会以编程方式添加任何嵌入式工作簿,因此将每本书限制在一张纸上不会太大,但我只是想确保没有一些我忽略的属性会告诉我我想要什么.

此代码将在页面上找到一个 Excel OLE 对象,并在工作簿的工作表 1 中设置单元格 A1 和 B1:

Dim CheckShp As Visio.Shape
Dim CheckObj As OLEObject
For Each CheckObj In ActivePage.OLEObjects
    If CheckObj.ProgID Like "Excel.Sheet.*" Then
        Dim Sheet As Excel.Worksheet
        Dim Bk As Excel.Workbook
        Set Bk = CheckObj.Object
        Set Sheet = Bk.Worksheets(1)

        Sheet.Cells(1, 1) = "HELLO"
        Sheet.Cells(1, 2) = "WORLD"

    End If
Next CheckObj

【问题讨论】:

  • 您能否获得对没有ActivatingEditing 嵌入OLE 对象的工作簿对象的引用?
  • 你目前有什么代码?
  • 我可以轻松获得对工作簿的引用,但我想获得对在不编辑 OLE 对象时显示的工作表的引用。没有什么明显的,我可以看到(ActiveSheet 对于工作簿对象来说是空的,除非正在编辑 OLE 对象)。

标签: vba excel ole visio


【解决方案1】:

您不需要 ActiveSheet,如果您不进行编辑,它实际上什么都不是。您可以遍历 Bk.Worksheets,从 1 到 Worksheets.Count,以找到具有特定名称的一个。

此外,索引可以是名称,所以应该可以:

Set Sheet = Bk.Worksheets("MySpecificSheet")

【讨论】:

  • 问题是“正在显示的工作表的名称是什么”。我知道如何获得特定的工作表。问题是询问如何找出 OLE 对象正在显示的工作表。
  • 对不起,我误解了这个问题。答案是“没有名称,因为没有显示工作表,否则就是 ActiveSheet”
  • 我了解 Excel 对象没有主动呈现到屏幕上,并且 OLE 正在向我显示上次呈现工作表时的图形。我真的很想看看 Workbook 对象或 OLE 对象上是否有一个属性可以告诉我为显示而呈现的工作表的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多