如何在ole abedded excel对象中获取ActiveSheet



我正在四处寻找嵌入excel工作簿中的excel工作簿,并在嵌入式数据上进行读/写操作。使用Excel数据进行粘贴特殊性似乎嵌入了整个工作簿,而不仅仅是选定/复制的数据。

我能够获得对Visio页面上嵌入的Excel Workbook对象的引用,但是我无法分辨出哪个表是活动的并显示在Visio中。看来我只能说出表格编辑时的活动表是什么。当它在页面上时,工作簿对象对ActiveSheet的返回,并且工作簿没有窗口。这是有道理的,它没有窗户,但是没有那么有意义的没有活动的表。

有没有办法找出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

您不需要ActiveSheet,如果您不编辑,实际上一无所有。您可以通过bk.worksheets迭代,从1到Worksheets.count,以找到一个具有特定名称的工作。

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

Set Sheet = Bk.Worksheets("MySpecificSheet")

最新更新