Обновление ссылок на файлы с помощью vba в Publisher

Как я могу автоматизировать процесс обновления ссылок на OLEObjects в Publisher с помощью макроса? Я нашел некоторое обсуждение того, как это сделать (в основном в PowerPoint), и у меня возникло несколько проблем при попытке применить это к документу издателя 2010 года.

Во-первых, когда я отображаю.LinkFormat.SourceFullName в окне сообщения, ни одна из ссылок на рабочий лист или объект Excel не отображается так, как в диалоговом окне, когда я редактирую ссылки на файлы с помощью параметров меню.

Во-вторых, когда я пытаюсь просто изменить имя файла, которое отображается как.SourceFullName, я получаю сообщение об ошибке компиляции, которое говорит, что я не могу назначить свойство только для чтения.

Любая помощь с этим будет принята с благодарностью.

Когда я применяю следующий код, я получаю ошибку компиляции при попытке назначить имя новой ссылки. Если я закомментирую строку.SourceFullName = newlink name, я получу окна с сообщениями о том, что у меня есть Edit и Open ObjectVerbs, а отображаемое имя ссылки включает только "C:\Desktop\Projects\old.xlsx". Он не показывает ссылки на листы и диаграммы, которые я вижу связанными с объектом, когда использую команду "Редактировать ссылки на файлы" через ленту. Там диалоговое окно фактически показывает:

old.xlsx! H_A_CurrStat_byYrDxBar! [old.xlsx] H_A_CurrStat_byYrDxBar Chart 1

Я хочу использовать макрос, чтобы изменить имя источника с old.xlsx на new.xlsx, а затем обновить связанные объекты.

Option Explicit

Sub links()

Dim linkname As String
Dim newlinkname As String
Dim shpShape As Shape
Dim intCount As Integer

newlinkname = "C:\Desktop\Projects\new.xlsx"

    For Each shpShape In ActiveDocument.Pages(1).Shapes
       shpShape.OLEFormat.Activate

               With shpShape.OLEFormat
                    For intCount = 1 To .ObjectVerbs.count
                     MsgBox .ObjectVerbs(intCount)
                    Next
                End With

            With shpShape.LinkFormat
                linkname = .SourceFullName
                '.SourceFullName = newlinkname
                MsgBox linkname
            End With

       shpShape.LinkFormat.Update
    Next

End Sub

1 ответ

https://msdn.microsoft.com/en-us/library/office/ff940537.aspx?f=255&MSPPError=-2147217396

Этот код для активации всех объектов может помочь:

    Sub ActivateOLEObjects() 
            Dim shpShape As Shape 

            For Each shpShape In ActiveDocument.Pages(1).Shapes 
                    If shpShape.Type = pbLinkedOLEObject Then 
                            shpShape.OLEFormat.Activate 
                    End If 
            Next 
    End Sub

Или, может быть, даже лучше, этот пример кода для обновления ссылок: https://msdn.microsoft.com/en-us/library/office/ff939544.aspx

    Sub FindOLEObjects() 
            Dim shpShape As Shape 

            For Each shpShape In ActiveDocument.Pages(1).Shapes 
                    If shpShape.Type = pbLinkedOLEObject Then 
                            shpShape.LinkFormat.Update 
                    End If 
            Next shpShape 
    End Sub

Если ни одна из них не помогает, пожалуйста, предоставьте больше информации, например, файл примера или ваш текущий код

Другие вопросы по тегам