如何获取OLEembedded式Excel对象中的ActiveSheet

我正在四处看看在Visio中embeddedExcel工作簿,并对embedded的数据进行读/写操作。 使用Excel数据粘贴特别似乎embedded整个工作簿,而不仅仅是选定/复制的数据。

我能够获得对Visio页面上embedded的Excel工作簿对象的引用,但我无法确定哪些工作表处于活动状态并在Visio中显示。 看来,我只能告诉正在编辑的工作表是什么活动工作表。 当它只是在页面上时,Workbook对象返回的是ActiveSheet的Nothing,而工作簿没有Windows。 这是有道理的,它没有窗户,但没有太多的意义,没有积极的工作表。

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

此代码将在页面上findExcel 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,find一个具有特定名称的工作表。

此外,索引可以是一个名字,所以这应该工作:

 Set Sheet = Bk.Worksheets("MySpecificSheet")