我有一批嵌入了Excel工作表的Word文档。用户通过双击工作表图像并打开嵌入的Excel对象,在Excel工作表中输入数据。我需要找到用户输入的数据。
下面是WORD VBA,引用了Microsoft Excel 15库。 (在Office 2010下创建的Word和Excel对象。)
我可以找到OLE对象,但我无法用它做任何事情。在下面的代码中,我尝试将对象分配给Worksheet对象,但是我遇到了类型不匹配错误。
为了使事情复杂化,嵌入的Excel工作表具有宏。在问题的一些过程中,将打开一个Excel窗口,其中会显示启用宏安全提示的提示。我很可能暂时禁用宏检查以超越它。
我需要做的就是获取工作表中的数据,将其复制到其他地方一次。如果可能的话,我很乐意将工作表复制到外部文件中。
我有Office 2010和2013,以及Visual Studio 2010 Pro和2014 Express。
如何访问嵌入式工作表数据?
Sub x()
Dim oWS As Excel.Worksheet
Dim oIShape As InlineShape
For Each oIShape In ActiveDocument.InlineShapes
If Not oIShape.OLEFormat Is Nothing Then
If InStr(1, oIShape.OLEFormat.ProgID, "Excel") Then
oIShape.OLEFormat.ActivateAs (oIShape.OLEFormat.ClassType) 'Excel.Sheet.8
Set oWS = oIShape '** type mismatch
Debug.Print oWS.Cells(1, 1)
End If
End If
Next oIShape
End Sub
我使用了建议开始上一次尝试: Modify embedded Excel workbook in Word document via VBA
在使用正确的引用时遇到了一些问题,并且代码弄乱了文档。
下面是另一个有效的通行证,但有一些我不明白的问题和代码。
1)我不想使用编辑模式,但其他模式不起作用 2)完美无瑕的参考Set xlApp = GetObject(," Excel.Application")很奇怪。某种无证的特征?
Sub TestMacro2()
Dim lNumShapes As Long
Dim lShapeCnt As Long
Dim xlApp As Object
Dim wrdActDoc As Document
Dim iRow As Integer
Dim iCol As Integer
Set wrdActDoc = ActiveDocument
For lShapeCnt = 1 To wrdActDoc.InlineShapes.Count
If wrdActDoc.InlineShapes(lShapeCnt).Type = wdInlineShapeEmbeddedOLEObject Then
If wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.ProgID = "Excel.Sheet.8" Then
wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.Edit
Set xlApp = GetObject(, "Excel.Application")
With xlApp.Workbooks(1).Worksheets(2) ' can be multiple sheets, #2 is needed in this case
For iCol = 3 To .UsedRange.Columns.Count
If .Cells(1, iCol) = "" Then Exit For
For iRow = 1 To .UsedRange.Rows.Count
Debug.Print .Cells(iRow, iCol) & "; ";
Next iRow
Debug.Print 'line feed
Next iCol
End With
xlApp.Workbooks(1).Close
xlApp.Quit
Set xlApp = Nothing
End If
End If
Next lShapeCnt
End Sub
代码运行良好,可以完成我的提取任务 - 谢谢!