引用嵌入在MS-Word文档中的Excel对象?

时间:2018-01-08 06:17:12

标签: excel vba excel-vba ms-word word-vba

我在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对象中,包含表头的第一行是隐藏的。

实施例

enter image description here

Sample File

  

本文件每日延期。

     

我需要Normal.dotm中的一个宏计算所有指定Excel对象的总计(通过为它们指定名称或...来指定)并执行返回此值Selection.TypeText Text:=在下面的图片中选择了:(在文档末尾)

为什么我坚持要嵌入Excel对象?

  1. 因为我有计算Column1的公式:A,B,C,....
  2. 因为我有一个隐藏的数据基础表用于数据验证项目
  3. 我在数量列中有公式,用于乘以费率和 数据基础表中的每个项目单位的数量

2 个答案:

答案 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
相关问题