我在MS-Word文档中有很多Excel对象嵌入。
我想计算总计:,汇总每个指定的excel对象中的总数和返回的总计MS-Word文档。
宏持有者是MS-Word Document的VBA模块。
意味着: 我需要访问到指定的嵌入式 Excel对象,形成 MS -Word模块,然后执行活动,然后将分配给对象变量 - 例如: -
ExcelApplication = GetObject(, "Excel.Application")
强烈的声明。然后尝试访问其适当的总值,例如: -Total = Range("Table1[[#Totals],[Amount]]").Value
。点是所有表格Excel对象中的名称是Table1
,其中包含Amount
列和Total Row
。
注意在上面的Excel对象中,包含表头的第一行是隐藏的。
本文件每日延期。
我需要
Normal.dotm
中的一个宏计算所有指定Excel对象的总计(通过为它们指定名称或...来指定)并执行返回此值Selection.TypeText Text:=
在下面的图片中选择了:(在文档末尾)
答案 0 :(得分:1)
在这种情况下,尝试以下方面:
Sub TallyXLVals()
Application.ScreenUpdating = False
Dim Rng As Range, objOLE As Word.OLEFormat, objXL As Object
Dim i As Long, lRow As Long, sValA As Single, sValB As Single, sValC As Single
Const xlCellTypeLastCell As Long = 11
With ActiveDocument
.ActiveWindow.Visible = False
For i = .InlineShapes.Count To 1 Step -1
With .InlineShapes(i)
If Not .OLEFormat Is Nothing Then
If Split(.OLEFormat.ClassType, ".")(0) = "Excel" Then
Set Rng = .Range
Set objOLE = .OLEFormat
objOLE.Activate
Set objXL = objOLE.Object
With objXL.ActiveSheet
lRow = .UsedRange.Cells.SpecialCells(xlCellTypeLastCell).Row
sValA = sValA + .Range("A" & lRow).Value
sValB = sValB + .Range("B" & lRow).Value
sValC = sValC + .Range("C" & lRow).Value
End With
objXL.Application.Undo
End If
End If
End With
Next
Call UpdateBookmark("BkMkA", Format(sValA, "$#,##0.00"))
Call UpdateBookmark("BkMkB", Format(sValB, "$#,##0.00"))
Call UpdateBookmark("BkMkC", Format(sValC, "$#,##0.00"))
.ActiveWindow.Visible = True
End With
Set objXL = Nothing: Set objOLE = Nothing: Set Rng = Nothing
Application.ScreenUpdating = True
End Sub
Sub UpdateBookmark(StrBkMk As String, StrTxt As String)
Dim BkMkRng As Range
With ActiveDocument
If .Bookmarks.Exists(StrBkMk) Then
Set BkMkRng = .Bookmarks(StrBkMk).Range
BkMkRng.Text = StrTxt
.Bookmarks.Add StrBkMk, BkMkRng
End If
End With
Set BkMkRng = Nothing
End Sub
您希望输出显示的位置是书签,名称为BkMkA,BkMkB和&分别为BkMkC。
注意:因为您正在激活嵌入式对象,所以屏幕闪烁不可避免。
答案 1 :(得分:0)
你自己的努力是不够的。这是启动你的代码。代码将循环遍历Word文档中的所有InlineShapes,选择代表Excel工作表的第一个并打开该项以进行编辑。通过右键单击嵌入的Excel表,选择“工作表对象”和“编辑”,可以在文档中重新创建相同的操作。
Private Sub OpenEmbeddedExcelInWord()
' 08 Jan 2018
Dim Shp As InlineShape
For Each Shp In ActiveDocument.InlineShapes
With Shp
If Shp.Type = wdInlineShapeEmbeddedOLEObject Then Exit For
End With
Next Shp
Shp.OLEFormat.Edit
End Sub