【问题标题】:programatically update-linked-named-range-of-excel-object-in-ms-word-2010以编程方式更新链接命名范围的 excel-object-in-ms-word-2010
【发布时间】:2018-07-17 14:29:08
【问题描述】:

我已经彻底阅读了您在下面的链接中发布的上述答案。

Programmatically Update Linked Named Range of excel object in MS Word (2007)

我在使用上述相同步骤更新共享驱动器路径时遇到问题。我的 excel 文件位于共享驱动器文件夹中,我尝试手动放入 OLE 对象,我成功了。虽然使用类似的逻辑:

ActiveDocument.Bookmarks("R1").Range.InlineShapes.AddOLEObject filename:=filename _
  & "!Range1", LinkToFile:=True"

它给了我以下错误:

Word 无法创建指向您指定对象的链接。请 将对象直接插入文件而不创建链接

我无法弄清楚为什么会出现此错误。在这方面的任何帮助将不胜感激。

注意:我正在更新一个新范围以及文件位置和文件名。我已验证 excel 文件中的范围是有效的。

谢谢

【问题讨论】:

    标签: vba excel ms-word


    【解决方案1】:

    由于链接已经存在,您不应该使用 .AddOLEObject。您应该改为编辑文件路径。例如:

    Dim iShp As InlineShape
    Const strPath As String = "New Path"
    For Each iShp In ActiveDocument.InlineShapes
      With iShp
        If Not .LinkFormat Is Nothing Then
          With .LinkFormat
            .SourceFullName = Replace(.SourceFullName, .SourcePath, strPath)
          End With
          With .Field
            .Code.Text = Replace(.Code.Text, "5 - EW_RA!R2C17", "6 - EW_RA!R2C17")
            .Update
          End With
        End If
      End With
    Next
    

    【讨论】:

    • Macropod,感谢您的回复,但我还需要更新 excel 范围。例如:5 - EW_RA!R2C17 到 6 - EW_RA!R2C17。因此,我正在断开链接并使用 AddOLEObject 重新创建链接。我已将 excel 文件放入共享驱动器中,并希望在该 excel 文件中映射范围(共享驱动器中的一个)。请建议
    • 仍然不需要断开链接 - 只需编辑域代码。请参阅我的更新答案。
    • 非常感谢你,我会试试看。我还想知道当我使用activedocument.shapes(不是内联形状)时可以更新excel范围时是否有任何这样的方法/属性。请建议
    • 非常感谢 Macropod,是的,内联形状非常适合我,无需断开任何链接
    • 编辑链接Shape的范围引用最简单的方法是存储它的定位属性,转换为InlineShape,更新,转换为Shape,恢复定位属性。
    【解决方案2】:

    对于包装对象,具有早期绑定:

    Dim wdApp As New Word.Application, wdDoc As Word.Document
    Dim wdShp As Word.Shape, wdRng As Word.Range, i As Long, Fmt As Long, StrID As String, StrNm As String
    Dim vRel As Long, vPos As Single, hRel As Long, hPos As Single, Hght As Single, Wdth As Single
    Const strPath As String = "New Path"
    With wdApp
      .Visible = True
      Set wdDoc = .Documents.Open(Filename:="C:\Users\" & Environ("Username") & "\Documents\Target Document.docx", _
        AddToRecentFiles:=False, Visible:=True)
      With wdDoc
        For i = .Shapes.Count To 1 Step -1
          With .Shapes(i)
            If Not .LinkFormat Is Nothing Then
              Set wdRng = .Anchor: StrID = .OLEFormat.progID: StrNm = "\" & .LinkFormat.SourceName
              Fmt = .WrapFormat.Type: Hght = .Height: Wdth = .Width
              vRel = .RelativeVerticalPosition:   vPos = .Top
              hRel = .RelativeHorizontalPosition: hPos = .Left
              .Delete
            With wdRng
              .Fields.Add Range:=.Duplicate, Type:=wdFieldEmpty, PreserveFormatting:=False, _
              Text:="LINK " & StrID & " " & Chr(34) & Replace(strPath & StrNm, "\", "\\") & Chr(34) & " " & _
                "6 - EW_RA!R2C17" & " \p"
              .End = .End + 1
              Set wdShp = .Fields(1).InlineShape.ConvertToShape
            End With
            With wdShp
              .WrapFormat.Type = Fmt: .Height = Hght: .Width = Wdth
              .RelativeVerticalPosition = vRel:   .Top = vPos
              .RelativeHorizontalPosition = hRel: .Left = hPos
              End With
            End If
          End With
        Next
        .Close True
      End With
      .Quit
    End With
    

    【讨论】:

    • 当我从 excel 运行 Set iShp = oWordDoc.Shapes(d).ConvertToInlineShape 时,如果我运行,它不会说“对象形状的方法 ConvertToInlineShape 失败”,而不是把子放在 word 文档中.docm 文件中的相同程序,出现以下错误: (.ConvertToShape) 方法有时会使形状消失。有时它确实出现但无法恢复位置。文档中的形状将“环绕文本”设置为“方形”,更新链接后,形状变为“与文本一致”。
    • 只是为了添加到上面的文本中,我使用过去的特殊 --> 然后粘贴链接 --> OLE 链接(第一个选项),同时粘贴 excel 对象,然后在页面布局中,更改换行文本到正方形以获得所需的位置。我在 word 文档中更新这些链接。
    • 发布的代码在从 Word 运行时按原样工作。如果在具有早期绑定的自动化上下文中使用,您只需将 iShp 指定为 Word.InlineShape 并将 ActiveDocument 更改为 oWordDoc。
    • 以下是我遵循的步骤并得到错误:“对象形状的方法 ConvertToInlineShape 失败” 1. 从 excel 复制了一个命名范围,例如:MS.GB_6.Reg 并在 word 文档中进行了特殊粘贴作为图片或 OLE 链接。然后将'wrap text' 到'square' 用于定位2。我尝试从excel 中运行相同的代码,并使用早期绑定和word 中的相同代码。它在 .ConvertToInlineShape 中失败。此方法是否有先决条件或任何其他需要注意的参数? MSDN网站解释不多
    • 我只注意到一件事,这些 OLE 对象被放置在表格行中。这会导致问题吗?当我尝试调试 ConvertToInlineShape 时,我注意到链接类型从“工作表”更改为“Excel.Sheet.12”。将方法更改从自动更新为手动。
    猜你喜欢
    • 2016-12-06
    • 2023-04-04
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多