программно обновлять-связывать-именованные-диапазон-Excel-объект-в-мс-слово-2010 - PullRequest
0 голосов
/ 28 июня 2018

Я внимательно прочитал ответ выше, который вы разместили в ссылке ниже.

Программно обновить связанный именованный диапазон объектов Excel в MS Word (2007)

Возникла проблема при обновлении пути к общему диску, используя те же действия, что и выше. Мой файл Excel находится в папке на общем диске, и я попытался поместить объекты OLE вручную, но мне это удалось. При использовании аналогичной логики:

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

это дает мне следующую ошибку:

Word не может создать ссылку на указанный вами объект. пожалуйста вставьте объект непосредственно в ваш файл, не создавая ссылку

Я не могу понять, почему возникает эта ошибка. Любая помощь в этом отношении будет оценена.

Примечание. Я обновляю новый диапазон, а также местоположение файла и имя файла. Я подтвердил, что диапазон в файле Excel действителен.

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 июля 2018

Для обернутых объектов с ранним связыванием:

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
0 голосов
/ 28 июня 2018

Поскольку ссылка уже существует, вы не должны использовать .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
...