我正在考虑在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
答案 0 :(得分:-1)
您不需要ActiveSheet,如果您不编辑,实际上什么都不是。您可以遍历Bk.Worksheets,从1到Worksheets.Count,以查找具有特定名称的。
此外,索引可以是名称,因此这应该有效:
Set Sheet = Bk.Worksheets("MySpecificSheet")