如何在OLE嵌入的Excel对象中获取ActiveSheet

时间:2016-12-27 21:11:20

标签: excel vba excel-vba ole visio

我正在考虑在Visio中嵌入Excel工作簿并对嵌入数据执行读/写操作。使用Excel数据执行paste-special似乎嵌入了整个工作簿,而不仅仅是选定/复制的数据。

我能够获得对Visio页面上嵌入的Excel Workbook对象的引用,但是我无法分辨哪些工作表处于活动状态并在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

1 个答案:

答案 0 :(得分:-1)

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

此外,索引可以是名称,因此这应该有效:

Set Sheet = Bk.Worksheets("MySpecificSheet")