可扩展的Excel表到Word文档

时间:2019-03-06 15:42:13

标签: excel vba ms-word document ole

我需要在Word文档中链接我的Excel表,但是Word中已经存在的选项只能自动刷新固定表的大小,例如如果我从Excel复制4x4表并将其与链接粘贴到Word中,它将保持4x4。只有这些单元格可以刷新,如果我在Excel中添加列或行,则它不会出现在Word中。

希望您能解决我的问题:D

2 个答案:

答案 0 :(得分:0)

作为用户,可以双击Excel对象将其激活,然后拖动框架以展开/收缩它,以显示不同数量的行和/或列。

在Word对象模型中没有与此等效的功能-无法使用代码来完成。 除非...

该表已插入一个链接,并且Link字段管理该链接。在这种情况下,可以更改Link字段中指定的单元格范围,并且在更新该字段时,嵌入对象的大小将重新调整。

例如,如果Link域代码用于范围A1:B2

{ LINK Excel.Sheet.12 C:\\Test\\TestMergeData.xlsx Sheet1!R1C1:R2C2 \a \p }

将其更改为A1:C3(R1C1:R3:C3)将显示三行和一列,而不是两个。 (您可以通过按Alt + F9来查看和编辑域代码。)

VBA代码如下:

Sub ChangeRangeLinkedExcel()
    Dim fld As Word.Field
    Dim ils As Word.InlineShape
    Dim sFldCode As String
    Dim posRangeStart As Long
    Dim sLinkLeft As String, sRange As String, sLinkRight As String

    For Each ils In ActiveDocument.InlineShapes
        If ils.Type = 2 Then ' wdInlineShapeLinkedOLEObject
            Set fld = ils.Range.Fields(1)
            sFldCode = fld.code
            posRangeStart = InStr(sFldCode, "!R")
            sLinkLeft = Left(sFldCode, posRangeStart)
            sRange = Mid(sFldCode, posRangeStart + 1, 9)
            sLinkRight = Right(sFldCode, Len(sFldCode) - Len(sLinkLeft) - Len(sRange))
            sRange = "R1C1:R3C3"
            fld.code.Text = sLinkLeft & sRange & sLinkRight
            fld.Update
        End If
    Next
End Sub

如果Excel对象不是Link字段,那么我发现使用代码更改其显示内容的唯一可能性就是删除该对象,然后重新创建它。插入新的嵌入式对象时,它将自动显示指定数量的行和列。

答案 1 :(得分:0)

在将链接复制并粘贴到Word中之前,只需在Excel中命名范围。从那时起,对Excel中命名范围的范围或内容的任何更改都将反映在Word中。

或者,如果您已经建立了链接,请在Excel中命名范围,然后在Word中编辑域代码。为此,选择链接的范围并按Shift-F9。现在它应显示为:

{ LINK Excel.Sheet.12 "C:\\Test\\TestMergeData.xlsx" "Sheet1!R1C1:R2C2" \a \p }

将“ Sheet1!R1C1:R2C2”(包括引号)更改为您的范围名称(不带引号),然后按F9刷新链接。