Обновление ссылок на файлы с помощью 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
Если ни одна из них не помогает, пожалуйста, предоставьте больше информации, например, файл примера или ваш текущий код